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;