nodejs死亡笔记之实战篇---微信公众号的开发(2)

原创 2016年08月31日 11:38:52

本篇文章继续讲解微信公众号的开发(不使用第三方微信开发模块)

接收消息

  
  在接收消息之前,我们还需要验证与微信平台的签名,上一篇文章已经讲过了,这里不在详述。现在就来讲解一下接收微信平台的消息。在签名认证以后,我们就可以接收消息了。在index.js的app.post方法中添加以下功能。

  • 签名认证;
  • 认证成功后,接收消息;
  • 解析消息
  • 回复消息(文本,图片……)

接收消息的代码如下:

var post_data="";
req.on("data",function(data){post_data=data;});
req.on("end",function(){
var xmlStr=post_data.toString('utf-8',0,post_data.length);
//解析消息代码
//回发消息代码
});

上面代码中的xmlStr就是我们收到的微信平台发过来的消息。

解析消息

在解析消息之前,我们需要在index.js中引入一个解析消息的模块node-xml,通过该模块来解析消息。

var xml=require('node-xml');

如果我们发送给微信平台的消息为文本消息,则收到的消息格式如下:

 <xml>
 <ToUserName><![CDATA[toUser]]></ToUserName>
 <FromUserName><![CDATA[fromUser]]></FromUserName> 
 <CreateTime>1348831860</CreateTime>
 <MsgType><![CDATA[text]]></MsgType>
 <Content><![CDATA[this is a test]]></Content>
 <MsgId>1234567890123456</MsgId>
 </xml>

这里写图片描述

然后我们就通过node-xml模块来解析,解析的代码如下:

// 定义解析存储变量
var ToUserName="";
var FromUserName="";
var CreateTime="";
var MsgType="";
var Content="";
var tempName="";
//开始解析消息
var parse=new xml.SaxParser(function(cb){
    cb.onStartElementNS(function(elem,attra,prefix,uri,namespaces){
         tempName=elem;
    });
    cb.onCharacters(function(chars){
        chars=chars.replace(/(^\s*)|(\s*$)/g, "");
        if(tempName=="CreateTime"){
            CreateTime=chars;
        }
    });
    cb.onCdata(function(cdata){
            if(tempName=="ToUserName"){
                ToUserName=cdata;
            }else if(tempName=="FromUserName"){
                FromUserName=cdata;
            }else if(tempName=="MsgType"){
                MsgType=cdata;
            }else if(tempName=="Content"){
                Content=cdata;
            }
            console.log(tempName+":"+cdata);
        });
   cb.onEndElementNS(function(elem,prefix,uri){
         tempName="";
   });
   cb.onEndDocument(function(){
          //按收到的消息格式回复消息
   });
});
 parse.parseString(xmlStr);

通过以上代码的实现,这样收到的消息就解析完成了。 大家想了解更多收到数据的格式,请查看微信平台的官方文档

发送消息

根据前一节中我们解析出来的内容,然后对应组织我们的发送数据包,数据包格式如下:

<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></Content>
</xml>

 关于更多被动回复数据格式请查看微信官方文档

回复文本消息的代码如下:

CreateTime=parseInt(new Date().getTime() / 1000);
var msg="";
if(MsgType=="text"){
   msg="谢谢关注,你说的是:"+Content;
   //组织返回的数据包
    var sendMessage=' ' +
                '<xml>' +
                '<ToUserName><![CDATA['+FromUserName+']]></ToUserName>' +
                '<FromUserName><![CDATA['+ToUserName+']]></FromUserName>' +
                '<CreateTime>'+CreateTime+'</CreateTime>' +
                '<MsgType><![CDATA[text]]></MsgType>' +
                '<Content><![CDATA['+msg+']]></Content>' +
                '</xml>';s.send(sendMessage);
}

好了,这样我们的服务端就完成了,点击【提交运行】。现在拿起手机,扫描二维码关注我们的微信公众号,发送消息,看一看结果吧。


  关于其它消息的回复,按照微信官方说明组织数据包进行回复就可以了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

nodejs死亡笔记之实战篇---微信公众号的开发(1)

本篇文章将利用express框架进行微信公众号的开发。
  • qq_31655965
  • qq_31655965
  • 2016年08月30日 19:23
  • 1664

微信公众号开发及NodeJS+Express技术栈,出坑笔记一

http://blog.csdn.net/zzwwjjdj1
  • sinat_30975247
  • sinat_30975247
  • 2017年11月05日 21:37
  • 326

图解微信公众号后台服务开发(nodejs版)

关于微信公众号开发的文章到处都是,基于nodejs的代码也不少,但是微信公众号给出的开发者文档接口虽然全却不细致,难免需要花费一些时间去测试确认,这里总结下最近基于nodejs的微信公众号后台服务开发...
  • IMWebteam
  • IMWebteam
  • 2016年11月23日 20:27
  • 4837

基于Nodejs构建属于自己的微信公众号

微信,庞大的用户基数,极强的用户粘性,在近两年吸引了无数的开发者注意力。 Nodejs,近两年发展非常快的开发工具,尤其适合构建移动后台。本文就以笔者自己开发的实例,来描述如何基于Nodejs开发属于...
  • VirtualPower
  • VirtualPower
  • 2014年08月22日 11:32
  • 5367

NodeJs开发微信公众号

nicely-weixin的Githut地址当时在要用到微信时也百度过别的东西,看到有weiixn-api,node-weixin等等一些很多的东西,但都觉得他们写得太死不够灵活,里面的方法和属性完全...
  • victantemp
  • victantemp
  • 2015年11月13日 11:55
  • 878

7天搞定Node.js微信公众号开发

TB2CqwscY5K.eBjy0FfXXbApVXa_!!717644871.png (170.55 KB, 下载次数: 0) 下载附件 前天 13:35 上传 ...
  • u013948190
  • u013948190
  • 2016年12月16日 16:02
  • 2683

微信公众号开发笔记(一)

将内网地址映射到外网好几个月没有做微信开发了,发现 ngrok 这个工具已经不好用了。所以就换用 nat123 。使用 nat123 要注意一点:免费版本的只支持 80 端口的映射。如图: 所以,我...
  • lw_power
  • lw_power
  • 2015年08月17日 22:58
  • 1145

NodeJS微信公众平台开发

微信是手机用户必备的App,微信最开始只是作为社交通讯应用供用户使用,但随着用户量不断的增加,微信的公众号在微信上表现出来了它强大的一面,微信公众平台具有四大优势:1、平台更加稳固;2.用户关系更加平...
  • villainy13579
  • villainy13579
  • 2015年07月31日 10:09
  • 3078

nodejs微信公众号开发第一步(接入指南)--wechat模块

nodejs微信公众号开发第一步(接入指南)--wechat模块
  • zzwwjjdj1
  • zzwwjjdj1
  • 2016年08月31日 10:36
  • 9275

java_微信公众号开发笔记

服务器配置Url:用于接收微信服务器回调http://www.*****.com/wxProcess.servlet  在web.xml中配置 wxProcessServlet com.o...
  • ToSweetSmiles
  • ToSweetSmiles
  • 2016年02月18日 17:15
  • 816
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nodejs死亡笔记之实战篇---微信公众号的开发(2)
举报原因:
原因补充:

(最多只允许输入30个字)