//1.页面代码
<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" class="binding">
<text>绑定手机号text>
button>
3.在utils文件下创建WXBizDataCrypt.js文件:
4.在所需要的解mi的页面引入该解mi js
var WXBizDataCrypt = require(‘@/utils/WXBizDataCrypt’)
![在这里插入图片描述](https://img-blog.csdnimg.cn/37d47996ccc44b6389ce08d5e3645f6e.jpeg#pic_center)
/**
* Created by rd on 2017/5/4.
*/
// 引入CryptoJS 路径依个人导入情况变动
var Crypto = require('@/components/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);
// 对称解mi使用的算法为 AES-128-CBC,数据采用PKCS#7填充
var mode = new Crypto.mode.CBC(Crypto.pad.pkcs7);
try {
// 解mi
var bytes = Crypto.AES.decrypt(encryptedData, key, {
asBpytes:true,
iv: iv,
mode: mode
});
var decryptResult = JSON.parse(bytes);
} catch (err) {
console.log(err)
}
return decryptResult
}
module.exports = RdWXBizDataCrypt
3.methods方法
//绑定手机号
getPhoneNumber(e) {
let thit = this
console.log(e)
// 判断一下这里是不是小程序 如果是小程序,走获取微信手机号进行绑定
if (e.mp.detail.errMsg == 'getPhoneNumber:ok') {
uni.showLoading({
title: '绑定中',
})
let jsCode = '';
//获取code
uni.login({
provider: 'weixin',
success: (loginRes) => {
jsCode = loginRes.code;
// console.log('222',loginRes);
//获取session_key
uni.request({
url: 'https://api.weixin.qq.com/sns/jscode2session',
method: 'GET',
data: {
appid: this.$APP_ID, //你的小程序的APPID
secret: this.$APP_SECRET, //你的小程序秘钥secret,
js_code: jsCode, //wx.login 登录成功后的code
grant_type: 'authorization_code'
},
success: (cts) => {
console.log('获取信息', cts); // 换取成功后 暂存这些数据 留作后续操作
// this.openid = cts.data.openid //openid 用户唯一标识
// this.session_key = cts.data.session_key //session_key 会话密钥
//方法一:前端解mi
//this.$APP_ID 商户appid
//cts.data.session_key
var pc = new WXBizDataCrypt(this.$APP_ID, cts.data.session_key)
var data = pc.decryptData(e.detail.encryptedData , e.detail.iv)
// console.log('解析',data);
}
});
},
fail: () => {
uni.showToast({
title: "微信登录授权失败",
icon: "none"
});
}
})
} else {
uni.showToast({
title: '已拒绝授权',
icon: 'none',
duration: 2000,
})
}
},