让代码更简单

支付宝在线支付demo异步通知接口校验失败

重要:本文最后更新于2022-01-14 16:51:02,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

距离去年11月收到支付宝要求升级在线支付加密方式的通知已经2个多月了,最近抽空升级接口,发现官方demo中存在一个关于异步通知校验的坑,记录下来方便查阅!

测试环境,支付宝沙箱环境+PHP7.4+Nginx

问题所在返回测试数据:

复制
'fund_bill_list' => '[{\\"amount\\":\\"2.00\\",\\"fundChannel\\":\\"ALIPAYACCOUNT\\"}]'

很明显,这段数据中存在转义字符,并且转义字符参与了支付宝的异步通知签名验证。

解决办法:使用PHP的字符替换函数str_replace替换成空,或者使用PHP的stripslashes函数进行反引用。需要注意的是stripslashes只能去除一层转义符号,这里存在两层,因此需要调用两次。

支付宝在线支付demo异步通知接口校验失败

支付宝在线支付demo异步通知接口校验失败

简单办法直接替换

复制
$_POST['fund_bill_list'] = str_replace('\\', '', $_POST['fund_bill_list']);

将上面代码加入支付宝的异步通知获取post参数后面即可修复问题!

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