這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 最近在做安卓內嵌入H5活動頁拉新活動,遇到的棘手問題記錄下, 一是為了日後遇到同樣問題好回顧,二是希望能幫到有同樣問題的兄弟。 廢話不多說,先從最棘手的問題直接開始: 一、Invalid Signature 1.因為項目內是Vue中的ha ...
這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助
最近在做安卓內嵌入H5活動頁拉新活動,遇到的棘手問題記錄下,
一是為了日後遇到同樣問題好回顧,二是希望能幫到有同樣問題的兄弟。
廢話不多說,先從最棘手的問題直接開始:
一、Invalid Signature
1.因為項目內是Vue中的hash模式,所以遇到這個問題時,一直懷疑hash模式是不是不可以。——其實可以,hash和history都可以;記得 encodeURIComponent(location.href.split('#')[0])
2.按照官方文檔的步驟去排查錯誤:
(1)確認簽名演算法正確,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。——這個問題主要在後臺那裡,要點:1.公眾號後臺配置ip白名單以及JS安全功能變數名稱。重點:ip白名單記得要配後臺線上伺服器的ip,否則線上後臺是拿不到asscee_token的,access_token為null時也可以參與signature的計算,很坑!!!建議讓後臺把access_token和jsapi_ticket返回或者讓後臺看看到底有沒有返回值;2.記得拿公眾號的APPID去計算,一定要後臺親眼去比對,APPID對不對!(2)確認config中nonceStr(js中駝峰標準大寫S), timestamp與用以簽名中的對應noncestr, timestamp一致。——這一步沒啥好說的,自己好好檢查
(3)確認url是頁面完整的url(請在當前頁面alert(location.href.split('#')[0])確認),包括'http(s)://'部分,以及'?'後面的GET參數部分,但不包括'#'hash後面的部分。——記得 encodeURIComponent(location.href.split('#')[0])
(4)確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。
(5)確保一定緩存access_token和jsapi_ticket。
(6)確保你獲取用來簽名的url是動態獲取的,動態頁面可參見實例代碼中php的實現方式。如果是html的靜態頁面在前端通過ajax將url傳到後臺簽名,前端需要用js獲取當前頁面除去'#'hash部分的鏈接(可用location.href.split('#')[0]獲取,而且需要encodeURIComponent),因為頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數,如果不是動態獲取當前鏈接,將導致分享後的頁面簽名失敗。**——記得前端把當前頁面路徑(encodeURIComponent(location.href.split('#')[0]))ajax 傳給後臺 **
二、the permission value is offline verifying
(1)確認config正確通過。——記得在頁面掛在完畢去註入JSSDK,如果有路由攔截跳轉的,要跳轉完畢後再去註入,要保證註入的頁面url和調用分享介面的url是一模一樣(encodeURIComponent(location.href.split('#')[0]))
(2)如果是在頁面載入好時就調用了JSAPI,則必須寫在wx.ready的回調中。——wx.ready的回調去寫分享邏輯
(3)確認config的jsApiList參數包含了這個JSAPI。
三、permission denied
(1)先去微信公眾平臺 看看公眾號沒有許可權使用這個JSAPI
(2)可以調用jweixin.checkJsApi,記得把debug打開,微信開發者工具和真機報的錯誤很大可能會不一樣。引用的最新的jssdk 1.6;也用了最新的分享給好友的方法;真機 updateAppMessageShareData: true; updateTimelineShareData: true; config: ok,就是分享不了,我真是吐了,
如果遇到同樣的情況,記得jsApiList加入 onMenuShareAppMessage,沒錯就是老版本,那個即將廢棄的分享api
最後放上封裝的類:
1.初始化vue時,let wx = new Wx();if(wx.isWeiXin){ Vue.prototype.wx = wx; }
2.調用時,this.wx.share(title, desc, link, imgUrl, successCallback)
3.記得改一下_initJssdk方法中請求介面config配置的api