nodejs 实现微信公众号自定义菜单、关注回复、自定义回复

借鉴了多位前辈的文章,总结出自己能看懂的结构与代码。
1.基本结构图
在这里插入图片描述
2.config.js代码

//配置参数
config = {	
  token : 'wechat',
  appid : 'wx0917xxxxxxx5ba63',
  appsecret :'7d0bexxxxxxxxbd2dd1a6'  	
}

module.exports = config   //暴露模块,才能在其它地方调用

3.wechat.js代码

var express = require('express');
var router = express.Router();
var wechat = require('wechat');
var config=require('../config.js');
var request = require("request");
const querystring = require("querystring");

router.use(express.query()); 
router.use('/', wechat(config, function(req, res, next) {
	console.log(req.weixin);
	var message = req.weixin;

    // 1.1获取access_token
	request({
		timeout: 5000, // 设置超时
		method: 'GET', //请求方式
		url: 'https://api.weixin.qq.com/cgi-bin/token', 
		qs: { //参数,注意get和post的参数设置不一样 
			grant_type: "client_credential",
			appid: config.appid,
			secret: config.appsecret
		}	 
	}, 
	function(error, response, body) {
		if(!error && response.statusCode == 200) {
			console.log(body);
			body = JSON.parse(body);
			if(body.access_token) {
				var token = body.access_token;
				setItem(token);
			}
		} else {
			console.log("error");
		}
	});	
	// 1.2定义菜单 
	var btn = {
		"button": [{  //一级菜单
				"type": "click",
				"name": "今日歌曲",				
				"key": "V1001_TODAY_MUSIC"
			},
			{
				"name": "菜单",
				"sub_button": [{  //二级菜单
					"type": "view",
					"name": "搜狗",
					"url": "http://www.soso.com/"
				},
				{
					"type": "view",
					"name": "百度",
					"url": "https://www.baidu.com/"
				},
				{
					"type": "click",
					"name": "赞一下我们",
					"key": "V1001_GOOD"
				}]
			}
		]
	} 
	// 1.3加载自定义菜单 ,非个人主体公众号才有此权限。个人主体可用测帐号的appid,secret来实现自定义菜单。
	function setItem(token) { 
		request({
			timeout: 5000, // 设置超时
			method: 'POST', //请求方式
			url: 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token=' + token, 
			headers: {'Content-Type': 'application/x-www-form-urlencoded'},
			form: JSON.stringify(btn)
			}, 
			function(error, response, body) {
				if(!error && response.statusCode == 200) {
					console.log(body);                 
				} else {
					console.log("error");
				}
			}	
		)
	}

    // 2.关注后发送消息
	if((message.MsgType == 'event') && (message.Event == 'subscribe')) {	
		var refillStr = "<a href=\"https://www.baidu.com\" >1. 打开百度</a>"		
		var consumeStr = "<a href=\"http://your_IP/weixin/consume?weixinId=" + message.FromUserName + "\">2. 点击记录团队消费</a>" 
		var deleteStr = "<a href=\"http://your_IP/weixin/delete?weixinId=" + message.FromUserName + "\">3. 点击回退记录</a>" 
		var historyStr = "<a href=\"http://your_IP/weixin/history?weixinId=" + message.FromUserName + "\">4. 点击查询历史记录</a>"		
		var emptyStr = "          ";				
		var replyStr = "感谢你的关注!" + "\n"+ emptyStr + "\n" + refillStr + "\n"+ emptyStr + "\n" + consumeStr + "\n"+ emptyStr + "\n" + deleteStr + "\n"+ emptyStr + "\n" + historyStr;
		res.reply(replyStr);
	}
	
	// 3.自定义回复消息
	if (message.Content === '1') { 
		res.reply('一生一世');
	}
	if (message.Content === '2') {
		res.reply('二人世界');
	}
	if (message.Content === '3') {
		res.reply('三心两意');
	}
	if (message.Content === '4') {
		res.reply('四通八达');
	}	
	if (message.Content === '5') {
		res.reply('五湖四海');
	}
	if (message.Content === '6') {
		res.reply('六畜兴旺');
	}
	if (message.Content === '7') {
		res.reply('七上八下');
	}
	if (message.Content === '8') {
		res.reply('八仙过海');
	}
	if (message.Content === '9') {
		res.reply('九牛二虎');
	}
	if (message.Content === '0') {
		res.reply('零零星星');
	}

 
}));
 
module.exports = router;
  1. app.js代码
var express=require('express')
var app=express()
var API = require('wechat-api')
var config=require('./config.js')
var wechat=require('./routes/wechat.js') //路由路径


app.use('/wechat',wechat) //进入路由。  
// '/wechat' 对应公众号后台基本配置-服务器配置-服务器地址 https://www.xxxxxxx.com/wechat



app.listen(1234);
console.log('服务开启成功--127.0.0.1:1234')

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值