php 支付宝wap端手机网站支付异步回调失败

最近公司开发一个落地页,需要用到支付宝的wap 支付,本该一切顺利直接下载 蚂蚁平台的 sdk 配上 相应的参数就可以接通

从配置公钥,调起支付宝客户端,完成支付,同步回调等等,都一切顺利,就卡在了异步验证这个关头了。。。。。。。。

在网上搜索都是说 什么 支付宝公钥错,验证方法需要 checkV1  ,反正各种方法都试过了,公钥和私钥都是没有错的,用最新版的验签工具是可以验证的通过的,就是线上异步回调失败!!!

 

多次尝试无果后,决定咨询人工客服,咨询了好几个都没有任何结果,最后一个客服小哥叫我检测一下参数有没有变(我多次打印 POST 过来的数组都没有没有问题,此时我怀疑是sdk 代码  的问题 --- 嘿嘿,我竟然怀疑官方的sdk!!!)

接下来上代码

首先我们找到  alipay_wap/aop/AopClient.php 这个类文件

php 支付宝wap端手机网站支付异步回调失败

 然后找到   getSignContent 方法  这个方法的作用是将 post 过来的参数转化给 正确的报文 后进行验签(没错,就是这个有问题!!)

这个方法并没有将post 参数转成 合格的报文,报文里会存在 " 这种 字符 ,然后就导致验签失败; 这个很容易处理,

只需............

加上这两行代码, 把 " 字符替换掉就可验签成功 (就是如此简单........ );        

        $stringToBeSigned =  str_replace("""","\",\"", $stringToBeSigned);
        $stringToBeSigned =  str_replace(""","\"", $stringToBeSigned);

PS : 用此方法的前提是你的参数,支付宝公钥,等等都没有错误,校验的方法也是对的才行

 

php 支付宝wap端手机网站支付异步回调失败