微信小程序会对一些敏感数据加密,会输出一个encryptedData,然后对其解密,得到需要的json,(官方文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#加密数据解密算法),里面提供了一个示例代码的下载,链接:https://res.wx.qq.com/wxdoc/dist/assets/media/aes-sample.eae1f364.zip
里面node文件夹两个js文件,demo、WXBizDataCrypt,但拿来后直接调用运行,居然报错 ReferenceError: Buffer is not defined,这个Buffer为什么没定义呢?
出错语句为 var sessionKey = new Buffer(this.sessionKey, 'base64'),
WXBizDataCrypt.js全部代码如下
var crypto = require('crypto')
function WXBizDataCrypt(appId, sessionKey) {
this.appId = appId
this.sessionKey = sessionKey
}
WXBizDataCrypt.prototype.decryptData = function (encryptedData, iv) {
// base64 decode
var sessionKey = new Buffer(this.sessionKey, 'base64')
encryptedData = new Buffer(encryptedData, 'base64')
iv = new Buffer(iv, 'base64')
try {
// 解密
var decipher = crypto.createDecipheriv('aes-128-cbc', sessionKey, iv)
// 设置自动 padding 为 true,删除填充补位
decipher.setAutoPadding(true)
var decoded = decipher.update(encryptedData, 'binary', 'utf8')
decoded += decipher.final('utf8')
decoded = JSON.parse(decoded)
} catch (err) {
throw new Error('Illegal Buffer')
}
if (decoded.watermark.appid !== this.appId) {
throw new Error('Illegal Buffer')
}
return decoded
}
module.exports = WXBizDataCrypt
这就是值得吐槽的点了。腾讯的很多API 下载下来基本上都不能上手即用。都需要自己慢慢填坑