微信公眾號簽名錯誤(invalid signature)的問題排查


之前寫好的代碼,好多項目一直在用沒啥問題,今天做新項目,在調用的時候,wx.config提示簽名錯誤(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),因為頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數,如果不是動態獲取當前鏈接,將導致分享后的頁面簽名失敗。

 

逐條檢查后,都排除了,於是就在網上搜搜,直到看見一段話“location.href.split('#')[0]”是不會騙人的。

忽然想到,后端做簽名時,url寫的是有網頁名稱的(如:http://www.abc.com/index.aspx),而調試訪問的時候,由於是打開的默認首頁,就隨手沒有加網頁名稱,直接用域名訪問(如:http://www.abc.com/)了,兩次url不一致,導致簽名驗證失敗。

在訪問時加上網頁名稱,驗證就通過了。

之前的項目之所以沒問題,是因為調用wx.config的都不是默認首頁,都跟的有網頁名稱,今天在默認首頁上調用,就忽略網頁名稱的問題,踩坑了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM