2.還有壹個筆者曾遇到的坑,看到微信SDK上說token和ticket需要在服務器做緩存,有效期是7200秒,寫代碼的時候沒有仔細思索,導致把生成的簽名也給緩存了,用幾次就報invalid signature,後來仔細讀文檔之後,果斷改為每次打開頁面都重新生成簽名即可,token和ticket依然被緩存,但timestamp是變化的,因此每次簽名也是不同的。
3.參與簽名的字段包括有效的 jsapi_ticket(獲取方式詳見微信JSSDK文檔), noncestr (隨機字符串,由開發者隨機生成),timestamp (由開發者生成的當前時間戳), url(當前網頁的URL,不包含#及其後面部分。
4.特別註意:妳在利用參數生成簽名的時候,要對所有待簽名參數按照字段名的 ASCII 碼從小到大排序(字典序)後,使用 URL 鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串 string1。這裏需要註意的是所有參數名均為小寫字符。
5.確認config中nonceStr(js中駝峰標準大寫S), timestamp與用以簽名中的對應noncestr, timestamp壹致。
6.確認url是頁面完整的url(請在當前頁面alert(location.href.split('#')[0])確認),包括'http(s)://'部分,以及'?'後面的GET參數部分,但不包括'#'hash後面的部分。因為頁面壹旦分享,微信客戶端會在妳的鏈接末尾加入其它參數,如果不是動態獲取當前鏈接,將導致分享後的頁面簽名失敗。