微信小程序獲取微信綁定授權手機號

方法:

1、使用<button>組件,並將該組件的open-type的屬性值設置爲getPhoneNumber,綁定bindgetphonenumber事件
2、當用戶點擊允許時,可以通過綁定事件的回調獲取到微信服務返回的加密數據
3、調用login接口,獲取到用戶的code
4、將獲取手機號事件返回的加密數據結合sessionkey、appid以及login接口返回的code傳給後端提供的接口進行解密獲取手機號。

示例:

<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"> </button>
Page({ 
    getPhoneNumber: function(e) { 
        console.log(e.detail.errMsg) 
        console.log(e.detail.iv) 
        console.log(e.detail.encryptedData) 
    } 
})

返回參數說明:

encryptedData(String):包括敏感數據在內的完整用戶信息的加密數據
iv(String):加密算法的初始向量
errMsg(String):信息

敏感數據的獲取大多都是將以上返回的除errMsg之外參數以及code傳給後端提供的接口,由後端進行解密後返回解密後的數據,獲取到的解密數據如下:

{
	"code":200,
    "phoneNumber": "xxxxx",  
    "purePhoneNumber": "xxxxx", 
    "countryCode": "86",
    "msg": "請求成功",
    "time": "1590486884",
    "watermark":
    {
        "appid":"APPID",
        "timestamp":"1590486884"
    }
}

具體示例:

getPhoneNumber: function (e) {
    console.log(e.detail.iv);
    console.log(e.detail.encryptedData);
    wx.login({
        success: res => {
            console.log(res.code);
            if(res.code){
              wx.request({
                 url: '解密地址',
                 data: {
                     'encryptedData': encodeURIComponent(e.detail.encryptedData),
                     'iv': e.detail.iv,
                     'code': res.code
                 },
                 method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
                 header: {
                     'content-type':'application/json'
                 }, // 設置請求的 header
                 success: function (res) {
                     if (res.status == 200 ) {//我後臺設置的返回值爲200時爲成功
                     	//do something
                     }
                 },
                 fail: function (err) {
                     //do something
                 }
             })
            }
        }
    })
}

在用戶允許獲取手機號之後,有時還會調用checkSession接口來判斷用戶是否是在登錄狀態下允許獲取手機號。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章