支付宝请求签名php,支付宝APP之php后台签名以及验签实现方法

签名和验签在APP端也是可以完成的,考虑到安全问题,签名和验签最好在服务端完成,支付宝官方建议也是这样的,所以php端需要把签名好的参数传给APP端。详细步骤见正文:

一、 下载php支付宝sdk

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.eCtVsf&treeId=54&articleId=103419&docType=1 (旧)

https://docs.open.alipay.com/54/103419/(新)

二、 查看支付宝App支付请求参数文档,拼接请求参数,签名

App支付请求参数说明

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.wM4mV1&treeId=204&articleId=105465&docType=1(旧)

https://docs.open.alipay.com/204/105465/(新)

先是参数拼接生成签名,再把前面的参数和签名进行组装。核心代码如下:require_once '/Alipay/aop/AopClient.php'; $private_path = "/Alipay/key/rsa_private_key.pem";//私钥路径

//构造业务请求参数的集合(订单信息)

$content = array(); $content['subject'] = "商品的标题/交易标题/订单标题/订单关键字等";

$content['out_trade_no'] = "商户网站唯一订单号";

$content['timeout_express'] = "该笔订单允许的最晚付款时间";

$content['total_amount'] = "订单总金额(必须定义成浮点型)";

$content['product_code'] = "QUICK_MSECURITY_PAY";/销售产品码,固定值

$con = json_encode($content);//$content是biz_content的值,将之转化成json字符串

//公共参数

$Client = new \AopClient();//实例化支付宝sdk里面的AopClient类,下单时需要的操作,都在这个类里面

$param['app_id'] = '支付宝分配给开发者的应用ID'; $param['method'] = 'alipay.trade.app.pay';//接口名称,固定值

$param['charset'] = 'utf-8';//请求使用的编码格式

$param['sign_type'] = 'RSA2';//商户生成签名字符串所使用的签名算法类型

$param['timestamp'] = date("Y-m-d Hi:i:s");//发送请求的时间

$param['version'] = '1.0';//调用的接口版本,固定为:1.0

$param['notify_url'] = '支付宝服务器异步回调地址'; $param['biz_content'] = $con;//业务请求参数的集合,长度不限,json格式,即前面一步得到的

$paramStr = $Client->getSignContent($param);//组装请求签名参数

$sign = $Client->alonersaSign($paramStr, $private_path, 'RSA2', true);//生成签名

$param['sign'] = $sign; $str = $Client->getSignContentUrlencode($param);//最终请求参数

请求的说明,支付宝说的很清楚,这里再重新附上截图:

ce11617c9ff689db4d1757120e4a8896.png

三、验签

App 支付成功后会有返回字符串,客服端也需要判断,这里不罗嗦,如下图:

e9797ff9a4a83e39e8b7ea8ce7222407.png

下一步就是在php服务端进行验签,支付宝异步会以post方式返回数据到异步回调地址:function notify()

{

require_once('/alipay/aop/AopClient.php'); $aop = new \AopClient; //$public_path = "key/rsa_public_key.pem";//公钥路径

$aop->alipayrsaPublicKey = "支付宝公钥"; //此处验签方式必须与下单时的签名方式一致

$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2"); //验签通过后再实现业务逻辑,比如修改订单表中的支付状态。

/**

* ①验签通过后核实如下参数out_trade_no、total_amount、seller_id

* ②修改订单表

**/

//打印success,应答支付宝。必须保证本界面无错误。只打印了success,否则支付宝将重复请求回调地址。

echo 'success';

}

后记:

之前一直验签失败,找了好久,终于解决了。文档中说,验签用的是支付宝公钥,并不是RSA2公钥,这里需要特别注意,不要用错了

c6c4ffc332aca5b2223ab0e6893d95cb.png

请看截图:

042137a59dd27c2a229c9582852158bc.png

版权声明:本文为博主原创文章,未经博主允许不得转载。

签名和验签在APP端也是可以完成的,考虑到安全问题,签名和验签最好在服务端完成,支付宝官方建议也是这样的,所以php端需要把签名好的参数传给APP端。详细步骤见正文:

一、 下载php支付宝sdk

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.eCtVsf&treeId=54&articleId=103419&docType=1 (旧)

https://docs.open.alipay.com/54/103419/(新)

二、 查看支付宝App支付请求参数文档,拼接请求参数,签名

App支付请求参数说明

https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.wM4mV1&treeId=204&articleId=105465&docType=1(旧)

https://docs.open.alipay.com/204/105465/(新)

先是参数拼接生成签名,再把前面的参数和签名进行组装。核心代码如下:require_once '/Alipay/aop/AopClient.php'; $private_path = "/Alipay/key/rsa_private_key.pem";//私钥路径

//构造业务请求参数的集合(订单信息)

$content = array(); $content['subject'] = "商品的标题/交易标题/订单标题/订单关键字等"; $content['out_trade_no'] = "商户网站唯一订单号"; $content['timeout_express'] = "该笔订单允许的最晚付款时间"; $content['total_amount'] = "订单总金额(必须定义成浮点型)"; $content['product_code'] = "QUICK_MSECURITY_PAY";/销售产品码,固定值 $con = json_encode($content);//$content是biz_content的值,将之转化成json字符串//公共参数

$Client = new \AopClient();//实例化支付宝sdk里面的AopClient类,下单时需要的操作,都在这个类里面

$param['app_id'] = '支付宝分配给开发者的应用ID'; $param['method'] = 'alipay.trade.app.pay';//接口名称,固定值

$param['charset'] = 'utf-8';//请求使用的编码格式

$param['sign_type'] = 'RSA2';//商户生成签名字符串所使用的签名算法类型

$param['timestamp'] = date("Y-m-d Hi:i:s");//发送请求的时间

$param['version'] = '1.0';//调用的接口版本,固定为:1.0

$param['notify_url'] = '支付宝服务器异步回调地址'; $param['biz_content'] = $con;//业务请求参数的集合,长度不限,json格式,即前面一步得到的

$paramStr = $Client->getSignContent($param);//组装请求签名参数

$sign = $Client->alonersaSign($paramStr, $private_path, 'RSA2', true);//生成签名

$param['sign'] = $sign; $str = $Client->getSignContentUrlencode($param);//最终请求参数

请求的说明,支付宝说的很清楚,这里再重新附上截图:

ce11617c9ff689db4d1757120e4a8896.png

三、验签

App 支付成功后会有返回字符串,客服端也需要判断,这里不罗嗦,如下图:

e9797ff9a4a83e39e8b7ea8ce7222407.png

下一步就是在php服务端进行验签,支付宝异步会以post方式返回数据到异步回调地址:function notify()

{

require_once('/alipay/aop/AopClient.php'); $aop = new \AopClient; //$public_path = "key/rsa_public_key.pem";//公钥路径

$aop->alipayrsaPublicKey = "支付宝公钥"; //此处验签方式必须与下单时的签名方式一致

$flag = $aop->rsaCheckV1($_POST, NULL, "RSA2"); //验签通过后再实现业务逻辑,比如修改订单表中的支付状态。

/**

* ①验签通过后核实如下参数out_trade_no、total_amount、seller_id

* ②修改订单表

**/

//打印success,应答支付宝。必须保证本界面无错误。只打印了success,否则支付宝将重复请求回调地址。

echo 'success';

}

后记:

之前一直验签失败,找了好久,终于解决了。文档中说,验签用的是支付宝公钥,并不是RSA2公钥,这里需要特别注意,不要用错了

c6c4ffc332aca5b2223ab0e6893d95cb.png

请看截图:

042137a59dd27c2a229c9582852158bc.png

相关推荐:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值