国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 熱點 > 微信 > 正文

微信 jssdk 簽名錯誤invalid signature的解決方法

2024-07-22 01:19:13
字體:
來源:轉載
供稿:網友

幾乎每一個開發用于微信公眾號頁面的工程師都遇到過微信jssdk報的各種錯誤,通常是permission denied,類似這樣:

通常他們會建議你把debug選項開開,比如這樣:

  wechat.config({   debug: true,   appId: appId,   timestamp: timestamp,   nonceStr: nonceStr,   signature: signature,   jsApiList: ['scanQRCode'],  });

結果你又遇到了invalid signature。類似這樣:

簽名不對,這是什么意思?可是這簽名是后端給過來的,我怎么知道它為什么不對?后端用的是標準算法,不可能不對啊。

查網上各種教程,或者微信官網,他們總是不厭其煩地告訴你,讓你去檢查簽名算法,然而根本沒有用!

90%的這種情況下,其實只是一個原因:你用于計算簽名的URL地址不對,跟算法沒有任何關系,完全不必浪費時間去看什么簽名算法。

微信要求:如果我們需要在頁面中調用微信的某個方法,則必須用這個頁面的URL地址獲取簽名。聽上去似乎很好理解,但是實際上URL地址包含的部分很多,有問號,有#號,你所要做的是取出#前面的部分。比如說你的URL地址是這樣:https://www.abc.com/abc.html?abc=def#xyz,那么你用于計算簽名的URL地址不可以是https://www.abc.com/abc.html,也不能是https://www.abc.com/abc.html?abc=def#xyz,而必須只能是https://www.abc.com/abc.html?abc=def

如何獲取當前頁面的URL地址呢?這個很簡單:

let wechaturl = window.location.href.split('#')[0];

然而你以為事情就這樣結束了?太天真。你的頁面還是無法正常使用微信函數的。

因為:微信內嵌瀏覽器在iOS和安卓下的表現不一樣。

在安卓下,你確實用上面的方法是可以調用了。但是在iOS下,簽名依然失敗!因為在iOS下,微信需要你傳遞的是入口URL,而不是當前頁面的URL

比如說,你在微信公眾號的某個菜單鏈接進入了A頁面,然后從A頁面的某個鏈接跳轉到B頁面,然后你在B頁面獲取簽名,如果是在安卓下,你應該用B頁面的URL地址來獲取,但是在iOS下,你還必須用A頁面的URL地址來獲取,否則就還是簽名失敗!

知道了原因,就有很多種解決辦法。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沭阳县| 苗栗市| 湖州市| 白山市| 博兴县| 探索| 南开区| 阿拉善左旗| 沧源| 油尖旺区| 平罗县| 三穗县| 仁布县| 广德县| 盐山县| 志丹县| 长丰县| 磴口县| 淮北市| 久治县| 莱芜市| 韩城市| 观塘区| 邓州市| 营山县| 尖扎县| 大港区| 从江县| 黔江区| 盱眙县| 桃园市| 嘉禾县| 灵璧县| 抚宁县| 昭通市| 安岳县| 景德镇市| 澄江县| 黔南| 图木舒克市| 廉江市|