第一步:获取code
获取微信用户绑定的手机号,需先调用wx.login接口。由于使用uni-app,所以我是调用uni.login,是一样的,loginRes里就包含了code的值
onLoad:function () {
uni.login({
provider: 'weixin',
success: function (loginRes) {
console.log(loginRes);
},
fail:function (failRes) {
console.log('login:' + failRes);
}
});
},
第二步:获取iv和encryptedData
微信官方示例:
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
Page({
getPhoneNumber (e) {
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
}
})
可能是因为我是用的uni-app框架,这个方法不管用,修改如下:
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">手机号</button>
getPhoneNumber (e) {
console.log(e.detail.errMsg)
console.log(e.detail.iv)
console.log(e.detail.encryptedData)
}
能正确获取到encryptedData和iv
第三步:获取openid和session_key等
使用第一步获取到的code,调用自定义接口自己后台服务器,让他们调用微信接口获取session_key等
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
请求参数
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
appid | string | 是 | 小程序 appId | |
secret | string | 是 | 小程序 appSecret | |
js_code | string | 是 | 登录时获取的 code | |
grant_type | string | 是 | 授权类型,此处只需填写 authorization_code |
返回值
Object
返回的 JSON 数据包
属性 | 类型 | 说明 |
---|---|---|
openid | string | 用户唯一标识 |
session_key | string | 会话密钥 |
unionid | string | 用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回,详见 UnionID 机制说明。 |
errcode | number | 错误码 |
errmsg | string | 错误信息 |
第四步:后台根据iv /encryptedData/session_key/openid等参数,根据微信解密算法,得到用户手机号
解密后数据结构为
{
"phoneNumber": "13580006666",
"purePhoneNumber": "13580006666",
"countryCode": "86",
"watermark":
{
"appid":"APPID",
"timestamp": TIMESTAMP
}
}
以上相关内容可在微信开放平台查阅
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html