预备工作,先装axios
npm i axios
生成小程序码,需要走到微信官方那边提供的接口
//获得token
let { data } = await axios.get('https://api.weixin.qq.com/cgi-bin/token', {
params: {
grant_type: 'client_credential',
appid: appid,
secret: secret,
},
});
拿到token后调用生成葵花码的接口
const { data } = await axios.post(
`https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`,
{
path,
width: 200,
is_hyaline: false,
},
{ responseType: 'arraybuffer' },
);
这样接口会返回一个二进制流,只需要将这个二进制流转base64就可以显示图片了
完整代码如下
import axios from 'axios';
let appid = '你的appid';
let secret = '密钥去微信公众平台拿';
//默认参数
let grant_type = 'client_credential';
//设置一个值保存token
let access_token = '';
//拿到token
const sunflowerCode = async () => {
let { data } = await axios.get('https://api.weixin.qq.com/cgi-bin/token', {
params: {
grant_type: 'client_credential',
appid: appid,
secret: secret,
},
});
return data;
};
//生成葵花码
const sunflowerCodeImg = async (path, access_token) => {
const { data } = await axios.post(
`https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`,
{
path,
width: 200,
is_hyaline: false,
},
//这个一定要加
{ responseType: 'arraybuffer' },
);
return data;
};
//主方法
async SunflowerCodeFun() {
//拿到token
let data = await sunflowerCode();
access_token = data.access_token;
//第一个参数是你需要打开的路径,可以在后面拼参数
let img = await sunflowerCodeImg('pages/home/home?id=1', access_token);
//缓冲区
const buffer = Buffer.from(img, 'base64');
const base64Str = 'data:image/png;base64,' + buffer.toString('base64');
//这里就是结果
console.log(base64Str);
return base64Str;
}
}
为啥发这一文章,一言难尽,主要是二进制流转base64这块,我翻阅了很多很多的文章,关于nodejs生成小程序码的文章少之又少,只能往二进制流转base64去查,但发现生成出来的base64格式图片基本都打不开的,nodejs又使用不了Blob,如果需要去模拟Blob又得整很多不必要的东西。网上查到nodejs基本都是通过buffer缓冲区去转码这个是问题,但是需要在axios参数上加入,这样生成出来的base64才能显示出图片来
{ responseType: 'arraybuffer' },