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

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

概要

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

但(dàn)是(shì)在有些時候會遇到小程序解密失敗的問題,這多數是(shì)因爲前端這邊登錄流程出的問題

會出錯的流程:前端多數是(shì)把open-data的獲取加密信息按鈕做成登錄按鈕,然後點擊的時候用wx.login獲取code,成功後将加密信息和code傳到後端直接調用解密手機号的接口,這樣session_key可能沒來得及刷新,從而導緻解密失敗,但(dàn)是(shì)第二次解密一定會成功的現(xiàn)象


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


原因分析

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

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

解決案例

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

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 未過期,并且在本生命周期一直有效(這裏面可以不寫代碼)
    },
    fail() {
      // session_key 已經失效,需要重新執行登錄流程并更新code
      wx.login({
        success: res => {
          code = res.code
          that.setData({
            code: code
          })
        }
      })
    },
    complete() {
      //将code,encryptedData,iv傳給後台進行解密
    }
  })
}


微信

掃一掃,關注我們

感興趣嗎(ma)?

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

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

搜索千萬次不如咨詢1次

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

立即咨詢 16605125102