在用户点击授权登录的时候,获取手机号
可以先看微信小程序的开发文档
这里用的是模仿 Node 的 demo,使用 CryptoJS实现纯 js 下解密用户信息
要用到cryptojs来解密
wxml:
<button class="button1" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">登录</button>
要先下载cryptojs用来解密手机号
其次在utils创建RdWXBizDataCrypt.js来封装解密文件
// 引入cryptojs-master
var Crypto = require('./cryptojs-master/cryptojs.js').Crypto;
var app = getApp();
function RdWXBizDataCrypt(appId, sessionKey) {
this.appId = appId
this.sessionKey = sessionKey
}
RdWXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {
// base64 decode :使用 CryptoJS 中 Crypto.util.base64ToBytes()进行 base64解码
var encryptedData = Crypto.util.base64ToBytes(encryptedData)
var key = Crypto.util.base64ToBytes(this.sessionKey);
var iv = Crypto.util.base64ToBytes(iv);
// 对称解密使用的算法为 AES-128-CBC,数据采用PKCS#7填充
var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);
try {
// 解密
var bytes = Crypto.AES.decrypt(encryptedData, key, {
asBpytes: true,
iv: iv,
mode: mode
});
var decryptResult = JSON.parse(bytes);
} catch (err) {
console.log(err)
}
if (decryptResult.watermark.appid !== this.appId) {
console.log(err)
}
return decryptResult
}
module.exports = RdWXBizDataCrypt
在要获取的页面的js
const wXBizDataCrypt = require('../../utils/RdWXBizDataCrypt.js')//文件的头部先引用utils中封装好的RdWXBizDataCrypt文件
getPhoneNumber: function (e) {
var that1 = this;
// console.log(e.detail.errMsg == "getPhoneNumber:ok");
if (e.detail.errMsg == "getPhoneNumber:ok") {
wx.login({
success: res => {
var code = res.code; //返回登录code
var appId = '';//小程序的appid
var secret = '';//小程序密钥(AppSecret)
var that = this;
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appId + '&secret=' + secret + '&js_code=' + code + '&grant_type=authorization_code',
data: {},
header: {
'content-type': 'json'
},
success: res => {
// console.log(res)
var sessionKey = res.data.session_key//微信服务器生成的针对用户数据进行加密签名的密钥
var iv=e.detail.iv//iv,encryptedData是获取点击登录时的返回信息
var encryptedData=e.detail.encryptedData
var pc = new wXBizDataCrypt(appId, sessionKey)
var data = pc.decryptData(encryptedData, iv)
console.log(data)//里面就有要的手机号了
}
})
}
})
}
},