dotNet微信公众号开发二:接收并回复普通文字消息

来源:互联网 发布:萌叔装机 知乎 编辑:程序博客网 时间:2024/04/29 15:09

上一篇做好了基本配置之后,现在可以学习如何回复消息了。

当有用户向公众号发送消息的时候,微信会向我们的借口以POST的方式推送消息。以普通文本为例,消息格式如下:

<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>

含义如下:

参数描述ToUserName开发者微信号FromUserName发送方帐号(一个OpenID)CreateTime消息创建时间 (整型)MsgTypetextContent文本消息内容MsgId消息id,64位整型

当我们的服务器收到这样的消息的时候,就可以进行响应,可以回复文本、图片、图文、语音、视频、音乐等等。

继续以文本消息为例,我们要回复的消息格式如下:

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

参数是否必须描述ToUserName是接收方帐号(收到的OpenID)FromUserName是开发者微信号CreateTime是消息创建时间 (整型)MsgType是textContent是回复的消息内容(换行:在content中能够换行,微信客户端就支持换行显示)

可以看到,回复的消息和收到的消息刚好对起止用户进行了颠倒。另外,用户发来的消息里面包含有MsgId,因为微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。


下面贴一段简单的示例代码:

public void Index()        {            //微信服务器一直把用户发过来的消息,post过来            if (Request.HttpMethod == "POST")            {                var reader = XmlReader.Create(Request.InputStream);                var doc = XDocument.Load(reader);                var xml = doc.Element("xml");                string requestFromUserID = xml.Element("FromUserName").Value;                string requestToUserID = xml.Element("ToUserName").Value;                string strRespose = "<xml>";                        strRespose += "<ToUserName><![CDATA[{0}]]></ToUserName>";                strRespose += "<FromUserName><![CDATA[{1}]]></FromUserName>";                strRespose += "<CreateTime>{2}</CreateTime>";                strRespose += "<MsgType><![CDATA[text]]></MsgType>";                strRespose += "<Content><![CDATA[{3}]]></Content>";                strRespose += "</xml>";                Response.Write(string.Format(strRespose, requestFromUserID, requestToUserID, DateTime.Now.ToBinary(), "感谢您回复消息!"));            }            else if (Request.HttpMethod == "GET") //微信服务器在首次验证时,需要进行一些验证,但。。。。            {                if (string.IsNullOrEmpty(Request["echostr"]))                {#if DEBUG                    Response.Write("无法获取微信接入信息,仅供测试!");#endif                    return;                }                Response.Write(Request["echostr"].ToString());            }            else            {                // 这里不正确                Response.Write("wrong");            }        }


这是个最简单的示例,用户回复消息之后就会收到 "感谢您回复消息!"的回复,效果如下:


0 0
原创粉丝点击