let token = 'h3-Oda1A05Nit6EEZEkFqvgemQPCpRj1rmwYCp3puMahUH_a4rMXbYlS2NoMsjYiVhci0uDbe-VNlQAui1Ljp-fyFi8PqrGYZEsUMA0G88xmob-fheZ2c_85Jw8tnMx-NFSbAHACUH'; console.log('token:' + token); let form = { 'path':'page/bookflow/pages/sharegroup/sharegroup?groupId=279&introducer=1686&fromBarcode=true' } form = JSON.stringify(form); console.log(form); let result= yield postRequest({url:'https://api.weixin.qq.com/wxa/getwxacode?access_token=' + token,form:form});
axios发送post请时,指定{ responseType: 'arraybuffer' }即可。
const https = require('https'); const url = require('url'); const fs = require('fs'); let access_token = 'your token'; const post_data = JSON.stringify({ scene: 'a=1', // 最多32个字符。 width: 200, // 生成的小程序码宽度。 }); let options = url.parse(`https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=` + access_token); options = Object.assign(options, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': post_data.length, } }); // 获取图片二进制流 let imgBuffer; const xxx = function () { return new Promise((resolve, reject) => { let req = https.request(options, (res) => { let resData = ''; res.setEncoding("binary"); res.on('data', data => { resData += data; }); res.on('end', () => { const contentType = res.headers['content-type']; imgBuffer = Buffer.from(resData, 'binary'); resolve({ imgBuffer, contentType }); }); }); req.on('error', (e) => { console.log('获取微信小程序图片失败') console.error(e); }); req.write(post_data); req.end(); }).catch(() => { return null; }); } xxx().then((xx)=>{ fs.writeFile('./www/static/genCode.jpeg', imgBuffer, function (err) { if (err) { console.log(err) } }); }); //改下自己的access_token,可以用
Buffer.from(resData, "binary");
是关键啊
可以把接口返回的小程序二维码文件流转换成base64格式(base64.b64encode(res.body)),然后加上头信息"data:image/jpeg;base64,", 传给前端图片的src。
请问解决了吗?@楼主,
我也是用nodejs开发,同样返回乱码,不管是utf8或者gbk解码在保存图片都不行。
楼主,怎么解决的?
这个问题怎么解决的?我也遇到了同样的问题
获取后,直接通过流上传到七牛之类的云端存储服务,获取Key后再前端显示。
'Content-Type': 'Content-type: image/jpg'
我试过不行苏晓光
Content-Type 设置图片