下面是详细讲解微信小程序获取用户绑定手机号的方法示例:
一、前置条件
在小程序中,获取用户手机号需要前置条件:
1. 首先开通了微信开放平台帐号。如果您还没有开通或者不清楚如何开通,可以参考这篇文章《微信开放平台申请(绑定)流程及账号类型查询》。
2. 授权用户手机号。在调用微信提供的API获取用户手机号前,需要先授权用户手机号。具体流程是,在小程序中弹出授权请求,让用户授权同意后才能获取用户手机号码。
二、调用微信提供的API
小程序提供了wx.login和wx.getUserInfo方法可供使用。其中wx.getUserInfo方法可用于获取用户昵称、头像等信息。为了获取用户手机号,还需要调用wx.login方法获取code。之后使用wx.request方法请求微信提供的API,获取sessionkey和openid。
wx.login({
success: res => {
if (res.code) {
let code = res.code;
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
data: {
appid: 'your appid',
secret: 'your secret',
js_code: code,
grant_type: 'authorization_code'
},
success: res => {
// 将sessionkey和openid存储到本地
}
})
}
}
})
三、解密包含用户手机号的数据
获得sessionkey和openid之后,就可以对包含用户手机号的数据进行解密。由于包含用户手机号的数据是加密的,需要借助微信提供的API进行解密,并将解密后的数据保存在本地。解密的过程包含了以下几个步骤:
1. 获取encryptedData和iv
在授权用户手机号后即可获取encryptedData和iv。
wx.getUserInfo({
success: res => {
let encryptedData = res.encryptedData;
let iv = res.iv;
// 解密encryptedData并保存到本地
}
})
2. 将sessionkey转为Base64格式
将从微信服务器获得的sessionkey用Base64格式进行编码。
let sessionKey = res.session_key;
let sessionKeyBase64 = wx.base64ToArrayBuffer(sessionKey);
3. 解密数据
使用CryptoJS包进行解密。
let CryptoJS = require('crypto-js');
let key = sessionKeyBase64;
let iv = wx.base64ToArrayBuffer(iv);
let encryptedData = wx.base64ToArrayBuffer(encryptedData);
let decryptedData = CryptoJS.AES.decrypt(encryptedData, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
四、示例演示
下面是几个示例,供参考:
示例一
在小程序中,通过wx.getUserInfo方法获取用户信息。其中,包含用户绑定的手机号码。获取逻辑如下:
wx.getUserInfo({
success: res => {
let encryptedData = res.encryptedData;
let sessionKey = wx.getStorageSync('session_key');
let iv = res.iv;
let decryptedData = '';
let phoneNumber = '';
sessionKey = wx.base64ToArrayBuffer(sessionKey);
iv = wx.base64ToArrayBuffer(iv);
encryptedData = wx.base64ToArrayBuffer(encryptedData);
decryptedData = CryptoJS.AES.decrypt(encryptedData, sessionKey, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
decryptedData = decryptedData.toString(CryptoJS.enc.Utf8);
phoneNumber = JSON.parse(decryptedData).phoneNumber;
wx.showModal({
title: '手机号获取成功',
content: phoneNumber,
showCancel: false
})
}
})
示例二
这是一个获取用户手机号的demo,完整代码可在Github的项目中找到。
该示例通过wx.login方法获取code,并调用wx.request方法请求微信提供的API,然后将sessionkey和openid保存在本地。在用户同意授权后,获取encryptedData和iv。最后,使用CryptoJS解密数据,获取用户手机号。
wx.login({
success: res => {
if (res.code) {
let code = res.code;
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
data: {
appid: 'your appid',
secret: 'your secret',
js_code: code,
grant_type: 'authorization_code'
},
success: res => {
wx.setStorageSync('session_key', res.data.session_key);
}
})
}
}
})
// 授权手机号
bindgetphonenumber: function(res) {
let encryptedData = res.detail.encryptedData;
let iv = res.detail.iv;
let sessionKey = wx.getStorageSync('session_key');
sessionKey = wx.base64ToArrayBuffer(sessionKey);
iv = wx.base64ToArrayBuffer(iv);
encryptedData = wx.base64ToArrayBuffer(encryptedData);
decryptedPhoneNumber = CryptoJS.AES.decrypt(encryptedData, sessionKey, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
// 解密后的数据
console.log(decryptedPhoneNumber.toString(CryptoJS.enc.Utf8));
}
这样,就通过以上的示例,讲解了获取微信小程序用户绑定手机号的方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序获取用户绑定手机号方法示例 - Python技术站