目录
环境依赖
注意事项
代码
首页 后端开发 php教程 一个PHP文件搞定支付宝之电脑网站支付

一个PHP文件搞定支付宝之电脑网站支付

Apr 09, 2018 am 10:15 AM
php 支付 电脑

本篇文章给大家分享的内容是关于用一个PHP文件搞定支付宝之电脑网站支付 ,有需要的朋友可以参考一下

网上的很多PHP支付宝支付接入教程都颇为复杂,且需要配置和引入较多的文件,本人通过整理后给出一个单文件版的,希望可以给各位想接入支付宝支付的带来些许帮助和借鉴意义。

一个PHP文件搞定支付宝系列:https://github.com/dedemao/alipay

一个PHP文件搞定微信支付系列:https://github.com/dedemao/weixinPay

环境依赖

PHP5.0以上,且需要开启CURL服务、SSL服务。

注意事项

1.文件开头的配置信息必须完善
2.商户私钥需填写对应签名算法类型的私钥,如何生成密钥参考:
2.1 https://docs.open.alipay.com/291/105971
2.2 https://docs.open.alipay.com/200/105310

代码

<?phpheader(&#39;Content-type:text/html; Charset=utf-8&#39;);$appid = &#39;xxxxx&#39;;  //https://open.alipay.com 账户中心->密钥管理->开放平台密钥,填写添加了电脑网站支付的应用的APPID$returnUrl = &#39;http://www.xxx.com/alipay/return.php&#39;;     //付款成功后的同步回调地址$notifyUrl = &#39;http://www.xxx.com/alipay/notify.php&#39;;     //付款成功后的异步回调地址$outTradeNo = uniqid();     //你自己的商品订单号$payAmount = 0.01;          //付款金额,单位:元$orderName = &#39;支付测试&#39;;    //订单标题$signType = &#39;RSA2&#39;;       //签名算法类型,支持RSA2和RSA,推荐使用RSA2//商户私钥,填写对应签名算法类型的私钥,如何生成密钥参考:https://docs.open.alipay.com/291/105971和https://docs.open.alipay.com/200/105310$saPrivateKey=&#39;MIIEpAIBAAKCAQEA1MV+OY6MvGfXPM0MkpjT+FdzGmPOvVmX2wF3gjwQpeHBEUP9jLXhVS32fZ1iXI1e7WUGQ5tvXn28P8190kpOn/c/G5t2CAksUvemvF7uJN/N3Z1HFMdt3omvCd14K05lgcFYz7Z4c+A7ZJF5bPCB6oshjjUmbCY3hibuWzX/1j8AgsoD9lLyxoFqxLj98k5ZrYIhk900gMQs/WJ3A1FC09Dln9fuhBUyjtPHaml+4w+sdkdzxPktxdFrMcI7M7rNEwg25XtST5Z49oFpE84AlXM7+oC9jYvIpTGE00WomsgtakN039ucT/59Bup6pLkO08Rv85UXbqzGTcYAhNHLfQIDAQABAoIBAQCbuP258s+j8KgB8ty5yiqRPoeaj+O2h4Txn7A02/sfPQvNtCI0wsTpT5twsihULo+EVYTxJCitUn7df2sP5pyGzTEd5njLRtNu4Zvhj+Thjf8grERiu9b4oXI/WRzjLRxzi+uREi40OK+fWi0xgxDCdROY/eNiEdJfV8zpaqsUxG7VdwZIJQ/8d3Mi31OWv30kr9jfEd15DBInGJgSqR+qwrAB4pBSMcW8hL6PYlzoPi1ygceFjRrnbefG40zt0OUPSexQIgAmFvGqxTl5xo3dFEziGHdfWYsBKZ2M8ubAe+R6LcndxI+o2Hw4TNcC1tDeNMtjw7+h9S5aef5A8uWBAoGBAPxCLWPhUHCYlIXUz0D1SoolZs9WK7Kz1YSWnzqrpegN+foS5/ji93YylGE+KL31TwbnGQLAwknwMX3qTzmkvTovmy8jevXBsCSEFm81q0wG/35e1SKkTXL66RqB2y0xFLdcF3f9s8ZiEclqkYwNSHh0nqzREfIxMMAsj+3n2vHdAoGBANftYkZYrbs4iI/ZcjmBYguYikNfNmrD+Ta6ckOGZqsHfwXJCAz1rF4/XCqVAc9nxuzJR/72qkn9z07uH6qSZCqlZDRkiiKaK2UVqFDB+0abMk/TGHXuMmdvMkyj2jEZxG2rkg0kmg4qYkkg/5tGG1On/0GeZNVPu8JpsFr1pDYhAoGBANr8pCTKC6fDfWP1C3qrtmrY7zhc6RB4d4pjq5UmP5+EypaiZQi2F/dfD1qfuIS3eURXyGmQZtoDDyPtDZvP/ImPnFs+pNbFryD0HfmrEKquhIvyzXoGQknnsgbV5iy3KCTJaII9FxzINAKzZei7+0a+jqUd1kN3Gogp50Sze2ltAoGARaM5Xpaa8RZ6dGocfI9Nn4/Ch5fdZPFvHkdjMoPV+LKiNKtw/Tz+KiclAlasDsfZT+RaY9AJe3NvuHTzoX807swIVR1Xr3EpLaCed+0XrN3AjB34dZAskU87WZw+cjdtMjFzGOoFBSyGJi+OP/WMOp6jo/YBbwoX88tCJROzsgECgYAT8pHHIyPt5Y/5pDb8EDvD3XNES1fBkfZffSoAodsrkeoKgrsKl+9M3rcGX+S9dscyoH0ur3BFTMHtIOOhC5qytt+BhMHIP5mAs4di4u/joQCWQbUyrUggVK5it+6BFgAT+jeB7zTAUtgGpTVFq3kLbV0NZ+XQyEHVlnoJnHYpQg==&#39;;$aliPay = new AlipayService($appid,$returnUrl,$notifyUrl,$saPrivateKey);$sHtml = $aliPay->doPay($payAmount,$outTradeNo,$orderName,$returnUrl,$notifyUrl);echo $sHtml;class AlipayService{
    protected $appId;    protected $returnUrl;    protected $notifyUrl;    protected $charset;    //私钥值
    protected $rsaPrivateKey;    public function __construct($appid, $returnUrl, $notifyUrl,$saPrivateKey)
    {
        $this->appId = $appid;        $this->returnUrl = $returnUrl;        $this->notifyUrl = $notifyUrl;        $this->charset = &#39;utf8&#39;;        $this->rsaPrivateKey=$saPrivateKey;
    }    /**
     * 发起订单
     * @param float $totalFee 收款总费用 单位元
     * @param string $outTradeNo 唯一的订单号
     * @param string $orderName 订单名称
     * @param string $notifyUrl 支付结果通知url 不要有问号
     * @param string $timestamp 订单发起时间
     * @return array
     */
    public function doPay($totalFee, $outTradeNo, $orderName, $returnUrl,$notifyUrl)
    {
        //请求参数
        $requestConfigs = array(            &#39;out_trade_no&#39;=>$outTradeNo,            &#39;product_code&#39;=>&#39;FAST_INSTANT_TRADE_PAY&#39;,            &#39;total_amount&#39;=>$totalFee, //单位 元
            &#39;subject&#39;=>$orderName,  //订单标题
        );        $commonConfigs = array(            //公共参数
            &#39;app_id&#39; => $this->appId,            &#39;method&#39; => &#39;alipay.trade.page.pay&#39;,             //接口名称
            &#39;format&#39; => &#39;JSON&#39;,            &#39;return_url&#39; => $returnUrl,            &#39;charset&#39;=>$this->charset,            &#39;sign_type&#39;=>&#39;RSA2&#39;,            &#39;timestamp&#39;=>date(&#39;Y-m-d H:i:s&#39;),            &#39;version&#39;=>&#39;1.0&#39;,            &#39;notify_url&#39; => $notifyUrl,            &#39;biz_content&#39;=>json_encode($requestConfigs),
        );        $commonConfigs["sign"] = $this->generateSign($commonConfigs, $commonConfigs[&#39;sign_type&#39;]);        return $this->buildRequestForm($commonConfigs);
    }    /**
     * 建立请求,以表单HTML形式构造(默认)
     * @param $para_temp 请求参数数组
     * @return 提交表单HTML文本
     */
    protected function buildRequestForm($para_temp) {

        $sHtml = "<form id=&#39;alipaysubmit&#39; name=&#39;alipaysubmit&#39; action=&#39;https://openapi.alipay.com/gateway.do?charset=".$this->charset."&#39; method=&#39;POST&#39;>";        while (list ($key, $val) = each ($para_temp)) {            if (false === $this->checkEmpty($val)) {                $val = str_replace("&#39;","&apos;",$val);                $sHtml.= "<input type=&#39;hidden&#39; name=&#39;".$key."&#39; value=&#39;".$val."&#39;/>";
            }
        }        //submit按钮控件请不要含有name属性
        $sHtml = $sHtml."<input type=&#39;submit&#39; value=&#39;ok&#39; style=&#39;display:none;&#39;&#39;></form>";        $sHtml = $sHtml."<script>document.forms[&#39;alipaysubmit&#39;].submit();</script>";        return $sHtml;
    }    public function generateSign($params, $signType = "RSA") {
        return $this->sign($this->getSignContent($params), $signType);
    }    protected function sign($data, $signType = "RSA") {
        $priKey=$this->rsaPrivateKey;        $res = "-----BEGIN RSA PRIVATE KEY-----\n" .
            wordwrap($priKey, 64, "\n", true) .            "\n-----END RSA PRIVATE KEY-----";

        ($res) or die(&#39;您使用的私钥格式错误,请检查RSA私钥配置&#39;);        if ("RSA2" == $signType) {
            openssl_sign($data, $sign, $res, version_compare(PHP_VERSION,&#39;5.4.0&#39;, &#39;<&#39;) ? SHA256 : OPENSSL_ALGO_SHA256); //OPENSSL_ALGO_SHA256是php5.4.8以上版本才支持
        } else {
            openssl_sign($data, $sign, $res);
        }        $sign = base64_encode($sign);        return $sign;
    }    /**
     * 校验$value是否非空
     *  if not set ,return true;
     *    if is null , return true;
     **/
    protected function checkEmpty($value) {
        if (!isset($value))            return true;        if ($value === null)            return true;        if (trim($value) === "")            return true;        return false;
    }    public function getSignContent($params) {
        ksort($params);        $stringToBeSigned = "";        $i = 0;        foreach ($params as $k => $v) {            if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) {                // 转换成目标字符集
                $v = $this->characet($v, $this->charset);                if ($i == 0) {                    $stringToBeSigned .= "$k" . "=" . "$v";
                } else {                    $stringToBeSigned .= "&" . "$k" . "=" . "$v";
                }                $i++;
            }
        }        unset ($k, $v);        return $stringToBeSigned;
    }    /**
     * 转换字符集编码
     * @param $data
     * @param $targetCharset
     * @return string
     */
    function characet($data, $targetCharset) {
        if (!empty($data)) {            $fileType = $this->charset;            if (strcasecmp($fileType, $targetCharset) != 0) {                $data = mb_convert_encoding($data, $targetCharset, $fileType);                //$data = iconv($fileType, $targetCharset.&#39;//IGNORE&#39;, $data);
            }
        }        return $data;
    }
}
登录后复制

 相关推荐:

php实现产品加入购物车功能(1)_php实例               

以上是一个PHP文件搞定支付宝之电脑网站支付 的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PS一直显示正在载入是什么原因? PS一直显示正在载入是什么原因? Apr 06, 2025 pm 06:39 PM

PS“正在载入”问题是由资源访问或处理问题引起的:硬盘读取速度慢或有坏道:使用CrystalDiskInfo检查硬盘健康状况并更换有问题的硬盘。内存不足:升级内存以满足PS对高分辨率图片和复杂图层处理的需求。显卡驱动程序过时或损坏:更新驱动程序以优化PS和显卡之间的通信。文件路径过长或文件名有特殊字符:使用简短的路径和避免使用特殊字符。PS自身问题:重新安装或修复PS安装程序。

说明匹配表达式(PHP 8)及其与开关的不同。 说明匹配表达式(PHP 8)及其与开关的不同。 Apr 06, 2025 am 12:03 AM

在PHP8 中,match表达式是一种新的控制结构,用于根据表达式的值返回不同的结果。1)它类似于switch语句,但返回值而非执行语句块。2)match表达式使用严格比较(===),提升了安全性。3)它避免了switch语句中可能的break遗漏问题,增强了代码的简洁性和可读性。

