欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

微信支付获取prepay_id返回签名错误,官方demo中的签名方法MD5验证有问题

程序员文章站 2024-01-16 19:37:49
...
引用官方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的生成?如果影响要怎么改呢?

回复内容:

引用官方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的生成?如果影响要怎么改呢?

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

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

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

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

相关标签: php 微信支付