javascript - 微信公众平台, config:invalid signature一直爆这个错误,求教如何解决?
PHPz
PHPz 2017-04-11 13:13:33
0
46
11056


然后哦 用这个校验和输出的是一致的也就是说 签名应该没问题吧 但是为什么手机上会显示无效呢 那个环节又出错了

PHPz
PHPz

学习是最好的投资!

reply all (44)
迷茫

出现问题的原因是参与签名的URL地址不正确,需要动态获取当前页面完整的URL地址(包括?后面的参数,但不能包含#号),如若URL地址为:http://www.xxx.xxx/payment/wxpay/jspay?oid=xxxx&attr=xxxx#wechat,那么完整的URL地址应该是截取#号之前的部份。为什么会出现#号呢?因为你的URL在被分享到朋友圈等微信系统自动会添加一些参数。

    黄舟

    看我把这些坑都总结了一下:
    要命的invalid signature。其实腾讯的文档已经写了,只能怪我自己理解能力太差,掉了好几次坑。

    • 签名要用到的jsapi_ticket需要保存的,2小时有效期。如果在2小时内出现问题需要删除才能工作,一般是自身程序的问题,请检查。

    • nonceStr和noncestr的大小写,当心!

    • url一定要当心,如果是"http://x.com/jspay?oid=0&attr=1#wechat"的形式,那么应该保留的是"http://x.com/jspay?oid=0&attr=1"。

    • 据此,url在JavaScript中是location.href.split('#')[0]获取。

    • 据此,url在php中用$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]拼装,

    • 据说会有多余的80端口问题,但是记录者没有遇到过,总之请小心。

    • url在JavaScript中千万别忘记“encodeURIComponent”!否则后果很诡异,遇到过初始化的时候报invalid
      signature,但是API接口又能调用的情况。

      左手右手慢动作

      官方已经提供了微信 JS 接口签名校验工具(http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign),填入相应的参数就能出来相应的值,然后对比下,就能发现具体是那块错了。 我之前碰到一个因为域名后面没有/而导致失败的情况

        小葫芦

        请参考我的另一个回答:
        http://segmentfault.com/q/1010000002502269/a-1020000002549180

          刘奇

          简单的来说,signture一样的话,那就是url这里不对了,实际打开页面的url和签名的url对不上。

            小葫芦

            我也遇到这个问题了, 发起微信支付的时候提示 invalid signature , 本地程序生成的 签名 跟 官网通过的签名工具生成的签名 对比 也是一致的, 哪位朋友 也遇到了,并解决了,还望不吝赐教。

              阿神

              我的也一样,把我自己成生的与校验工具生成的对比,没任务差别:79e9778274e7ed0503666aeee4b9dfb350a56b54
              79e9778274e7ed0503666aeee4b9dfb350a56b54
              我现在也蛋疼了,一直提示config:invalid signature

                Peter_Zhu

                通过ajax把URL传到服务端,签名也是正确的,就是报config invalid signature,这个可以从哪里调试啊?