微信小程序開發偶發性獲取手機号失敗解決方案
發布時間: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傳給後台進行解密 } }) }
掃一掃,關注我們
48