84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
出现问题的原因是参与签名的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
通过ajax把URL传到服务端,签名也是正确的,就是报config invalid signature,这个可以从哪里调试啊?