thinkphp整合系列之支付宝RSA加密方式接收移动支付通知

上篇博客写的是MD5加密方式;thinkphp整合系列之支付宝MD5加密方式扫码支付
但是呢;移动支付是没有MD5加密的;只能是RSA加密;
long long ago;支付宝官方是没有给RSA加密的demo的;
这次为了写博客整理代码的时候;竟然发现了官方给了一份demo;
但是;竟然把MD5和RSA分成了2个SDK;
好吧;这里给出的是独家研制的二合一版的SDK;切换加密方式只需在配置项中设置下即可;
示例项目:https://github.com/baijunyao/thinkphp-bjyadmin
一:导入sdk
/ThinkPHP/Library/Vendor/Alipay
这个sdk和上篇文章中的MD5加密方式的sdk是一套;
二:配置项
/Application/Common/Conf/config.php

    'ALIPAY_CONFIG'          => array(
        'partner'            => '', // partner 从支付宝商户版个人中心获取
        'seller_email'       => '', // email 从支付宝商户版个人中心获取
        'key'                => '', // key 从支付宝商户版个人中心获取
        'sign_type'          => strtoupper(trim('MD5')), // 可选md5  和 RSA
        'input_charset'      => 'utf-8', // 编码 (固定值不用改)
        'transport'          => 'http', // 协议  (固定值不用改)
        'cacert'             => VENDOR_PATH.'Alipay/cacert.pem',  // cacert.pem存放的位置 (固定值不用改)
        'notify_url'         => 'http://baijunyao.com/Api/Alipay/alipay_notify', // 异步接收支付状态通知的链接
        'return_url'         => 'http://baijunyao.com/Api/Alipay/alipay_return', // 页面跳转 同步通知 页面路径 支付宝处理完请求后,当前页面自 动跳转到商户网站里指定页面的 http 路径。 (扫码支付专用)
        'show_url'           => 'http://baijunyao.com/User/Order/index', // 商品展示网址,收银台页面上,商品展示的超链接。 (扫码支付专用)
        'private_key_path'   => '', //移动端生成的私有key文件存放于服务器的 绝对路径 如果为MD5加密方式;此项可为空 (移动支付专用)
        'public_key_path'    => '', //移动端生成的公共key文件存放于服务器的 绝对路径 如果为MD5加密方式;此项可为空 (移动支付专用)
        ),

既然是RSA加密方式;那主要就是来接收移动支付支付成功后的支付结果了;
那么就不需要管return_url、show_url这两个参数了;
RSA私钥及公钥生成方式在这:https://doc.open.alipay.com/doc2/detail?treeId=58&articleId=103242&docType=1
需要强调的是注释中说的;路径要是php可以访问的绝对路径;
三:接收异步通知
我们是需要给移动端开发人员一个接收支付结果通知的url既notify_url;
移动端支付成功后;支付宝的服务器会向我们指定的notify_url发送post通知;
当判断支付成功后;就更改订单状态;
/Application/Api/Controller/AlipayController.class.php

    /**
     * notify_url接收页面
     */
    public function alipay_notify(){
        // 引入支付宝
        vendor('Alipay.AlipayNotify','','.class.php');
        $config=$config=C('ALIPAY_CONFIG');
        $alipayNotify = new \AlipayNotify($config);
        // 验证支付数据
        $verify_result = $alipayNotify->verifyNotify();
        if($verify_result) {
            echo "success";
            // 下面写验证通过的逻辑 比如说更改订单状态等等 $_POST['out_trade_no'] 为订单号;

        }else {
            echo "fail";
        }
    }

ok;到这里;支付宝的两种加密方式就整合完成了;
//*****************关于不知道怎么查看异步发过来的数据的补充*****************
2016.10.28:
好多童鞋在问支付后;不知道怎么查看接收到的支付状态通知;
这里做个补充;首先;我们的服务器必须是外网可以正常访问到的;
必须注意不能有 登录或者权限之类的拦截;
另外补充一个简单的查看收到的内容的方法用于测试;
/Application/Api/Controller/AlipayController.class.php

    /**
     * notify_url接收页面
     */
    public function alipay_notify(){
        // 下面的file_put_contents是用来简单查看异步发过来的数据 测试完可以删除;
        file_put_contents('./notify.text', json_encode($_POST));
        // 引入支付宝
        vendor('Alipay.AlipayNotify','','.class.php');
        $config=$config=C('ALIPAY_CONFIG');
        $alipayNotify = new \AlipayNotify($config);
        // 验证支付数据
        $verify_result = $alipayNotify->verifyNotify();
        if($verify_result) {
            echo "success";
            // 下面写验证通过的逻辑 比如说更改订单状态等等 $_POST['out_trade_no'] 为订单号;

        }else {
            echo "fail";
        }
    }

白俊遥博客

白俊遥博客
请先登录后发表评论
  • latest comments
  • 总共15条评论
白俊遥博客

RED :白大,我是php小白,研究了好几天,实在是不知道移动端支付怎么弄,前端是否和MD5扫码支付有区别,官方的sdk和demo我看得眼都花了。。。能不能指点指点,弄不好这个我可能真的要丢工作的。如果白大能帮我度过这关,我愿意掏出一个月工资给赞助博客

2017-07-14 09:16:19 回复

白俊遥博客 白俊遥博客

云淡风晴 :有问题我可以尽量帮;工资就不用了;

2017-07-14 23:04:50 回复

白俊遥博客

Antion Zhou :目前我支付正常支付,但是不等支付宝回调那五分钟,支付宝payment改不了success!! 求问

2017-04-25 17:13:40 回复

白俊遥博客

' Silent : 

2017-04-17 10:53:52 回复

白俊遥博客

Vip :感谢博客主的分享!

2016-12-16 14:28:45 回复

白俊遥博客

LauEl :感谢博客主的分享!

2016-11-28 19:24:09 回复

白俊遥博客

-乐天送 :移动支付要怎么处理要RSA加密的数据,还有前端调用时,是将加密后的数据返回给前端就行了吗。。。本人小白,求答复

2016-10-25 17:27:44 回复

白俊遥博客 白俊遥博客

云淡风晴 :移动端唤起支付宝支付;支付宝首先会返回给移动端支付状态;然后;支付宝的服务器会向我们的服务器发送一条支付状态通知;我们接收到通知验证数据后;根据支付状态;改变数据库中的订单状态;

2016-10-27 00:16:55 回复

白俊遥博客

老老宋 :楼主 没有 联系方式吗?

2016-10-10 13:13:38 回复

白俊遥博客

快乐远〖航〗 :白大大,按照你的上篇教程 支付宝及时到账整合成功了,但是这个移动支付没有看明白,本人小白一个:支付宝移动支付 如何在控制器里面写调用支付请求? 比如上一篇的alipay($data)来调用,移动支付怎么调用呢?

2016-10-06 00:28:39 回复

白俊遥博客 白俊遥博客

云淡风晴 :移动支付是要移动端开发人员整合的;php后端只接收支付结果通知即可;

2016-10-09 07:23:30 回复

白俊遥博客

嘿,二小姐 :alipay_rsa.function.php里面rsaVerify函数不是应该传public key吗 还有sign参数要base64_decode

2016-09-08 23:37:46 回复

白俊遥博客 白俊遥博客

云淡风晴 :非常感谢提醒;整理sdk的时候漏掉了;已经改正;

2016-09-10 00:24:32 回复

白俊遥博客

南城阿牛 :我又来啦,感谢更新

2016-07-05 14:14:14 回复

白俊遥博客 白俊遥博客

云淡风晴 :谢谢肯定;

2016-07-05 21:38:40 回复