赞
踩
预备工作,先装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' },
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。