小程式獲取使用者的UniqueID 以及 openid
阿新 • • 發佈:2018-11-23
UniqueID
以及 openid
的獲取涉及到使用者的敏感資訊,返回的資料encryptedData
是加密後的資料要提取資訊需要對資料進行解密
官網提供瞭解密的演算法,將nodejs的版本拿過來稍作修改即可
- 下載 cryptojs 放到專案的utils目錄下
- 在utils 目錄下新建
decode.js
寫入以下內容
//utils/decode.js var Crypto = require('./cryptojs/cryptojs.js').Crypto; function WXBizDataCrypt(appId, sessionKey) { this.appId = appId this.sessionKey = sessionKey } WXBizDataCrypt.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 = WXBizDataCrypt
- 在app.js 引入decode.js 對資料進行解密
-
var WXBizDataCrypt = require('utils/decode.js'); var AppId = 'XXXXXX' var AppSecret = 'XXXXXXXXX' //app.js App({ onLaunch: function () { //呼叫登入介面 wx.login({ success: function (res) { wx.request({ url: 'https://api.weixin.qq.com/sns/jscode2session', data: { appid: AppId, secret: AppSecret, js_code: res.code, grant_type: 'authorization_code' }, header: { "Content-Type": "application/x-www-form-urlencoded" }, method: 'GET', success: function(res) { var pc = new WXBizDataCrypt(AppId, res.data.session_key) wx.getUserInfo({ success: function (res) { var data = pc.decryptData(res.encryptedData, res.iv) console.log('解密後 data: ', data) } }) }, fail: function(res) { } }) } }) } })
注意:UniqueID 的獲取微信開放平臺帳號必須已完成開發者資質認證,否則解密後的資料沒有
UniqueID
欄位