lumen接入支付宝h5/wap支付
参考资料:https://docs.open.alipay.com/api_1/alipay.trade.wap.pay
下载资料:https://docs.open.alipay.com/54/103419/
采用本方式的好处是支付宝sdk升级时候,只需要更换vendor里的支付宝sdk文件即可。本文只完成了支付。
1、将支付宝sdk放入vendor目录。
2、
在composer.json 的 autoload 节点里加入:
“classmap”: [
“vendor/alipay-sdk-php/aop”
]
运行composer dump-autoload
3、修改\vendor\alipay-sdk-php\aop\AopEncrypt.php里的加密/解密函数,因为可能和Lumen中的函数相冲突。
将 encrypt 修改为:encryptAlipay
将 decrypt 修改为:decryptAlipay
4、修改\vendor\alipay-sdk-php\aop\AopClient.php里的有关encrypt和decryp方法为新的方法名
涉及到的方法:encryptJSONSignSource 和 encryptXMLSignSource,pageExecute 和 execute
lumen中的应用:
A、如何use
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
use AopClient; //vendor 阿里支付源生 use AlipayTradeWapPayRequest; //h5请求 use AlipayTradeAppPayRequest; //app请求 B、使用方式,先把必要的参数存到$config数组里,然后前端提交非公共请求参数里的部分内容,生成包含form表单的Html【会用Js方式自动提交】, 如果怕不能自动提交,则可以显示出来,用自己的方法提交。 //非公共请求参数 $parameter = array( "product_code" => "QUICK_WAP_WAY", //手机网站支付的固定值 "out_trade_no" => 商户订单号, "subject" => 标题,商品名称, "total_amount" => 金额(元), "goods_type" => 1, //0虚拟类商品 1 实物商品 "quit_url" => url网址, //中断支付宝退出后跳转的url "body" => '' //可以是商品名称相加,也可以是你想放置的内容 ); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
$aop = new AopClient (); //系统配置 $aop->appId = $config['appId']; $aop->rsaPrivateKey = $config['rsaPrivateKey']; //私钥 $aop->alipayrsaPublicKey = $config['alipayrsaPublicKey']; //支付宝公钥【不是自己生成的那个公钥】 $aop->apiVersion = $config['apiVersion']; //固定是1.0 $aop->signType = $config['signType']; //加密类型RSA2推荐 $aop->postCharset = $config['postCharset']; //字符类型 $aop->format = $config['format']; //josn或者xml $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do'; //支付网关 $request = new AlipayTradeWapPayRequest(); $request->setBizContent(self::alipyGetBizContent($parameter)); //非公共请求参数处理【自己新增的方法】 $request->setNotifyUrl(url("校验用的url")); //返回的校验url $request->setReturnUrl("提交完毕后返回的网址"); //返回的网址 //提交,返回值是一段form的html,自动提交的。自行处理即可。 $result = $aop->pageExecute($request,"post"); C、完成交易后,支付宝会根据提交校验用的Notify_Url进行校验。它会发送一组post数据,用 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
Log::debug('POST请求参数' . json_encode($_POST)); 获取即可看到。 校验的代码: //获取config信息 //获取本地订单信息,以便验签成功后处理 //支付宝返回数值验签 $aop = new AopClient (); //系统配置 $aop->appId = $config['appId']; $aop->rsaPrivateKey = $config['rsaPrivateKey']; $aop->alipayrsaPublicKey = $config['alipayrsaPublicKey']; $aop->apiVersion = $config['apiVersion']; $aop->signType = $config['signType']; $aop->postCharset = $config['postCharset']; $aop->format = $config['format']; //验签的加密方式 $request_signType = $_POST['sign_type']; //验签 $isVerify = $aop->rsaCheckV1($_POST, NULL, $request_signType); if ($isVerify) { //验证成功 } else { //验签失败 } |
噢!评论已关闭。