Node开发微信公众号(2)——微信回复

开始之前,我们先说一下今天的思路:

当用户关注或者发送消息的时候,微信服务器会给我们发送一个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
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值