用 button 组件获取手机号,比较简单,记录一下避免遗忘。
有个前提是小程序得是企业帐号,个人帐号没有开放这个能力。

获取 openId

用wx.login获取code,用code调后端接口获取openId

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// util.js
// 获取openid
function getOpenId() {
return new Promise((resolve, reject) => {
// 利用wx.login拿code
wx.login({
success: (res) => {
let params = {
loginSysName: "APPLETS_HAOFANG",
loginType: 7,
loginName: res.code,
};
// 利用code调后台返回openid
wx.$post("/user/api/wxAuth", params)
.then((res) => {
if (!res) {
wx.showToast({
icon: "none",
title: "获取不到openid",
});
}
resolve(res.openid);
})
.then((res) => {
reject("");
});
},
fail: (err) => {
reject("");
},
});
});
}
module.exports = {
getOpenId: getOpenId,
};

用 button 组件获取手机号

1
2
3
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">
获取手机号
</button>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
getPhoneNumber(e) {
// 这个回调返回的手机号是加密的,需要调后台解密
// 先异步拿openId
util.getOpenId().then(openId => {
if (e.detail && e.detail.encryptedData) {
let params = {
encryptedData: e.detail.encryptedData,
iv: e.detail.iv,
openid: openId,
loginSysName: "APPLETS_HAOFANG"
}
// 利用openid和两个密文参数调用后台接口,返回明文的手机号
wx.$post("/user/api/wxDecryptData", params).then(res => {
this.setData({
telPhone: res.phoneNumber
})
})
}
})
}