今天对接支付接口,参数拼接完了,开始调用的时候,一直报错,签名错误。
但是我用第三方给的签名测试mode测试签名,返回的是true。
这就非常他娘的奇怪。
经过一个个参数对比,我发现,notify_url 参数有问题。
需要Url编码的原内容是 “¬ify_url=xxxx” 经过url编码以后再解码回来 “¬”的部分就变成了“¬”
变成了这样:“name=xxxx¬ify_url=xxxx&randomstr”
怪不得我调用的时候一直说签名错误,字段名字都给变了,不报错还奇了怪了。
然后百度查资料
有个老哥说:”把原文里面待url编码的&符号先替换成&,进行编码以后再转码回来就正常了。“
那这就简单了,用替换函数
$url = str_replace("&","&",'https:www.xxx.com?'.$str);