config:invalid signature可以按以下方法排查
-
JS接口安全域名设置问题:应该只包含域名,比如https://i.cnblogs.com 的域名是i.cnblogs.com
-
wx.config配置参数相关的要求
- 时间戳(timestamp)值精确到秒,不是毫秒
- nonceStr字段名称的‘s‘是大写。
- appid 与获取 jsapi_ticket 使用的appid 必须相同
- 进行签名(加密)的URL
- 对于加密的URL,包括https://或http://和?后面包括的参数,不能包括#之后的内容。
比如:
加密的URL是:http://abc.com/a.html?adasd=1#localion
那么正确的加密URL应该是:http://abc.com/a.html?adasd=1 - 前端发送到后端进行sha1加密的url是当前js页面的URL,不是获取验证签名的接口URL
比如:
当前页面URL是 http://abc.com/a.html
获取appId、timestamp、nonceStr、signature的URL接口是 http://abc.com/aaa/getSignature.html
那么进行加密的URL应该是 http://abc.com/a.html - 后端获取用来加密的URL要动态获取。
- 对于加密的URL,包括https://或http://和?后面包括的参数,不能包括#之后的内容。
- 需要缓存access_token和jsapi_ticket,不然可能因为每次获取时刷新了不同的值,导致验证失败。
-
用户授权回调之后,页面路径会添加两个参数:code和state
比如:授权后跳转页面为:http://abc.com
则添加参数后会变成:http://abc.com?code=asdasd&state=STATE
如果直接使用location.href.split(‘#‘)[0]获取当前页面的URL,会把state当成一个查询的参数导致错误
正确的获取签名URL:encodeURIComponent(location.href.split(‘#‘)[0]) - 签名算法出现错误:
使用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具校验 - 服务器ip没有在白名单上
公众号后台->基本配置->设置IP白名单 - 超过了每日的access_token获取上限,token过期后签名失败
-
反向代理没有设置正确
nginx配置反向代理代码:proxy_set_header Host $http_host;