H5页面制作是否需要持续维护 H5页面制作是否需要持续维护 Apr 05, 2025 pm 11:27 PM

H5页面需要持续维护,这是因为代码漏洞、浏览器兼容性、性能优化、安全更新和用户体验提升等因素。有效维护的方法包括建立完善的测试体系、使用版本控制工具、定期监控页面性能、收集用户反馈和制定维护计划。

什么是跨站点伪造(CSRF),您如何在PHP中实施CSRF保护? 什么是跨站点伪造(CSRF),您如何在PHP中实施CSRF保护? Apr 07, 2025 am 12:02 AM

在PHP中可以通过使用不可预测的令牌来有效防范CSRF攻击。具体方法包括:1.生成并在表单中嵌入CSRF令牌;2.在处理请求时验证令牌的有效性。

如何加快PS的载入速度? 如何加快PS的载入速度? Apr 06, 2025 pm 06:27 PM

解决 Photoshop 启动慢的问题需要多管齐下,包括:升级硬件(内存、固态硬盘、CPU);卸载过时或不兼容的插件;定期清理系统垃圾和过多的后台程序;谨慎关闭无关紧要的程序;启动时避免打开大量文件。

您如何防止班级被扩展或方法在PHP中被覆盖? (最终关键字) 您如何防止班级被扩展或方法在PHP中被覆盖? (最终关键字) Apr 08, 2025 am 12:03 AM

在PHP中,final关键字用于防止类被继承和方法被重写。1)标记类为final时,该类不能被继承。2)标记方法为final时,该方法不能被子类重写。使用final关键字可以确保代码的稳定性和安全性。

描述...(SPLAT)操作员在php函数参数和数组解开包装中的目的和用法。 描述...(SPLAT)操作员在php函数参数和数组解开包装中的目的和用法。 Apr 06, 2025 am 12:07 AM

PHP中的...(splat)操作符用于函数参数和数组解包,提升代码简洁性和效率。1)函数参数解包:将数组元素作为参数传递给函数。2)数组解包:将一个数组解包到另一个数组中或作为函数参数。

PS执行操作时一直显示正在载入如何解决? PS执行操作时一直显示正在载入如何解决? Apr 06, 2025 pm 06:30 PM

PS卡在“正在载入”?解决方法包括:检查电脑配置(内存、硬盘、处理器)、清理硬盘碎片、更新显卡驱动、调整PS设置、重新安装PS,以及养成良好的编程习惯。

See all articles