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);
})

最后展示效果

1690019050357.png