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

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

当有用户向公众号发送消息的时候,微信会向我们的借口以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消息创建时间 (整型)
MsgTypetext
Content文本消息内容
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消息创建时间 (整型)
MsgTypetext
Content回复的消息内容(换行:在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");
            }

        }


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值