lumen接入支付宝h5/wap支付

    |     2019年7月25日   |   学习偶记   |     评论已关闭   |    382

参考资料: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

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"                  => '' //可以是商品名称相加,也可以是你想放置的内容
);
$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数据,用
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
{
//验签失败
}

噢!评论已关闭。