小程序模板网

使用nodejs获取微信小程序带参数二维码

2018-04-17 青牛妪

作者:兴xing0_0,来自原文地址 
由于项目需求,需要获取小程序页面的带有参数的二维码。好,那就看文档搞吧。

之前都是写前端,没有写过后台的东西,这次难得有机会组长让我试一试试用node来写,那就写吧。

1、首页获取token,发送request请求,用get的方式,在url后面加上小程序的grant_type,appid,secret,就顺利拿到token了,注意,这个token是有有效时间的,小程序的是7200秒,也就是2个小时,每天获取的次数有限,需要有个中控服务器定时获取token,由于我的业务量小,就没有对token进行保存了,每次都是重新获取。

2、获取完token之后,再发送请求获取二维码,坑的是,微信没有告诉我们获取的是二进制流,之前一直是写前端的代码,对流没有概念,百度之,谷歌之,折腾了两天,终于搞定。还遇到了express的坑,用原来express的代码,死活生成不了二维码,新建一个express再生成二维码就没问题,莫名其妙的坑。

上代码:

 

					
  1. var fs = require('fs');
  2. var request = require('request');
  3. var wx_conf = require('../../conf/wx_conf');//这里放了微信appid跟appSecret,文件没有引入进来,要用的时候,改一下吧。
  4. var AccessToken = {
  5. grant_type: 'client_credential',
  6. appid: wx_conf.appId,
  7. secret: wx_conf.appSecret
  8. }
  9. var wx_gettoken_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=' + AccessToken.grant_type + '&appid=' + AccessToken.appid + '&secret=' + AccessToken.secret;
  10. //请求二维码的参数
  11. var postData = {
  12. path: "pages/index/index",
  13. width: 430
  14. }
  15. var createQrcode = {
  16. create: function() {
  17. console.log('fn:create');
  18. this.getToken();
  19. },
  20. //获取微信的token
  21. getToken: function() {
  22. console.log('fn:getToken');
  23. var that = this;
  24. new Promise((resolve, reject) => {
  25. console.log('进入Promise方法了');
  26. request({
  27. method: 'GET',
  28. url: wx_gettoken_url
  29. }, function(err, res, body) {
  30. if (res) {
  31. resolve({
  32. isSuccess: true,
  33. data: JSON.parse(body)
  34. });
  35. } else {
  36. console.log (err);
  37. reject({
  38. isSuccess: false,
  39. data: err
  40. });
  41. }
  42. })
  43. }).then(proData => {
  44. that.getQrcode(proData);
  45. });
  46. },
  47. //生成二维码
  48. getQrcode: function(proData) {
  49. console.log ('fn:getQrcode');
  50. if (proData.isSuccess) {
  51. postData = JSON.stringify(postData);
  52. request({
  53. method: 'POST',
  54. url: 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=' + proData.data.access_token,
  55. body: postData
  56. }).pipe(fs.createWriteStream('./public/images/index.png'));//路径自己定义吧
  57. } else {
  58. console.log('Promise请求数据出错');
  59. }
  60. }
  61. }
  62. module.exports = createQrcode;//暴露对象,调用create方法既可以创建二维码  


易优小程序(企业版)+灵活api+前后代码开源 码云仓库:starfork
本文地址:https://www.eyoucms.com/wxmini/doc/course/23526.html 复制链接 如需定制请联系易优客服咨询:800182392 点击咨询
QQ在线咨询