以前寫好的代碼,好多項目一直在用沒啥問題,今天作新項目,在調用的時候,wx.config提示簽名錯誤(invalid signature),這搞得至關鬱悶,沒辦法,只能從新一點一點調試。php
按照官方的說法存在如下幾種可能:html
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不一致,致使簽名驗證失敗。ajax
在訪問時加上網頁名稱,驗證就經過了。算法
以前的項目之因此沒問題,是由於調用wx.config的都不是默認首頁,都跟的有網頁名稱,今天在默認首頁上調用,就忽略網頁名稱的問題,踩坑了。後端