微信支付获取prepay_id返回签名错误,官方demo中的签名方法MD5验证有问题
引用官方V3微信支付PHP版的demo做的改动,在获取prepay_id发现总是返回签名错误,经与腾讯官方的“微信公众平台支付接口调试工具”对比发现MD5不一样,找到demo中代码有问题部分:
function formatBizQueryParaMap($paraMap, $urlencode)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v)
{
if($urlencode)
{
$v = urlencode($v);
}
//$buff .= strtolower($k) . "=" . $v . "&";
$buff .= $k . "=" . $v . "&";
}
$reqPar;
if (strlen($buff) > 0)
{
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
}
$buff .= $k . "=" . $v . "&";在用&进行参数的字符串拼接的时候 &notify_url变成了-ify_url,网上查找是¬的编码问题,在传递的时候不影响,只是输出会有问题,请问这里到底会不会影响MD5的生成?如果影响要怎么改呢?
wsxnd
10 years, 5 months ago
Answers
问题已解决,我说一下主要遇到的情况吧:
1.获取prepay_id返回签名错误是因为我用的商户密匙不对,开始以为是腾讯返回的邮件中那个6位数的,正确的应该是要自己设置一个32位的支付密匙。这里的说的问题在页面上调试的时候显示¬确实会出问题,但是在后台里面没有影响,不用管它。
2.获取prepay_id后,发起支付一度出现system:access_denied,检查各项配置都没错,按照开发文档说的公众号配置的支付目录也没错,后来没辙了,就把所有目录都配到了支付目录中,一下子成功了!腾讯巨坑,文档上说只要配“发起支付请求的目录”,我是把相关支付代码用到的目录都配了才可以。
3.PHP版的DEMO中有几个小BUG,一个是有一处不要转换大小写,还有几个忘记在哪了,大家仔细看下代码吧。
再次表示,腾讯大坑,给的DMEO有BUG不说,文档写的又简略,很多要注意的问题都没写,也没说清楚,还望各路高手慎行,莫掉坑中!
遗忘的雷扎德
answered 10 years, 5 months ago