微信JSSDK提示invalid signature

簡直是個神坑,被坑哭了,因此記錄一下!php

把微信token和ticket改用redis存,爲了不併發致使token次數被用完,加了鎖,爲了不之後redis擴展,改用了分佈式鎖,改完用100併發測試了下,一切正常,perfect。html

因而興匆匆的上線,訪問invalid signature ?前端

確認微信後臺各類配置,再上線,invalid signature ?ajax

按官方簽名算法確認一遍,仍是 invalid signatureredis

我已經開始不相信本身的代碼了,換成官方提供的代碼,尼瑪 invalid signature算法

後端打印參數,到官網生成signature,發現是一致的,excuse me?後端

打開微信調試工具,提示升級,升級後打開白板,重啓白板,MD,全世界都在與我做對???api

而後就已經不想了,看到微信就想吐了...緩存

而後搜了下,說是url要一致,我訪問的url就是後端的url,沒問題啊,可是仍是微信訪問後複製了下url,握草,握草,握草微信

你tm不之不覺的修改了老子的url,老子能不invalid signature嗎?

域名還沒下來,因此用的IP測試,結果發現IP訪問微信會自動跳轉並添加一些參數,簡直是日了狗了,域名就不存在這個問題

快速解決辦法
一、打印參數到官網地址確認簽名正確(不一致就按官網步驟找緣由)
二、測試時打印url確保徹底一致

官方說明:

invalid signature簽名錯誤。
建議按以下順序檢查:
(1)確認簽名算法正確,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。
(2)確認config中nonceStr(js中駝峯標準大寫S), timestamp與用以簽名中的對應noncestr, timestamp一致。
(3)確認url是頁面完整的url(請在當前頁面alert(location.href.split('#')[0])確認),包括'http(s)://'部分,以及'?'後面的GET參數部分,但不包括'#'hash後面的部分。
(4)確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。
(5)確保必定緩存access_token和jsapi_ticket。
(6)確保你獲取用來簽名的url是動態獲取的,動態頁面可參見實例代碼中php的實現方式。若是是html的靜態頁面在前端經過ajax將url傳到後臺簽名,前端須要用js獲取當前頁面除去'#'hash部分的連接(可用location.href.split('#')[0]獲取,並且須要encodeURIComponent),由於頁面一旦分享,微信客戶端會在你的連接末尾加入其它參數,若是不是動態獲取當前連接,將致使分享後的頁面簽名失敗。
相關文章
相關標籤/搜索