这里有新鲜出炉的 7 天学会 Node.js,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
这篇文章主要介绍了 nodejs 获取微信小程序带参数二维码实现代码的相关资料, 需要的朋友可以参考下
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方法既可以创建二维码
来源: http://www.phperz.com/article/17/0510/334112.html