import express from 'express';
import axios from 'axios';
let qrcode = express.Router();
qrcode.post('/share',async (req,res)=>{
try {
let appid = 'wxc********b7a';
let secret = '2bfa**************e8682';
let url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`
axios.get(url).then(res2=>{
let scene = req.body._id;//开发者自己自定义的参数
axios(
{
headers:{"Content-type":"application/json"},
method: 'post',
responseType: 'arraybuffer',
url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='+access_token+'',
data:{
scene:scene,
page:'pages/infor/main',
width: 280
}
}
).then(res3=>{
//请求到的二维码buffer就在res3中
//待完善区域
})
});
} catch (error) {
console.log(error)
}
})
export default qrcode;
第二次axios请求,用option配置的方式,设置了responseType,避开了第二个坑。二维码的buffer数据就在res3中。
4.用buffer生成图片
只要buffer数据是完整的,就能正确生成二维码。
因为需要生成图片,所以需要引用fs模块和path模块。
import express from 'express';
import axios from 'axios';
import path from 'path';
import fs from 'fs';
let qrcode= express.Router();
qrcode.post('/share',async (req,res)=>{
try {
let appid = 'wxc********b7a';
let secret = '2bfa**************e8682';
let url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${secret}`;
axios.get(url).then(res2=>{
let access_token = res2.data.access_token;
let scene = req.body._id;
axios(
{
headers:{"Content-type":"application/json"},
method: 'post',
responseType: 'arraybuffer',
url: 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token='+access_token+'',
data:{
scene:scene,
page:'pages/infor/main',
width: 280
}
}
).then(res3=>{
let src = path.dirname(__dirname).replace(//g,'/')+`/public/photo/${req.body._id}.png`;
fs.writeFile(src, res3.data, function(err) {
if(err) {console.log(err);}
res.json({msg:ok});
});
})
});
} catch (error) {
console.log(error);
res.json({error})
}
})export default qrcode;









