一、原理步驟
- 第一步:呼叫微信小程式login介面,得到一個code值
- 第二步:拿到code值,將其傳送給服務端。
- 獲取openid(使用者唯一標識)和sessionkey(會話金鑰)。
- 第三步:利用得到的sessionKey呼叫getPhoneNumber介面
- 通過引數【encryptedData】 、【iv】 、【sessionKey】 請求後臺解密獲取使用者手機號
二、getPhoneNumber返回引數說明
- encryptedData:包括敏感資料在內的完整使用者資訊的加密資料
- encryptedData 解密後為以下 json 結構
{
"phoneNumber": "13580006666", //使用者繫結的手機號(國外手機號會有區號)
"purePhoneNumber": "13580006666", //沒有區號的手機號
"countryCode": "86",//區號
"watermark":
{
"appid":"APPID",
"timestamp":TIMESTAMP
}
}
複製程式碼
三、實踐程式碼
<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(); //重新登入
}
});
}
})
複製程式碼