微信公眾平臺(tái), config:invalid signature一直爆這個(gè)錯(cuò)誤的解決辦法
如果是invalid signature簽名錯(cuò)誤。建議按如下順序檢查:
1.確認(rèn)簽名算法正確,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁(yè)面工具進(jìn)行校驗(yàn)。
2.確認(rèn)config中nonceStr(js中駝峰標(biāo)準(zhǔn)大寫(xiě)S), timestamp與用以簽名中的對(duì)應(yīng)noncestr, timestamp一致。
3.確認(rèn)url是頁(yè)面完整的url(請(qǐng)?jiān)诋?dāng)前頁(yè)面alert(location.href.split('#')[0])確認(rèn)),包括'http(s)://'部分,以及'?'后面的GET參數(shù)部分,但不包括'#'hash后面的部分。
4.確認(rèn) config 中的 appid 與用來(lái)獲取 jsapi_ticket 的 appid 一致。
5.確保一定緩存access_token和jsapi_ticket。
這個(gè)是重點(diǎn):
確保你獲取用來(lái)簽名的url是動(dòng)態(tài)獲取的,動(dòng)態(tài)頁(yè)面可參見(jiàn)實(shí)例代碼中php的實(shí)現(xiàn)方式。如果是html的靜態(tài)頁(yè)面在前端通過(guò)ajax將url傳到后臺(tái)簽名,前端需要用js獲取當(dāng)前頁(yè)面除去'#'hash部分的鏈接(可用location.href.split('#')[0]獲取,而且需要encodeURIComponent),因?yàn)轫?yè)面一旦分享,微信客戶端會(huì)在你的鏈接末尾加入其它參數(shù),如果不是動(dòng)態(tài)獲取當(dāng)前鏈接,將導(dǎo)致分享后的頁(yè)面簽名失敗。
教如何驗(yàn)證是否正確方法:
url動(dòng)態(tài)獲取的方法是:
$protocol = (!empty($_SERVER[HTTPS]) && $_SERVER[HTTPS] !== off || $_SERVER[SERVER_PORT] == 443) ? "https://" : "http://";
$url = $protocol.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];
復(fù)制代碼
步驟:
首先你在頁(yè)面alert(location.href.split('#')[0]);
然后你再打印出動(dòng)態(tài)獲取的url是否和你alert的地址是否一樣。一定要一模一樣,包括大小寫(xiě)。
如果發(fā)現(xiàn)不一樣,那就按照自己的需求改。反正要一樣。驗(yàn)證簽名一定可以通過(guò)的。
如果還有什么不明白的可以評(píng)論,我會(huì)一一回復(fù)。