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
}
}
複製代碼
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(); //從新登陸
}
});
}
})
複製代碼