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