最近做公眾號網頁開發,使用微信 頁面簽名時 中一直報錯,這才剛開始就被這隻攔路虎攔住了,報錯如下: 然而 和開發者工具中好得很,沒有任何問題: 既然提示 ,那就是簽名有問題咯,但是同樣的介面,為什麼Android沒問題?是真是假還是用官方的簽名校驗工具驗證下: 生成的簽名完全沒有問題,這就奇怪了,按 ...
最近做公眾號網頁開發,使用微信jssdk
頁面簽名時IOS
中一直報錯,這才剛開始就被這隻攔路虎攔住了,報錯如下:
然而Android
和開發者工具中好得很,沒有任何問題:
既然提示簽名非法
,那就是簽名有問題咯,但是同樣的介面,為什麼Android沒問題?是真是假還是用官方的簽名校驗工具驗證下:
生成的簽名完全沒有問題,這就奇怪了,按照網上說的url
改成如下方式也不行:
url = window.location.href.split('#')[0]
突然看到網上有人說是因為SPA
的原因,經過幾番測試,問題鎖定在了SPA
。先來解釋下為什麼會這樣,我們使用Vue Router
切換頁面時,底層使用的是pushState
技術,這是H5
的一個新特性,雖然錶面上看頁面的path
變了,內容也換了,但是頁面是沒有刷新的。
現在知道問題出在哪裡,再來實際確認一下。首先進入項目的首頁,地址是https://www.abc.com/weixin/quan?rr=234wfwf
,然後點擊進入我們要分享的頁面,這時候會提示invalid signature
,這時jssdk是配置失敗的,分享出去的就是原始的頁面鏈接,然而問題出現了:
分享後的鏈接仍然是首頁進入的鏈接,這是微信的BUG啊,原來在微信的網頁中不支持pushState
,這就導致我們在jssdk從配置時傳入的url
(window.location.href
得到)和微信識別到的不一樣,這時候在分享的頁面刷新一下,配置就會正常。
後面再看官方文檔時也提到了這一點:
然而我的Android沒這個問題,iOS反而出現了這個問題(IOS版本13.3.1,微信版本7.0.9,jssdk 1.6)
如何解決
- 在跳轉到要分享的頁面時,不用
pushState
,在Vue router
中就是不用push
方式跳轉,方式如下:
window.location.href = 要跳轉的鏈接
// _this.$router.push({
// …
// })
- 既然
SPA
在微信中只認第一個頁面的path
,那我們就在第一次進入頁面時記錄下path
,其他頁面用這個path
。我們在App.vue
或者main.js
中記錄下這個path
:
window.sessionStorage.setItem('firstEntryUrl', window.location.href)
然後在需要分享的頁面,使用這個path
:
let url = window.location.href.split('#')[0]
if (utils.isIOS() && window.sessionStorage.getItem('firstEntryUrl')) {
url = window.sessionStorage.getItem('firstEntryUrl').split('#')[0]
}
經測試,上述兩種方法都能完美解決。