一、使用<button>
组件,并将该组件的open-type
的属性值设置为getPhoneNumber
,绑定bindgetphonenumber
事件
二、当用户点击容许时,能够经过绑定事件的回调获取到微信服务返回的加密数据
三、调用login接口,获取到用户的code
四、将获取手机号事件返回的加密数据结合sessionkey、appid以及login接口返回的code传给后端提供的接口进行解密获取手机号。web
<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接口来判断用户是不是在登陆状态下容许获取手机号。json