亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2019年01月14日 15:30:59   作者:張京  
這篇文章主要介紹了微信 jssdk 簽名錯誤invalid signature的解決方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

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

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

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

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

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];

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

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

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

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

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

首先,我們可以在入口的A頁面里增加這樣的判斷:

if (navigator.userAgent.indexOf('iPhone') !== -1) {
  window.wechaturl = window.location + '';
}

然后,在B頁面需要調用簽名的地方,再增加這樣的判斷:

let wechaturl = window.location.href.split('#')[0];
if (window.wechaturl !== undefined) {
 wechaturl = window.wechaturl;
}

這樣我們就有效地區(qū)分開了iOS和安卓。但問題是在iOS下,如果我的另外一個菜單入口是B頁面,我從B頁面跳轉到A頁面,這時候我的入口鏈接被強制變成了A頁面,依然會產(chǎn)生簽名失敗的錯誤。

所以我們還需要在微信公眾號的每一個入口菜單鏈接里加一個特殊的參數(shù),例如wechat=1,變成這樣:https://www.abc.com/abc.html?abc=def&wechat=1

然后我們再增加一層判斷,變成這樣:

if (navigator.userAgent.indexOf('iPhone') !== -1) {
 if (this.$route.query.wechat !== undefined && this.$route.query.wechat === '1') {
  window.wechaturl = window.location + '';
 }
}

這里我用了vue的寫法,但原理是一樣的。只有我檢測到了wechat這個參數(shù),我才認為當前頁面是入口頁面,如果沒有檢測到,則不必強行設置為入口頁面。

這樣似乎就解決了微信簽名失敗的問題。

但是,我們又遇到了另外一種情況:在微信小程序里用web-view內嵌的網(wǎng)頁,在安卓下也報permission deniedinvalid signature錯誤。不過有了上面的經(jīng)驗,我們診斷錯誤根源還是URL入口地址的問題。果然,在安卓下用入口地址獲取簽名成功,而用當前地址獲取簽名失敗,為此,我們在入口頁面里再加一個判斷:

if (navigator.userAgent.indexOf('miniProgram') !== -1) {
 window.wechaturl = window.location + '';
}

至此,各種簽名錯誤的問題才算是全部解決。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • JS中call和apply函數(shù)用法實例分析

    JS中call和apply函數(shù)用法實例分析

    這篇文章主要介紹了JS中call和apply函數(shù)用法,結合實例形式較為詳細的分析了call和apply函數(shù)繼承功能的使用方法、區(qū)別及操作注意事項,需要的朋友可以參考下
    2018-06-06
  • 詳解一個小實例理解js原型和繼承

    詳解一個小實例理解js原型和繼承

    這篇文章主要介紹了js原型和繼承,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • Bootstrap精簡教程

    Bootstrap精簡教程

    Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的,它簡潔靈活,使得 Web開發(fā)更加快捷。本文給大家分享Bootstrap精簡教程,對Bootstrap精簡教程感興趣的朋友一起學習
    2015-11-11
  • JavaScript  event對象整理及詳細介紹

    JavaScript event對象整理及詳細介紹

    這篇文章主要介紹了JavaScript event對象整理及詳細介紹的相關資料,需要的朋友可以參考下
    2016-10-10
  • Ionic3 UI組件之a(chǎn)utocomplete詳解

    Ionic3 UI組件之a(chǎn)utocomplete詳解

    這篇文章主要為大家詳細介紹了Ionic3 UI組件之a(chǎn)utocomplete的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • JavaScript跨域調用基于JSON的RESTful API

    JavaScript跨域調用基于JSON的RESTful API

    這篇文章主要介紹了JavaScript跨域調用基于JSON的RESTful API的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • JS+CSS實現(xiàn)可拖拽的漂亮圓角特效彈出層完整實例

    JS+CSS實現(xiàn)可拖拽的漂亮圓角特效彈出層完整實例

    這篇文章主要介紹了JS+CSS實現(xiàn)可拖拽的漂亮圓角特效彈出層,以完整實例形式分析了彈出層特效及圓角矩形的實現(xiàn)技巧,需要的朋友可以參考下
    2015-02-02
  • 關于火狐(firefox)及ie下event獲取的兩種方法

    關于火狐(firefox)及ie下event獲取的兩種方法

    經(jīng)常有同事問我在火狐瀏覽器怎么獲取event的方法,大多是想獲取event.keyCode的功能,接下來為您介紹兩種實現(xiàn)方法,需要了解的朋友可以參考下
    2012-12-12
  • Java 正則表達式學習總結和一些小例子

    Java 正則表達式學習總結和一些小例子

    字符串處理是許多程序中非常重要的一部分,它們可以用于文本顯示,數(shù)據(jù)表示,查找鍵和很多目的.在Unix下,用戶可以使用正則表達式的強健功能實現(xiàn)這些 目的
    2012-09-09
  • javascript iframe內的函數(shù)調用實現(xiàn)方法

    javascript iframe內的函數(shù)調用實現(xiàn)方法

    用下面的方法可以調用iframe中的函數(shù),實現(xiàn)一些比較特殊的效果,不過能跨域的。
    2009-07-07

最新評論