nodejs 生成微信小程序码(葵花码)二进制流转base64

预备工作,先装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' },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值