微信jssdk踩坑之簽名錯誤invalid signature
最近做公眾號網(wǎng)頁開發(fā),使用微信 jssdk 頁面簽名時 IOS 中一直報錯,這才剛開始就被這只攔路虎攔住了,報錯如下:

然而 Android 和開發(fā)者工具中好得很,沒有任何問題:

既然提示 簽名非法 ,那就是簽名有問題咯,但是同樣的接口,為什么Android沒問題?是真是假還是用官方的簽名校驗工具驗證下:


生成的簽名完全沒有問題,這就奇怪了,按照網(wǎng)上說的 url 改成如下方式也不行:
url = window.location.href.split('#')[0]
突然看到網(wǎng)上有人說是因為 SPA 的原因,經(jīng)過幾番測試,問題鎖定在了 SPA 。先來解釋下為什么會這樣,我們使用 Vue Router 切換頁面時,底層使用的是 pushState 技術,這是 H5 的一個新特性,雖然表面上看頁面的 path 變了,內容也換了,但是頁面是沒有刷新的。
現(xiàn)在知道問題出在哪里,再來實際確認一下。首先進入項目的首頁,地址是 https://www.abc.com/weixin/quan?rr=234wfwf ,然后點擊進入我們要分享的頁面,這時候會提示 invalid signature ,這時jssdk是配置失敗的,分享出去的就是原始的頁面鏈接,然而問題出現(xiàn)了:

分享后的鏈接仍然是首頁進入的鏈接,這是微信的BUG啊,原來在微信的網(wǎng)頁中不支持 pushState ,這就導致我們在jssdk從配置時傳入的 url ( window.location.href 得到)和微信識別到的不一樣,這時候在分享的頁面刷新一下,配置就會正常。
后面再看官方文檔時也提到了這一點:

然而我的Android沒這個問題,iOS反而出現(xiàn)了這個問題(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]
}
經(jīng)測試,上述兩種方法都能完美解決。
到此這篇關于微信jssdk踩坑之簽名錯誤invalid signature的文章就介紹到這了,更多相關微信jssdk 簽名錯誤 內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
JavaScript?顯示一個倒計時廣告牌的實現(xiàn)示例
本文主要介紹了JavaScript?顯示一個倒計時廣告牌的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-04-04
解決layui的使用以及針對select、radio等表單組件不顯示的問題
今天小編就為大家分享一篇解決layui的使用以及針對select、radio等表單組件不顯示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-09-09
基于javascript的COOkie的操作實現(xiàn)只能點一次
這篇文章主要介紹了基于javascript的COOkie的操作實現(xiàn)只能點一次,需要的朋友可以參考下2014-12-12

