php - 微信支付获取prepay_id返回签名错误,官方demo中的签名方法MD5验证有问题
迷茫
迷茫 2017-04-10 15:31:16
0
5
620

引用官方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,网上查找是&not的编码问题,在传递的时候不影响,只是输出会有问题,请问这里到底会不会影响MD5的生成?如果影响要怎么改呢?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信(5)
阿神

问题已解决,我说一下主要遇到的情况吧:
1.获取prepay_id返回签名错误是因为我用的商户密匙不对,开始以为是腾讯返回的邮件中那个6位数的,正确的应该是要自己设置一个32位的支付密匙。这里的说的问题在页面上调试的时候显示&not确实会出问题,但是在后台里面没有影响,不用管它。
2.获取prepay_id后,发起支付一度出现system:access_denied,检查各项配置都没错,按照开发文档说的公众号配置的支付目录也没错,后来没辙了,就把所有目录都配到了支付目录中,一下子成功了!腾讯巨坑,文档上说只要配“发起支付请求的目录”,我是把相关支付代码用到的目录都配了才可以。
3.PHP版的DEMO中有几个小BUG,一个是有一处不要转换大小写,还有几个忘记在哪了,大家仔细看下代码吧。
再次表示,腾讯大坑,给的DMEO有BUG不说,文档写的又简略,很多要注意的问题都没写,也没说清楚,还望各路高手慎行,莫掉坑中!

いいねを押す +0
Peter_Zhu

那个问题不用管,是正常的前台显示 后台php会把&not 转成¬ 关于调用jsapi时可以在state后带入你想要传入的参数,近期会写一个微信商户调起H5支付的开发流程文章,欢迎关注我

いいねを押す +0
伊谢尔伦

我也遇到了同样的问题, 求解答啊

いいねを押す +0
小葫芦

$buff .= strtolower($k) . "=" . $v . "&";
这里没有问题 检测下你输出的代码

いいねを押す +0
阿神

获取prepay_id时出错,错误代码是:“签名错误”。

看到很多朋友遇到这个问题。多数情况下,大家是把KEY写错了。

这里的KEY,不是微信后台设置的EncodingAESKey。
需要登录到“微信支付的商户后台”,在“API安全”中,设置一个32位的KEY。

输入这个KEY,就ok了。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート