按照微信公眾平台的開發文檔,簽名錯誤排查方法如下:
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),因為頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數,如果不是動態獲取當前鏈接,將導致分享后的頁面簽名失敗。
通過微信簽名工具驗證,完全符合。前端config 的nonceStr 也無寫法錯誤,非常納悶。
如果后台返回的config 信息 與微信簽名工具校驗一致的話,那很有可能是前端訪問的url和后台生成簽名的url不一致導致,
通過前后台打印分析,url 地址完全一致。我做的是前端傳遞url給后台,后台接收到的url參與生成簽名。這時候注意到,前端傳遞的url地址是經過 encodeURIComponent的,所以后台接收到需要 decode 一下,比如php 可以用urldecode 函數,再一嘗試,成功。。。。。。。
總結如果出現 invalid signature,首先可以確定的是你的簽名算法有問題。
簽名錯誤的排查可以這樣來:
1:確保基本的appid 正確,獲取的access_token和jsapi_ticket 正確
2:校驗簽名,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。
3:如果簽名一致,那問題基本出在瀏覽器訪問的url和參與生成簽名的url不一致。
最后附上jssdk的步驟
1:在微信公眾號后台配置js 安全域名,即需要引入jssdk的頁面域名。 需要在域名根目錄下放置微信的檢測文件。
2:配置出ip白名單
3:后台開發人員生成簽名傳遞給前台
4:前端頁面引入script方式 jssdk文件
5:通過ajax獲取config 配置,完成config 配置后即可使用jssdk的各項功能了