php支付宝同步和异步有什么区别,支付宝异步验签和同步验签

开发支付接口时未使用支付宝提供的 demo ,那个SDK一堆的坑,所以手工写的全部代码,未使用支付宝一点代码。支付一切正常,异步通知一切正常,异步验证正常。

唯独在查询订单和返回数据两个地方搞了半天,会返回“验签出错,建议检查签名字符串或签名私钥与应用公钥是否匹配,网关生成的验签字符串为”。从头到尾检查代码找不到问题,支付宝官方API列表看了又看,都没有问题。于是对比返回的错误数据和查询验签的数据,坑在此处。明明说好 biz_content 请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递,具体参照各产品快速接入文档。可是支付坑人在这里,实际是 biz_content 不但要作为 json 集合请求参数,还要与公共参数进行合并。

第一处坑:

// 公共请求参数

$arr = array(

'app_id' => $config['app_id'],

'method' => 'alipay.trade.query',

'format' => 'json',

'charset' => 'UTF-8',

'sign_type' => $config['sign_type'],

'timestamp' => date('Y-m-d H:i:s', $time),

'version' => '1.0',

'biz_content' => json_encode($biz_content, JSON_UNESCAPED_UNICODE) // 业务请求参数

);

$arr += $biz_content; // 坑在此处,要合并,不然验签会失败

第二处坑,主动查询订单状态,对返回数据验签:

如果一切正常的花,返回json数据中包含 alipay_trade_query_response 和 sign 签名,对 json 数据 json_decode 得到数组,坑出现了,我把得到 alipay_trade_query_response 排序转字符串,验签死活都是错误的。因为支付时,要求排序转字符串了,所以此处也就排序转字符串,那么大错特错了。此处得到的 alipay_trade_query_response 数据直接转 json 字串,然后验签才是正确做法。

其他说一下,容易搞错的。分清楚:应用私钥、应用公钥、支付宝公钥

1.应用私钥即为商户私钥,客户端使用,后台或支付宝配置中填写;

2.应用公钥在开放平台 “RSA2(SHA256)密钥(推荐)”处填写,然后返回 支付宝公钥;

10f98945f399c414310e576c84b06094.png

3.支付宝公钥需要在客户端配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值