微信小程序如何獲取用戶手機號

1、原理步驟

  • 第一步:調用微信小程序login接口,獲得一個code值
  • 第二步:拿到code值,將其發送給服務端。
  • 獲取openid(用戶惟一標識)和sessionkey(會話密鑰)。
  • 第三步:利用獲得的sessionKey調用getPhoneNumber接口
  • 經過參數【encryptedData】 、【iv】 、【sessionKey】 請求後臺解密獲取用戶手機號

2、getPhoneNumber返回參數說明

  • encryptedData:包括敏感數據在內的完整用戶信息的加密數據
    • encryptedData 解密後爲如下 json 結構
{
    "phoneNumber": "13580006666",  //用戶綁定的手機號(國外手機號會有區號)
    "purePhoneNumber": "13580006666", //沒有區號的手機號
    "countryCode": "86",//區號
    "watermark":
    {
        "appid":"APPID",
        "timestamp":TIMESTAMP
    }
}
複製代碼
  • iv:加密算法的初始向量

3、實踐代碼

<button 
    open-type="getPhoneNumber" 
    bindgetphonenumber="getPhoneNumber"
> 
</button> 
複製代碼
Page({

  /**
   * 頁面的初始數據
   */
  data: {
    sessionkey:"",
  },

  /**
   * 生命週期函數--監聽頁面加載
   */
  onLoad: function (options) {
    wx.login({
      success: res => {
        var that = this
        // 獲取session接口
        wx.request({
          url: '',
          data: {
            'code': res.code
          },
          method: 'POST',
          header: {
            'Content-Type': 'application/x-www-form-urlencoded'
          }, 
          success: function (res) {
            that.setData({
              sessionkey: res.data
            });
          },
          fail: function (err) {
            console.log(err);
          }
        })
      }
    })
  },
    getPhoneNumber: function(e) { //點擊獲取手機號碼按鈕
      var that = this;
      wx.checkSession({
        success: function() {
          var ency = e.detail.encryptedData;
          var iv = e.detail.iv;
          var sessionk = that.data.sessionKey;
          if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
            that.setData({
              modalstatus: true
            });
          } else { //贊成受權
            wx.request({
              method: "GET",
              url: '',
              data: {
                encrypdata: ency,
                ivdata: iv,
                sessionkey: sessionk
              },
              header: {
                'content-type': 'application/json' // 默認值  
              },
              success: (res) => {
                console.log("解密成功")
                console.log(res)
                let phone = res.data.phoneNumber
                console.log(phone);
              },
              fail: function(res) {
                console.log("解密失敗~~~~~~~~~~~~~");
                console.log(res);
              }
            });
          }
        },
        fail: function() {
          console.log("session_key 已經失效,須要從新執行登陸流程");
          that.wxlogin(); //從新登陸
        }
      });
    }
})
複製代碼
相關文章
相關標籤/搜索