登录  /  注册
首页 > php教程 > php手册 > 正文

ThinkPHP5.0整合支付宝移动支付接口类

PHP中文网
发布: 2016-12-05 13:27:46
原创
1863人浏览过

thinkphp5.0整合支付宝支付,thinkphp5.0整合微信支付,移动app支付
thinkphp5.0整合支付宝移动支付代码功能 实现

app接入支付宝支付时,如果用户手机没有安装支付宝客户端,则会调用支付宝的移动支付h5页面。
如果安装了支付宝支付,则会唤醒支付宝客户端进行支付,用户提现最佳。

支付宝文档地址:
https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7386797.0.0.Y4jDIe&treeId=59&articleId=103563&docType=1




所有的数据都在服务端进行组合,最后返回给客户端一个处理后的字符串。
生成的标准的字符串有提供:

partner="2088101568358171"&seller_id="xxx@alipay.com"&out_trade_no="0819145412-6177"&subject="测试"&body="测试测试"&total_fee="0.01"¬ify_url="http://notify.msp.hk/notify.htm"&service="mobile.securitypay.pay"&payment_type="1"&_input_charset="utf-8"&it_b_pay="30m"&sign="lBBK%2F0w5LOajrMrji7DUgEqNjIhQbidR13GovA5r3TgIbNqv231yC1NksLdw%2Ba3JnfHXoXuet6XNNHtn7VE%2BeCoRO1O%2BR1KugLrQEZMtG5jmJIe2pbjm%2F3kb%2FuGkpG%2BwYQYI51%2BhA3YBbvZHVQBYveBqK%2Bh8mUyb7GM1HxWs9k4%3D"&sign_type="RSA"

ThinkPHP5.0整合支付宝移动支付接口类ThinkPHP5.0整合支付宝移动支付接口类ThinkPHP5.0整合支付宝移动支付接口类ThinkPHP5.0整合支付宝移动支付接口类

代码部分:    //支付宝支付<br>    function  alipay_before(){<br>        $mid = $this-&gt;is_login();<br>        require_once EXTEND_PATH.'Alipay/alipaycore.php';<br>        require_once EXTEND_PATH.'Alipay/alipayrsa.php';<br>        $order_id = input("request.order_id");<br>        if($order_id == 0){<br>            ajaxmsg('非法数据',0);<br>        }<br>        $order_info = Db::name("order")-&gt;where("id={$order_id}")-&gt;find();<br>        //建立请求<br>        $out_trade_no = $order_info['order_sn'];<br>        $total_fee = $order_info['total_price'] + $order_info['trans_price'];   //付款金额<br>        $body = '订单支付';  //商品详情<br>        $alipay_config = Config::get('alipay_config');<br>        //构造要请求的参数数组,无需改动<br>        $parameter = array(<br>            'partner'=&gt;$alipay_config['partner'],//合作者身份ID<br>            'seller_id'=&gt;$alipay_config['seller_id'],<br>            'out_trade_no'=&gt;$out_trade_no,//商户网站唯一订单号<br>            'subject'=&gt;'订单支付',//商品名称<br>            'body'=&gt;$body,//商品详情<br>            'total_fee'=&gt;$total_fee,<br>            'notify_url'=&gt;$alipay_config['notify_url'],//服务器异步通知页面路径<br>            'service'=&gt;$alipay_config['service'],//接口名称<br>            'payment_type'=&gt;$alipay_config['payment_type'],//支付类型<br>            '_input_charset'=&gt;$alipay_config['input_charset'],//参数编码字符集<br>        );<br>        //将post接收到的数组所有元素,按照“参数=参数值”的模式用“&amp;”字符拼接成字符串。<br>        $data = createLinkstring($parameter);<br><br>        //打印待签名字符串。工程目录下的log文件夹中的log.txt。<br>        logResult($data);<br><br>        //将待签名字符串使用私钥签名,且做urlencode. 注意:请求到支付宝只需要做一次urlencode.<br>        $rsa_sign = urlencode(rsaSign($data, $alipay_config['private_key']));<br><br>        //把签名得到的sign和签名类型sign_type拼接在待签名字符串后面。<br>        $data = $data.'&amp;sign='.'"'.$rsa_sign.'"'.'&amp;sign_type='.'"'.$alipay_config['sign_type'].'"';<br><br>        //返回给客户端,建议在客户端使用私钥对应的公钥做一次验签,保证不是他人传输。<br>        //echo $data;<br>        $list['form'] = $data;<br>        ajaxmsg('ok',1,$list);<br>    }支付后通知接口:    //支付宝支付通知<br>    public function alipay_notify_url()<br>    {<br>        $alipay_config = Config::get('alipay_config');<br>        //计算得出通知验证结果<br>        $alipayNotify = new Alipaynotify($alipay_config);<br>        if($alipayNotify-&gt;getResponse($_POST['notify_id']))//判断成功之后使用getResponse方法判断是否是支付宝发来的异步通知。<br>        {<br>            if($alipayNotify-&gt;getSignVeryfy($_POST, $_POST['sign'])) {//使用支付宝公钥验签<br><br>                //——请根据您的业务逻辑来编写程序(以下代码仅作参考)——<br>                //获取支付宝的通知返回参数,可参考技术文档中服务器异步通知参数列表<br>                //商户订单号<br>                $out_trade_no = $_POST['out_trade_no'];<br><br>                //支付宝交易号<br>                $trade_no = $_POST['trade_no'];<br><br>                //交易状态<br>                $trade_status = $_POST['trade_status'];<br><br>                if($_POST['trade_status'] == 'TRADE_FINISHED') {<br>                    //判断该笔订单是否在商户网站中已经做过处理<br>                    //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序<br>                    //如果有做过处理,不执行商户的业务程序<br>                    //注意:<br>                    //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知<br>                    //请务必判断请求时的total_fee、seller_id与通知时获取的total_fee、seller_id为一致的<br>                }<br>                else if ($_POST['trade_status'] == 'TRADE_SUCCESS') {<br>                    $order_info = Db::name("order")-&gt;where("order_sn='{$out_trade_no}'")-&gt;find();<br>                    if($order_info['status'] == 0){<br><br>                        //更新支付状态和支付时间<br>                        Db::name("order")-&gt;where("id={$order_info['id']}")-&gt;save(<br>                            array(<br>                                'pay_ways'=&gt;2,<br>                                "pay_sn"=&gt;$trade_no,<br>                                'pay_time'=&gt;time(),<br>                                'stauts'=&gt;1<br>                            ));<br>                        $this-&gt;fenxiao_account($out_trade_no);<br>                    }<br>                }<br>                //——请根据您的业务逻辑来编写程序(以上代码仅作参考)——<br>                echo "success";        //请不要修改或删除<br>            }<br>            else //验证签名失败<br>            {<br>                echo "sign fail";<br>            }<br>        }<br>        else //验证是否来自支付宝的通知失败<br>        {<br>            echo "response fail";<br>        }<br>    }我写的就是一个标准的下订单的流程,主要是
要能唤醒支付宝客户端,唤醒支付宝是第一步,说明协议,账号,密钥方式都一致。
第二步是要支付成功后接受支付宝的通知,更细自己服务端的数据库。
防止重复更新订单和用户资金账户。

代码我已经贴上去了,把我整合好的源码包直接放到extend目录即可,在controller里面直接调用即可。
注意配置文件要写对,尤其是公钥和私钥的生成方式,注意上传到支付宝平台中心。

技术交流群:495654168

附件 Alipay.zip ( 140.02 KB 下载:24 次 )

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号