nodejs获取微信小程序带参数二维码实现代码


Posted in NodeJs onApril 12, 2017

nodejs获取微信小程序带参数二维码实现代码

由于项目需求,需要获取小程序页面的带有参数的二维码。好,那就看文档搞吧。

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

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

2、获取完token之后,再发送请求获取二维码,坑的是,微信没有告诉我们获取的是二进制流,之前一直是写前端的代码,对流没有概念,百度之,谷歌之,折腾了两天,终于搞定。还遇到了express的坑,用原来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方法既可以创建二维码

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

NodeJs 相关文章推荐
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
Sep 26 NodeJs
NodeJS学习笔记之Connect中间件模块(二)
Jan 27 NodeJs
NodeJS Web应用监听sock文件实例
Feb 18 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
Nodejs Stream 数据流使用手册
Apr 17 NodeJs
nodejs操作mysql实现增删改查的实例
May 28 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
详解使用vscode+es6写nodejs服务端调试配置
Sep 21 NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 NodeJs
在nodejs中创建child process的方法
Jan 26 NodeJs
详解nodejs微信公众号开发——5.素材管理接口
Apr 11 #NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 #NodeJs
nodejs连接mysql数据库简单封装示例-mysql模块
Apr 10 #NodeJs
详解nodejs操作mongodb数据库封装DB类
Apr 10 #NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 #NodeJs
详解nodejs微信公众号开发——2.自动回复
Apr 10 #NodeJs
详解nodejs微信公众号开发——1.接入微信公众号
Apr 10 #NodeJs
You might like
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
php db类库进行数据库操作
2009/03/19 PHP
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
php nginx 实时输出的简单实现方法
2018/01/21 PHP
PHP 文件写入和读取操作实例详解【必看篇】
2019/11/04 PHP
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
js实现将选中内容分享到新浪或腾讯微博
2015/12/16 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
JS扩展类,克隆对象与混合类实例分析
2016/11/26 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
如何将 jQuery 从你的 Bootstrap 项目中移除(取而代之使用Vue.js)
2017/07/17 jQuery
nodejs动态创建二维码的方法
2017/08/12 NodeJs
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
jquery动态添加以及遍历option并获取特定样式名称的option方法
2018/01/29 jQuery
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
解决vue 退出动画无效的问题
2020/08/09 Javascript
python库lxml在linux和WIN系统下的安装
2018/06/24 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
Python对切片命名的实现方法
2018/10/16 Python
python 发送json数据操作实例分析
2019/10/15 Python
浅谈python print(xx, flush = True) 全网最清晰的解释
2020/02/21 Python
澳大利亚拥有最佳跳伞降落点和最好服务的跳伞项目运营商:Skydive Australia
2018/03/05 全球购物
linux面试题参考答案(5)
2014/09/01 面试题
群众路线教育实践活动方案
2014/02/02 职场文书
2014年两会学习心得体会
2014/03/10 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
物业工程部经理岗位职责
2015/04/09 职场文书
最美劳动诗,致敬所有的劳动者!
2019/07/12 职场文书
JAVA springCloud项目搭建流程
2022/05/11 Java/Android