方法:
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接口来判断用户是否是在登录状态下允许获取手机号。