php 支付宝wap端手机网站支付异步回调失败
最近公司开发一个落地页,需要用到支付宝的wap 支付,本该一切顺利直接下载 蚂蚁平台的 sdk 配上 相应的参数就可以接通
从配置公钥,调起支付宝客户端,完成支付,同步回调等等,都一切顺利,就卡在了异步验证这个关头了。。。。。。。。
在网上搜索都是说 什么 支付宝公钥错,验证方法需要 checkV1 ,反正各种方法都试过了,公钥和私钥都是没有错的,用最新版的验签工具是可以验证的通过的,就是线上异步回调失败!!!
多次尝试无果后,决定咨询人工客服,咨询了好几个都没有任何结果,最后一个客服小哥叫我检测一下参数有没有变(我多次打印 POST 过来的数组都没有没有问题,此时我怀疑是sdk 代码 的问题 --- 嘿嘿,我竟然怀疑官方的sdk!!!)
接下来上代码
首先我们找到 alipay_wap/aop/AopClient.php 这个类文件
然后找到 getSignContent 方法 这个方法的作用是将 post 过来的参数转化给 正确的报文 后进行验签(没错,就是这个有问题!!)
这个方法并没有将post 参数转成 合格的报文,报文里会存在 " 这种 字符 ,然后就导致验签失败; 这个很容易处理,
只需............
加上这两行代码, 把 " 字符替换掉就可验签成功 (就是如此简单........ );
$stringToBeSigned = str_replace("""","\",\"", $stringToBeSigned);
$stringToBeSigned = str_replace(""","\"", $stringToBeSigned);
PS : 用此方法的前提是你的参数,支付宝公钥,等等都没有错误,校验的方法也是对的才行