微信小程序開發偶發性獲取手機号失敗解決方案

發布時(shí)間:2022-08-12 09:41:08 作者:King 來(lái)源:本站 浏覽量(2254) 點贊(72)
摘要:概要在微信小程序開發中,獲取用(yòng)戶信息,獲取手機号基本是必須用(yòng)到的(de)功能但是在有些時(shí)候會遇到小程序解密失敗的(de)問題,這(zhè)多(duō)數是因爲前端這(zhè)邊登錄流程出的(de)問題會出錯的(de)流程:前端多(duō)數是把open-data的(de)獲取加密信息按鈕做(zuò)成登錄按鈕,然後點擊的(de)時(shí)候用(yòng)wx.login獲取code,成功後将加密信息和(hé)code傳到後端直接調用(yòng)解密手機号的(de)接口

概要

在微信小程序開發中,獲取用(yòng)戶信息,獲取手機号基本是必須用(yòng)到的(de)功能

但是在有些時(shí)候會遇到小程序解密失敗的(de)問題,這(zhè)多(duō)數是因爲前端這(zhè)邊登錄流程出的(de)問題

會出錯的(de)流程:前端多(duō)數是把open-data的(de)獲取加密信息按鈕做(zuò)成登錄按鈕,然後點擊的(de)時(shí)候用(yòng)wx.login獲取code,成功後将加密信息和(hé)code傳到後端直接調用(yòng)解密手機号的(de)接口,這(zhè)樣session_key可(kě)能沒來(lái)得(de)及刷新,從而導緻解密失敗,但是第二次解密一定會成功的(de)現象


微信小程序開發偶發性獲取手機号失敗解決方案


原因分(fēn)析

出錯的(de)原因:在回調中調用(yòng) wx.login 登錄,可(kě)能會刷新登錄态。此時(shí)服務器使用(yòng) code 換取的(de) sessionKey 不是加密時(shí)使用(yòng)的(de) sessionKey,導緻解密失敗。

解決方案:建議(yì)開發者提前進行 login;或者在回調中先使用(yòng) checkSession 進行登錄态檢查,避免 login 刷新登錄态。

解決案例

所有解決辦法是提前調wx.login,在獲取手機号的(de)回調方法中取檢驗登錄狀态,代碼如下(xià):

onLoad: function (options) {
  //先登錄提前保存code
  wx.login({
    success: res => {
      that.setData({
        code: res.code
      })
    }
  })
},
getPhoneNumber(e) {
  //觸發獲取手機号加密信息
  let that = this,
  encryptedData = e.detail.encryptedData,
  iv = e.detail.iv;
  wx.checkSession({
    success() {
      //session_key 未過期,并且在本生命周期一直有效(這(zhè)裏面可(kě)以不寫代碼)
    },
    fail() {
      // session_key 已經失效,需要重新執行登錄流程并更新code
      wx.login({
        success: res => {
          code = res.code
          that.setData({
            code: code
          })
        }
      })
    },
    complete() {
      //将code,encryptedData,iv傳給後台進行解密
    }
  })
}


微信

掃一掃,關注我們

感興趣嗎?

歡迎聯系我們,我們願意爲您解答(dá)任何有關網站疑難問題!

【如有開發需求】那就聯系我們吧

搜索千萬次不如咨詢1次

承接:網站建設,手機網站,響應式網站,小程序開發,原生android開發等業務

立即咨詢 16605125102