最近作了一個項目,用的react+react-router4 ,要接入微信js-sdk,在實現的過程當中掉坑了!特此記錄一下。php
按照微信官方給的api 等文檔接入以後,發現由於項目是spa ,因此存在安卓pushState 的bug。因此把對微信的config 放到了asyncComponent 組件的componentDidMount 中html
(asyncComponent 是用於作代碼切割按需加載的,react-router4不支持以前老的用require.ensure()來作按需加載,因此用了es6 的import() 來作這個,所以寫了一箇中間組件,專門用於不一樣路由下的頁面組件的加載,這樣正好方便解決微信接入安卓的pushState 這個bug)前端
OK,代碼寫好了,放到手機上面測試,發現,神了奇了,安卓是ok了,在微信調試工具上也ok,可是在ios 上就是不行。ios 上面點開分享的連接,始終會出現 invalid signature 錯誤。查看了不少資料,關於怎麼排查invalid signature 的緣由(以下):react
更多關於微信的錯誤排查可見:https://blog.csdn.net/biyongyao/article/details/77792767ios
一條一條排查以後發現,沒問題啊,經過抓包工具抓到傳給後端的url 也是當前路由下這個頁面的url 啊?一臉懵逼了。es6
各方debug 各方找問題以後,終於發現,原來 用iphone微信,若是是單頁面應用,前端作跳轉邏輯(就是在分享出去的那個頁面,再作了一次判斷跳轉),那麼這個時候,『複製連接』以及『瀏覽器中打開』都只會獲取 最開始的url地址。ajax
因而,我猜想,可能微信在進行signature 校驗的時候,拿的是我跳轉以前的url 來作校驗,才致使了最後的 invalid signature。因而,我把分享出去的頁面的跳轉邏輯去了。!!!成功了!!!!(心裏一萬隻XXX奔騰而過)至此,終於從ios 點擊分享連接 出現算法
invalid signature 的坑中爬了出來。後端
總結:問題的關鍵就出在了我在分享出去的頁面上作了跳轉,致使ios 上面的signature 校驗失效,不過過程當中,多方改動代碼,也出現過別的錯誤。可是總之是解決了,該踩的坑仍是要踩的!!api