日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

微信小程序:獲取用戶手機號碼的過程

作者:半夏ing 更新時間: 2022-04-04 編程語言

這幾天是疫情期間,老板為了配合我們公司的線上產品,讓我們技術人員開發了一個簡單的小程序,在開發過程中,就提到了獲取用戶手機號碼的需求,然后我查閱了微信小程序開發文檔,由此,我想記錄一下,方便我以后查閱
首先,思路要明確,要想獲取手機號碼,那我們就得微信授權,微信授權的話,那我們就得獲取微信的登錄,所以第一步,調用微信登錄的api:

wx.login({
  success (res) {
    if (res.code) {
      //發起網絡請求
      wx.request({
        url: 'https://test.com/onLogin',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登錄失敗!' + res.errMsg)
    }
  }
})

然后,我們將獲取到的code,發送給后臺,后臺會返回一個oppenId給前端,然后我們開始調用獲取手機號碼的api
在這里插入圖片描述
官方文檔說的很詳細

 getPhoneNumber (e) {
    console.log(e.detail.iv)
    console.log(e.detail.encryptedData)
    if(e.detail.iv)){//表示授權成功,自己可以測試一下,成功后就可以發送請求給后臺,獲取解密 后的手機號碼
    }
  }

此處還有一個問題,就是授權成功的前提,需要登錄,一開始,我是在獲取手機號碼的地方,先登錄,登錄成功后,我在手機號碼進行授權的,但是這樣會存在問題, 當時報了英文錯誤

The given payload is invalid

其實這個錯誤,官方文檔給了注意,當時自己沒有留意這些在重點突出一下

在回調中調用 wx.login 登錄,可能會刷新登錄態。此時服務器使用 code 換取的 sessionKey 不是加密時使用的 sessionKey,導致解密失敗。建議開發者提前進行 login;或者在回調中先使用 checkSession 進行登錄態檢查,避免 login 刷新登錄態。

所以最好將登錄放在周期函數onload()里面,然后就不會出現這個問題了,為了避免重復登錄,我們可以將登錄寫在checkSesson里面

         wx.checkSession({
            success () {
                     //session_key 未過期,并且在本生命周期一直有效
                 },
            fail () {
                     // session_key 已經失效,需要重新執行登錄流程
                    wx.login({
                        success (res) {
                            if (res.code) {
                            //發起網絡請求-獲取openId等參數,存儲起來
                            wx.request({
                                url: 'https://hdxcx.cdamai.com/wechat/login',
                                method: 'POST',
                                data: {
                                        code: res.code,
                                        scene:decodeURIComponent(options.scene)
                                    },
                                header: {
                                    'content-type':'application/x-www-form-urlencoded',
                                    'Accept': 'application/json'
                                },
                                success (res) {
                                        let code = res.data.code;
                                        if(code == "0"){
                                                wx.setStorageSync('openId',res.data.data.openid);
                                        }else{
                                            wx.showToast({
                                                title:'登錄失敗',
                                                icon: 'none',
                                                duration: 2000
                                                });
                                        }
                                    }
                            },
                            )
                            } else {
                                    console.log('登錄失敗!' + res.errMsg)
                            }
                        }
                        })
            }
            })

別的好像沒什么可記錄的了,后期遇到問題,我會慢慢補充的

原文鏈接:https://blog.csdn.net/Fiona_lms/article/details/104423452

欄目分類
最近更新