袁洪盛的个人博客
Node.js生成没有限制的微信小程序菊花码
发布于 2023年7月12日热度 160
首先安装 express request-promise 两个库
var express = require('express');
var app = express();
var request = require('request-promise');
var fs = require('fs');
app.use(express.static('./')); //设置访问静态资源
app.get('/',function(req,res){
res.send('hello world');
})
var appid = 'appid ', appsecret = 'appsecret'; //小程序的APPID和APPsecret
var time2 = 0,access_token = '';
app.get('/api/getcode',function(req,res){ //获取access_token
const scene = req.query.scene
var time1 = (new Date()).getTime();
if(!time2 && (time1-time2)>7000){ //如果access_token过期了重新请求获取
const url = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appid}&secret=${appsecret}`
request(url,function(error,response,body){
if(!error && response.statusCode == 200){ //请求成功处理逻辑
var data = JSON.parse(body);
time2 = (new Date()).getTime();
access_token = data.access_token;
getwxcode(res,access_token,scene); //获取二维码
}
})
}else{ //没过期直接获取access_token
getwxcode(res,access_token,scene); //获取二维码
}
})
async function getwxcode(res,access_token,scene){ //通过access_token获取小程序二维码
var postData = {
path: "pages/index/index",//二维码默认打开小程序页面
scene,//打开页面时携带的参数
width: 300,
auto_color: false
}
const url = `https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=${access_token}`
const options = {
method: 'POST',
url: url,
encoding: null,
body: postData,
json: true
};
//生成静态图片
const result = request(options).pipe(fs.createWriteStream(`images/code${scene}.png`)); // 通过 fs.createWriteStream 将二进制流数据转为图片
res.json({stasus:true,imgurl:result.path});
//生成base64图片
let result = await request(options);
res.json({stasus:true,imgurl:`data:image/png;base64,${result.toString('base64')}`});
}
var server = app.listen(8081,function(){
var host = server.address().address;
var port = server.address().port;
console.log('应用实例,访问地址为:http://%s:%s',host,port);
})
最后展示效果