距离去年11月收到支付宝要求升级在线支付加密方式的通知已经2个多月了,最近抽空升级接口,发现官方demo中存在一个关于异步通知校验的坑,记录下来方便查阅!
测试环境,支付宝沙箱环境+PHP7.4+Nginx
问题所在返回测试数据:
复制
'fund_bill_list' => '[{\\"amount\\":\\"2.00\\",\\"fundChannel\\":\\"ALIPAYACCOUNT\\"}]'
很明显,这段数据中存在转义字符,并且转义字符参与了支付宝的异步通知签名验证。
解决办法:使用PHP的字符替换函数str_replace
替换成空,或者使用PHP的stripslashes
函数进行反引用。需要注意的是stripslashes
只能去除一层转义符号,这里存在两层,因此需要调用两次。
简单办法直接替换
复制
$_POST['fund_bill_list'] = str_replace('\\', '', $_POST['fund_bill_list']);
将上面代码加入支付宝的异步通知获取post参数后面即可修复问题!
评论 (0)