1.獲取手機號
//wxml文件使用button按鈕觸發(fā)獲取手機號事件廷痘,open-type="getPhoneNumber" 不能少
<button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber"></button>
//js文件調(diào)用獲取事件
Page({
? getPhoneNumber (e) {
? ? console.log(e.detail.errMsg)
? ? console.log(e.detail.iv)
? ? console.log(e.detail.encryptedData)
? }
})
2.解密
2.1 獲取所需數(shù)據(jù)
手機號碼解密主要使用到的數(shù)據(jù)為:appId(開發(fā)者appid)呆贿、 session_key丐谋、 encryptedData(上邊方法中獲取的e.detail.encryptedData)住闯、iv(上邊方法中獲取的e.detail.iv)踏烙。
所以在所需數(shù)據(jù)方面主要要獲取的就是session_key踢涌。參考官方鏈接
獲取session_key所需的主要參數(shù)為:appid兼蜈、secret(這兩個參數(shù)都可以在小程序官方-開發(fā)-開發(fā)設置中獲热敛小)、js_code为狸。
//獲取js_code
wx.login({
? success (res) {
? ? console.log(res.code);
? }
})
最終獲取session_key肯腕。
wx.request({
? ? ? ? ? url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + 開發(fā)者appid + '&secret=' + 開發(fā)者secret + '&js_code=' + 獲取的code + '&grant_type=authorization_code',
? ? ? ? ? method: 'POST',
? ? ? ? ? header: {
? ? ? ? ? 'content-type': 'application/json'
? ? ? ? ? },
? ? ? ? ? success: function (res) {
? ? ? ? ? ? console.log(res.data.session_key);
? ? ? ? ? }
? ? ? ? })
2.2 解密返回數(shù)據(jù)
手機號碼解密:var Crypto = require('cryptojs/cryptojs.js').Crypto;主要使用的是 下包文件cryptojs-master里面的cryptojs.js文件,點擊下載钥平。 新建文件夾utils將下載的文件放在里面
微信官方提供了多種編程語言的示例代碼实撒,(點擊下載)但是沒有js包姊途,這里根據(jù)參考進行了稍微修改。
WXBizDataCrypt.js文件:?
// 引入CryptoJS
var Crypto = require('../utils/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知态,數(shù)據(jù)采用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
在需要解密的頁面進行引入WXBizDataCrypt.js捷兰。
var WXBizDataCrypt = require('../../utils/WXBizDataCrypt')
//需解密的事件中添加下邊代碼獲取解密后的手機號碼
var appId = 開發(fā)者appid
var sessionKey = 獲取的sessionkey
var encryptedData = encryptedData
var iv = iv
var pc = new WXBizDataCrypt(appId, sessionKey)
var data = pc.decryptData(encryptedData , iv)
console.log('解密后 data: ', data)