Node.js 实现微信小程序带参数二维码生成

作者:岩茶时间:2026-10-22 03:00:44浏览:182

本文介绍如何使用 Node.js 后端服务生成微信小程序带参数二维码。主要步骤包括通过 AppID 和 Secret 获取 Access Token,随后调用接口生成二进制流格式的二维码图片。文中提及了 Token 有效期管理及在 Express 环境中可能遇到的兼容性问题,并提供了核心代码实现参考。

Node.js 生成微信小程序带参数二维码

Node.js 实现微信小程序带参数二维码生成代码

根据项目需求,我们需要获取带有特定参数的小程序页面二维码。因此,查阅官方文档成为首要任务。

以往主要开发前端业务,此次首次尝试使用 Node.js 编写后端逻辑,由组长安排进行实践。

获取 Access Token

第一步是获取 Access Token。通过发送 GET 请求,在 URL 中拼接 grant_type、appid 和 secret 参数,即可成功获取 Token。需注意,小程序的 Token 有效期为 7200 秒(即 2 小时),且每日获取次数有限。对于业务量较小的场景,未采用中控服务器定时刷新并缓存 Token 的策略,而是每次请求时重新获取。

生成二维码及注意事项

获取 Token 后,即可发起请求以生成二维码。需要注意的是,微信接口返回的是二进制流数据,此前缺乏前端开发经验,对二进制流处理不熟悉,经过查阅资料及调试才解决该问题。此外,在 Express 框架的使用中也遇到了一些异常,原有代码无法生成二维码,而新建的 Express 项目则能正常运行,具体原因未明。

具体实现代码如下:


var fs = require('fs'); 
var request = require('request'); 
var wx_conf = require('../../conf/wx_conf');//这里放了微信appid跟appSecret,文件没有引入进来,要用的时候,改一下吧。 
var AccessToken = { 
 grant_type: 'client_credential', 
 appid: wx_conf.appId, 
 secret: wx_conf.appSecret 
} 
var wx_gettoken_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=' + AccessToken.grant_type + '&appid=' + AccessToken.appid + '&secret=' + AccessToken.secret; 
//请求二维码的参数 
var postData = { 
 path: "pages/index/index", 
 width: 430 
} 
var createQrcode = { 
 create: function() { 
  console.log('fn:create'); 
  this.getToken(); 
 }, 
 //获取微信的token 
 getToken: function() { 
  console.log('fn:getToken'); 
  var that = this; 
  new Promise((resolve, reject) => { 
   console.log('进入Promise方法了'); 
   request({ 
    method: 'GET', 
    url: wx_gettoken_url 
   }, function(err, res, body) { 
    if (res) { 
     resolve({ 
      isSuccess: true, 
      data: JSON.parse(body) 
     }); 
    } else { 
     console.log (err); 
     reject({ 
      isSuccess: false, 
      data: err 
     }); 
    } 
   }) 
  }).then(proData => { 
   that.getQrcode(proData); 
  }); 
 }, 
 //生成二维码 
 getQrcode: function(proData) { 
  console.log ('fn:getQrcode'); 
  if (proData.isSuccess) { 
   postData = JSON.stringify(postData); 
   request({ 
    method: 'POST', 
    url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=' + proData.data.access_token, 
    body: postData 
   }).pipe(fs.createWriteStream('./public/images/index.png'));//路径自己定义吧 
  } else { 
   console.log('Promise请求数据出错'); 
  } 
 } 
} 
module.exports = createQrcode;//暴露对象,调用create方法既可以创建二维码 

感谢阅读,希望本文内容能对大家有所帮助,感谢支持。

作者最新文章