今天偶然的把微信jssdk的debug打開后,發現調試信息總是提示簽名錯誤,感情前兩天api的"偶爾"不生效,不是因為還沒執行代碼,而是因為簽名沒正確啊!,這就是個100%可以重現的錯誤
但只要這個SPA剛刷新過,或加載完后中途沒有跳轉,,簽名就會是正確的。
而當路由發生改變,我們對新"跳轉"的頁面重新簽名之后,卻出現了簽名錯誤,而我們的簽名明明是正確的,把各種參數拿去微信JS簽名校驗工具(http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign)去比對是一樣的!
后面重大發現。。。其實
微信拿來簽名的URL好像認這個SPA第一個加載的頁面的URL。。。window.location.href跳轉其實就相當又加載了一次SPA,曾以為路由跳轉了,就應該拿新的url去重新簽名,卻恰恰因為這點,把簽名校驗給搞出錯了。。
所以解決方案就是:
SPA加載之后router跳轉的每個頁面都用入口URL簽名就行了,用ui-router進行的跳轉,似乎只是改了地址。。而這個地址的修改。。微信的簽名似乎不認。。他就認第一個加載的頁面的URL。
只在入口簽名一次在iOS上是可以的,但在安卓有些機型似乎還是會簽名不上,所以保險起見,還是router跳轉的每個頁面都簽名一次比較好。