开始之前,我们先说一下今天的思路:
当用户关注或者发送消息的时候,微信服务器会给我们发送一个post请求,把用户的信息以及发送信息返回给我们,我们根据用户发送的信息再把相应的内容发送到微信服务器。
整体的思路还是非常清晰的,但是有个问题比较麻烦,就是微信返回和接收的数据格式都是xml,所以我们要对xml进行转换。所以在今天我们会引入几个新的模块。
先在app.js文件中,创建一个post的中间件,来接收服务器发送的请求和数据。
app.post("/", (req,res, next)=> {
wechat.autoMsg(req, res, next);
})
然后,我们在wechat.js中添加autoMsg方法。
var parseString = require('xml2js').parseString;
WeChat.prototype.autoMsg = function(req, res, next) {
var buffer = [],
that = this;
req.on('data',function(data){
buffer.push(data);
});
req.on('end',function(){
var msgXml = Buffer.concat(buffer).toString('utf-8');
parseString(msgXml,{explicitArray : false},function(err,result){
// 如果有错误直接抛出
if(err) throw err;
result = result.xml;
var toUser = result.ToUserName;
var fromUser = result.FromUserName;
// 判断消息类型
if(result.MsgType === "event") {
// 关注微信公众号
if(result.Event === "subscribe") {
var resultXml = "<xml><ToUserName><![CDATA["+ fromUser +"]]></ToUserName>";
resultXml += "<FromUserName><![CDATA["+ toUser +"]]></FromUserName>";
resultXml += "<CreateTime>"+ new Date().getTime() +"</CreateTime>";
resultXml += "<MsgType><![CDATA[text]]></MsgType