thinkphp整合系列之支付宝RSA加密方式
上篇博客写的是MD5加密方式;thinkphp整合系列之支付宝MD5加密方式扫码支付http://baijunyao.com/article/75
但是呢;移动支付是没有MD5加密的;只能是RSA加密;
long long ago;支付宝官方是没有给RSA加密的demo的;
这次为了写博客整理代码的时候;竟然发现了官方给了一份demo;
但是;竟然把MD5和RSA分成了2个SDK;
好吧;这里给出的是二合一版的SDK;切换加密方式只需在配置项中设置下即可;
示例项目:http://git.oschina.net/shuaibai123/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;到这里;支付宝的两种加密方式就整合完成了;