下面我将详细讲解“微信小程序getPhoneNumber获取用户手机号”的完整攻略。
1. 获取用户手机号的前提条件
在使用getPhoneNumber获取用户手机号之前,必须满足以下条件:
- 该用户已经授权过小程序获取用户手机号;
- 开启了“获取用户手机号”权限;
- 正在使用微信运行的环境;
- 用户允许小程序使用手机号码。
2. 如何获取用户手机号
获取用户手机号需要使用微信小程序的API接口:wx.login和wx.getUserInfo。以下分别进行讲解。
2.1. 调用wx.login接口
在调用wx.login接口时,需传递一个success方法,该方法中包含了code,即登入微信的code。代码如下:
wx.login({
success: function (res) {
console.log(res.code);
}
})
2.2. 调用wx.getUserInfo接口
在调用wx.getUserInfo接口时,也需要传递一个success方法,该方法中包含了rawData和signature。代码如下:
wx.getUserInfo({
success: function(res) {
console.log(res.rawData);
console.log(res.signature);
}
})
2.3. 解密数据
获取到用户信息之后,还需要解密数据才能获取到用户手机号。解密的具体步骤如下:
2.3.1. 引入crypto-js库
在小程序中引入crypto-js库,用于进行解密。需要注意的是,由于微信小程序不能直接使用npm包,所以需要在项目中引入crypto-js.min.js文件。例如:
<script src="/lib/crypto-js.min.js"></script>
2.3.2. 生成session_key和iv
在获取用户信息时,微信会返回session_key和iv两个值,用于解密用户数据。具体代码如下:
// 将session_key和iv转换为Base64编码
var session_key = wx.getStorageSync('session_key');
var iv = wx.getStorageSync('iv');
session_key = CryptoJS.enc.Base64.parse(session_key);
iv = CryptoJS.enc.Base64.parse(iv);
2.3.3. 解密encryptedData
获取到用户信息之后,即可对用户数据进行解密。具体代码如下:
// 获取到用户的encryptedData
var encryptedData = res.encryptedData;
// 将encryptedData转换为Base64编码
encryptedData = CryptoJS.enc.Base64.parse(encryptedData);
// 进行解密
var decryptedData = CryptoJS.AES.decrypt({
ciphertext: encryptedData
}, session_key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
// 将解密后的数据转换为字符串格式
var decryptedStr = CryptoJS.enc.Utf8.stringify(decryptedData);
console.log(decryptedStr);
2.4. 获取用户手机号
最后,从解密后的数据中提取出用户手机号码。具体代码如下:
var data = JSON.parse(decryptedStr);
console.log(data);
if (data.phoneNumber) {
console.log('用户手机号码为:' + data.phoneNumber);
} else {
console.log('获取用户手机号码失败');
}
3. 示例说明
下面,我将使用两个实际的例子来说明如何获取用户手机号。
示例一
wx.login({
success: function (res) {
// 获取用户信息
wx.getUserInfo({
success: function(res) {
// 解密用户数据
var session_key = wx.getStorageSync('session_key');
var iv = wx.getStorageSync('iv');
session_key = CryptoJS.enc.Base64.parse(session_key);
iv = CryptoJS.enc.Base64.parse(iv);
var encryptedData = res.encryptedData;
encryptedData = CryptoJS.enc.Base64.parse(encryptedData);
var decryptedData = CryptoJS.AES.decrypt({
ciphertext: encryptedData
}, session_key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = CryptoJS.enc.Utf8.stringify(decryptedData);
// 获取用户手机号
var data = JSON.parse(decryptedStr);
console.log(data);
if (data.phoneNumber) {
console.log('用户手机号码为:' + data.phoneNumber);
} else {
console.log('获取用户手机号码失败');
}
}
})
}
})
示例二
wx.login({
success: function (res) {
// 发送code到后端,获取session_key和openid
wx.request({
url: 'https://example.com/api/login',
data: {
code: res.code
},
success: function(res) {
wx.setStorageSync('session_key', res.data.session_key);
wx.setStorageSync('openid', res.data.openid);
// 获取用户信息
wx.getUserInfo({
success: function(res) {
// 解密用户数据
var session_key = wx.getStorageSync('session_key');
var iv = wx.getStorageSync('iv');
session_key = CryptoJS.enc.Base64.parse(session_key);
iv = CryptoJS.enc.Base64.parse(iv);
var encryptedData = res.encryptedData;
encryptedData = CryptoJS.enc.Base64.parse(encryptedData);
var decryptedData = CryptoJS.AES.decrypt({
ciphertext: encryptedData
}, session_key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
var decryptedStr = CryptoJS.enc.Utf8.stringify(decryptedData);
// 获取用户手机号
var data = JSON.parse(decryptedStr);
console.log(data);
if (data.phoneNumber) {
console.log('用户手机号码为:' + data.phoneNumber);
} else {
console.log('获取用户手机号码失败');
}
}
})
}
})
}
})
以上就是完整的“微信小程序getPhoneNumber获取用户手机号”的攻略说明,希望对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序getPhoneNumber获取用户手机号 - Python技术站