文章目录:
1.Node.js 接入微信公众平台开发
2.Node.js access_token的获取、存储及更新
3.Node.js 自定义微信菜单
4.Node.js 微信消息管理
一、写在前面的话
当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应。
消息推送也是微信公众号开发更为有趣的功能,涉及到文本消息、图片消息、语音消息、视频消息、音乐消息以及图文消息。并且最为有趣的功能当属消息加解密了,当然由于篇文章篇幅的原因我会在下一篇文章中去着重说明。
二、微信消息管理
1.捕获消息信息
在文章的第一句话中,为我们指明了微信消息产生的请求方式为 POST,因此首先我们就去对 Node.js 的 Post 请求进行监听。
在我们的 app.js 文件中添加一个POST监听,并将获取的结果输出:
//用于处理所有进入 3000 端口 post 的连接请求
app.post('/',function(req,res){
var buffer = [];
//监听 data 事件 用于接收数据
req.on('data',function(data){
buffer.push(data);
});
//监听 end 事件 用于处理接收完成的数据
req.on('end',function(){
//输出接收完成的数据
console.log(Buffer.concat(buffer).toString('utf-8'));
});
});
随后将 Node.js 启动后映射至外网,关注我们的微信公众号,在控制台中则会看到:
打开 微信帮助文档 ,点击左侧菜单的消息管理,选择其子菜单 接收事件推送,如图:
从上图我们不难看出,微信 接收事件推送 确实很多,而我们最终目标是要实现,在用户触发事件时返回其相应的回复消息。因此我们总结一下我们要实现的步骤:
- 解析 XML ,使用 Event 参数判断事件类型
- 返回相应的事件信息
总结完实现步骤后,我们就开始动手实现第一个被动回复消息吧。
2.以关注事件为例,实现第一个被动回复
解析 XML 我这里使用了 第三方的包 xml2js(npm install xml2js ),并在 wechat.js 中引入。
parseString = require('xml2js').parseString;//引入xml2js包
为 WeChat 对象添加一个消息处理的方法 handleMsg,将 app.js 中捕获 POST 实现的写入在其代码块中,并使用 xml2js 解析,代码如下
/**
* 微信消息
*/
WeChat.prototype.handleMsg = function(req,res){
var buffer = [];
//监听 data 事件 用于接收数据
req.on('data',function(data){
buffer.push(data);
});
//监听 end 事件 用于处理接收完成的数据
req.on('end',function(){
var msgXml = Buffer.concat(buffer).toString('utf-8');
//解析xml
parseString(msgXml,{explicitArray :