首先,需要注意的是获取手机号的功能只能在已经授权获取用户手机号的场景中,才能够使用。在微信小程序中,需要先使用 wx.login()
获取到用户登录凭证 code,再调用 wx.request()
向后端服务器发送请求,获取用户加密的手机号信息。
以下是具体的流程和示例代码:
- 在小程序中,使用
wx.login()
获取用户登录凭证 code:
wx.login({
success: res => {
if (res.code) {
// 成功获取到用户登录凭证 code
// 将 code 发送给后端服务器,进行后续操作
// ...
} else {
console.log('获取用户登录凭证失败:' + res.errMsg);
}
}
});
- 后端服务器接收到前端发送的用户登录凭证 code 后,使用 code 向微信服务器发送请求,并获取用户加密的手机号信息。
// 获取用户加密手机号的示例代码
const https = require('https');
const querystring = require('querystring');
// 将 appid, appSecret, code, encryptedData 和 iv 替换为实际的值
const appid = 'your appid';
const appSecret = 'your appSecret';
const code = 'the code from client side';
const encryptedData = 'the encrypted data from client side';
const iv = 'the iv from client side';
const options = {
hostname: 'api.weixin.qq.com',
path: '/sns/jscode2session?' + querystring.stringify({
appid: appid,
secret: appSecret,
js_code: code,
grant_type: 'authorization_code'
}),
method: 'GET'
};
const req = https.request(options, res => {
console.log(`状态码: ${res.statusCode}`);
res.on('data', d => {
const rawData = d.toString();
console.log('获取 session_key 和 openid 的响应数据:', rawData);
// 解析 session_key 和 openid
const sessionKey = JSON.parse(rawData).session_key;
const openid = JSON.parse(rawData).openid;
// 使用解密算法解密出用户手机号信息
const crypto = require('crypto');
const session_key = Buffer.from(sessionKey, 'base64');
const encrypted_data = Buffer.from(encryptedData, 'base64');
const iv_data = Buffer.from(iv, 'base64');
try {
const decipher = crypto.createDecipheriv('aes-128-cbc', session_key, iv_data);
decipher.setAutoPadding(true);
const decoded = decipher.update(encrypted_data, 'binary', 'utf8');
const phoneNumber = JSON.parse(decoded).phoneNumber;
console.log('用户手机号:', phoneNumber);
} catch (err) {
console.log('解密出现错误:', err);
}
});
});
req.on('error', error => {
console.error(error);
});
req.end();
以上就是获取微信小程序用户手机号的完整攻略和示例代码。需要注意的是,此示例代码仅供参考,实际应用中需要结合自身业务情况进行相应的修改和优化。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序 获取手机号 JavaScript解密示例代码详解 - Python技术站