获取用户的基本信息
可以使用 wx.getUserInfo 或者 <button open-type="getUserInfo"/>

在小程序开发中,wx.getUserInfo 接口可以获取到一些当前微信用户的一些基本信息,但是没法获取手机号,那是因为手机号等敏感信息,微信对用户隐私有严格限制。
获取用户手机号
由于获取手机号属于用户敏感隐私信息,所以微信对这方面有一定限制。
1、首先要去微信公众平台里面的隐私协议里面完善“用户隐私保护指引”


ps:如果已经完善了的可以忽略这一步;更新后微信那边会审核,需要等一下,所以在开发前一定要去完善。
2、使用 button 标签里面的 getPhoneNumber 获取动态令牌 code
<button open-type="getPhoneNumber" bindgetphonenumber="onGetPhoneNumber">获取手机号</button>
注意:这里获取的 code 和 wx.login 获取的 code 是不一样的
- 登录
code:通过wx.login()获取,用于换取session_key。 - 动态令牌
code:通过getPhoneNumber返回(旧版接口返回encryptedData,新版返回动态code)。
旧版接口是需要通过获取 encryptedData、iv、code(wx.login获取)传给后端去解密换取手机号,兼容低版本微信客户端
// 旧版获取手机号
onGetPhoneNumber(e) {
if (e.detail.errMsg === "getPhoneNumber:ok") {
const encryptedData = e.detail.encryptedData;
const iv = e.detail.iv;
// 优先使用之前保存的code
const code = this.data.code || '';
// 如果没有有效的code,则重新调用login获取
if (!code) {
wx.login({
success: (loginRes) => {
this.getUserPhoneNumber(loginRes.code, encryptedData, iv);
}
});
} else {
this.getUserPhoneNumber(code, encryptedData, iv);
}
} else {
// console.log("用户拒绝授权");
}
},
新版接口相对来说就会简单一些,通过获取动态 code 调用微信接口 phonenumber.getPhoneNumber 换取手机号(无需 session_key 解密,微信服务器直接返回明文手机号),仅需支持微信 7.0.0+ 版本。
// 获取手机号
onGetPhoneNumber(e) {
if (e.detail.errMsg === "getPhoneNumber:ok") {
// 获取动态 code
const { code } = e.detail;
// 调用后端接口获取用户手机号
wx.$http2
.getUserPhoneNumber({
code,
})
.then((res) => {
// 此时后端就会把手机号返回
});
} else {
// console.log("用户拒绝授权");
}
},
| 接口类型 | 前端返回参数 | 后端解密方式 | 适用场景 |
|---|---|---|---|
| 旧版接口 | encryptedData, iv | 使用 session_key 解密 | 兼容低版本微信客户端 |
| 新版接口 | 动态 code | 直接调用微信接口换取手机号 | 仅需支持微信 7.0.0+ 版本 |
Numb息
不管是新版还是旧版,前端都是使用 getPhoneNumber 去获取信息,主要取决于后端的解密方式
下面是 getPhoneNumber 获取到的信息:

如果点击的时候报错,那就是没有在隐私协议中完善信息或者微信那边还没通过

5116

被折叠的 条评论
为什么被折叠?



