先决条件
- 小程序的主体为企业(正式上线),测试版不受此限制
- 小程序appId
- 小程序秘钥SECRET
具体步骤
- 下载解密脚本 WXBizDataCrypt.js微信官方下载地址
- 解压开后,把node文件夹下WXBizDataCrypt.js拉入项目目录
- 在具体需要获取手机号的页面引入脚本文件 import WXBizDataCrypt from '@/static/WXBizDataCrypt.js' 根据自己的项目具体目录写路径
变量定义
login_code : '',
WX_AUTH_URL:'api.weixin.qq.com/sns/jscode2…', 固定的解析地址
APPID:'自己小程序的appid',
SECRET:'自己小程序的SECRET',
页面按钮
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber"> 获取电话号码
相关方法
在onLoad生命周期中调用uni.login进行登录
onLoad: function() {
var that = this;
uni.login({
success: function(res) {
// 获取code
console.log(JSON.stringify(res));
that.login_code = res.code;
}
});
},
获取手机号方法
methods: {
getPhoneNumber: function(e) {
console.log(e);
var that = this
if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
console.log('用户拒绝提供手机号');
} else {
console.log('用户同意提供手机号');
var encryptedData = e.detail.encryptedData;
var iv = e.detail.iv;
var JSCODE = this.login_code;
var APPID = this.APPID;
var SECRET = this.SECRET;
var wx_author_url = this.WX_AUTH_URL + '?appid=' + APPID+'&secret=' + SECRET + '&js_code=' + JSCODE + '&grant_type=authorization_code';
uni.request({
url : wx_author_url,
success(re){
console.log( 'session_key:' + re.data.session_key );
var appId = APPID;
var sessionKey = re.data.session_key;
var pc = new WXBizDataCrypt(appId, sessionKey);
var data = pc.decryptData(encryptedData, iv);
console.log('------------------->');
console.log('解密后 data: ', data);
// 拿到的手机号相关信息都在data中
// 数据对象:{ countryCode: "86"
phoneNumber: "158xxxx5818"
purePhoneNumber: "158xxxx5818"
watermark:{
appid: "wxc294xxxxx6fbc318"
timestamp: 1649318087
}
}
// console.log('解密后 data: ', JSON.stringify(data));
console.log('------------------->');
}
});
}
},
}