当前位置:   article > 正文

nodejs 生成微信小程序码(葵花码)二进制流转base64_nodejs 微信小程序后端生成小程序码,并且返回前端

nodejs 微信小程序后端生成小程序码,并且返回前端

预备工作,先装axios

npm i axios

生成小程序码,需要走到微信官方那边提供的接口

  1. //获得token
  2. let { data } = await axios.get('https://api.weixin.qq.com/cgi-bin/token', {
  3. params: {
  4. grant_type: 'client_credential',
  5. appid: appid,
  6. secret: secret,
  7. },
  8. });

拿到token后调用生成葵花码的接口

  1. const { data } = await axios.post(
  2. `https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`,
  3. {
  4. path,
  5. width: 200,
  6. is_hyaline: false,
  7. },
  8. { responseType: 'arraybuffer' },
  9. );

这样接口会返回一个二进制流,只需要将这个二进制流转base64就可以显示图片了

完整代码如下

  1. import axios from 'axios';
  2. let appid = '你的appid';
  3. let secret = '密钥去微信公众平台拿';
  4. //默认参数
  5. let grant_type = 'client_credential';
  6. //设置一个值保存token
  7. let access_token = '';
  8. //拿到token
  9. const sunflowerCode = async () => {
  10. let { data } = await axios.get('https://api.weixin.qq.com/cgi-bin/token', {
  11. params: {
  12. grant_type: 'client_credential',
  13. appid: appid,
  14. secret: secret,
  15. },
  16. });
  17. return data;
  18. };
  19. //生成葵花码
  20. const sunflowerCodeImg = async (path, access_token) => {
  21. const { data } = await axios.post(
  22. `https://api.weixin.qq.com/wxa/getwxacode?access_token=${access_token}`,
  23. {
  24. path,
  25. width: 200,
  26. is_hyaline: false,
  27. },
  28. //这个一定要加
  29. { responseType: 'arraybuffer' },
  30. );
  31. return data;
  32. };
  33. //主方法
  34. async SunflowerCodeFun() {
  35. //拿到token
  36. let data = await sunflowerCode();
  37. access_token = data.access_token;
  38. //第一个参数是你需要打开的路径,可以在后面拼参数
  39. let img = await sunflowerCodeImg('pages/home/home?id=1', access_token);
  40. //缓冲区
  41. const buffer = Buffer.from(img, 'base64');
  42. const base64Str = 'data:image/png;base64,' + buffer.toString('base64');
  43. //这里就是结果
  44. console.log(base64Str);
  45. return base64Str;
  46. }
  47. }

为啥发这一文章,一言难尽,主要是二进制流转base64这块,我翻阅了很多很多的文章,关于nodejs生成小程序码的文章少之又少,只能往二进制流转base64去查,但发现生成出来的base64格式图片基本都打不开的,nodejs又使用不了Blob,如果需要去模拟Blob又得整很多不必要的东西。网上查到nodejs基本都是通过buffer缓冲区去转码这个是问题,但是需要在axios参数上加入,这样生成出来的base64才能显示出图片来

{ responseType: 'arraybuffer' },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/779614
推荐阅读
相关标签
  

闽ICP备14008679号