处理Buffer文件
问题场景:小程序生成推广二维码,用户A推荐用户B注册,将用户A的openid作为参数写进二维码中,
用户B微信扫码跳转到小程序应用中并获取二维码中的参数,生成推荐记录。
微信官方文档 微信生成推广码接口
根据步骤调用接口,返回值是一个二进制文件,需要处理成图片。
(后端调用该接口不考虑)
前端处理方案,将二进制文件转换成base64文件,再存储本地即可。
具体实现如下:
let val = {
path:'pages/index/index',
scene:openId,
width:280
}
wx.request({
// 获取token
url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential',
data: {
appid: 'wxddd04a919638017b',
secret: '96cb90a6f3b2e4993d125724d7a64a17'
},
success(res) {
wx.request({
// 调用接口B
url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=' + res.data.access_token,
method: 'POST',
responseType: "arraybuffer",
data: JSON.stringify(val),
success(res) {
console.log(res)
// let base64 = wx.arrayBufferToBase64(res.data)
// let bb = "data:image/png;base64,"+base64;
// console.log(bb)
let fileManager = wx.getFileSystemManager();//获取文件管理器
let filePath = wx.env.USER_DATA_PATH + '/inner.jpg';//设置临时路径
fileManager.writeFile({//获取到的数据写入临时路径
filePath: filePath,//临时路径
encoding: 'binary',//编码方式,二进制
data: res.data,//请求到的数据
success: function(res) {
console.log(res)
// console.log(filePath)//打印路径
that.setData({imgUrl:filePath})
},
fail: function(res) {
console.log(res)
},
});
}
})
}
})
能个将二进制文件最终在前端展示,但是前端是不允许这样做的,因为微信官方规定AppSecret不能够写在前端