方法:
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接口來判斷用戶是否是在登錄狀態下允許獲取手機號。