本文微信开发之接收 / 返回文本消息原理与实现方法,具有一定的参考价值,下面跟着小编一起来看下吧
接收 / 返回文本消息
①接收/返回文本消息原理说明
当普通微信用户向公众账号发消息时,微信服务器将POST消息的数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息微信开发文档,对微信的这种消息处理机制有一定了解之后再着手开发(微信开发接收普通消息开发文档)
注意点:
1、关于重试的消息排重,推荐使用msgid排重。
2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“-被动回复消息”。
3、为了保证更高的保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服等调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“消息加解密说明”。
POST到开发者服务器上边的XML格式为:
<xml> <tousername></tousername> <fromusername></fromusername> <createtime>1348831860</createtime> <msgtype></msgtype> <content></content> <msgid>1234567890123456</msgid> </xml>
登录后复制
数据包参数说明:

返回文本消息的XML格式:
<xml><tousername></tousername><fromusername></fromusername><createtime>12345678</createtime><msgtype></msgtype><content></content></xml>
登录后复制
返回文本消息数据包参数说明:

②接收/返回文本消息代码实现
开发者在自己服务器上边接收微信服务器POST过来的XML数据包接收代码如下:
if(IsPostBack)
{
//*********************************自动应答代码块*********************************
string postString = string.Empty;
using (Stream stream = HttpContext.Current.Request.InputStream)
{
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, 0, (Int32)stream.Length);
//接收的消息为GBK格式
postString = Encoding.GetEncoding("GBK").GetString(postBytes);
string responseContent = help.ReturnMessage(postString );
//返回的消息为UTF-8格式
HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
HttpContext.Current.Response.Write(responseContent);
}
//********************************自动应答代码块end*******************************
}
登录后复制
注意:接收消息的时候要将消息格式转化为“GBK”格式,否则后边进行消息解析的时候没办法进行有效解析。
ReturnMessage()处理方法代码如下:
/// <summary>
/// 统一全局返回消息处理方法
/// </summary>
/// <param>
/// <returns></returns>
public string ReturnMessage(string postStr)
{
string responseContent = "";
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(new System.IO.MemoryStream(System.Text.Encoding.GetEncoding("GB2312").GetBytes(postStr)));
XmlNode MsgType = xmldoc.SelectSingleNode("/xml/MsgType");
if (MsgType != null)
{
switch (MsgType.InnerText)
{
case "event":
responseContent = EventHandle(xmldoc);//菜单事件处理
break;
case "text":
responseContent = TextHandle(xmldoc);//文本消息处理
break;
default:
break;
}
}
return responseContent;
}
登录后复制
TextHandle(xmldoc)处理方法代码如下:
/// <summary>
/// 接受文本消息并回复自定义消息
/// </summary>
/// <param>
/// <returns></returns>
public string TextHandle(XmlDocument xmldoc)
{
string responseContent = "";
XmlNode ToUserName = xmldoc.SelectSingleNode("/xml/ToUserName");
XmlNode FromUserName = xmldoc.SelectSingleNode("/xml/FromUserName");
XmlNode Content = xmldoc.SelectSingleNode("/xml/Content");
if (Content != null)
{
if (Content.InnerText == "指定回复消息的自定义文本")
{
responseContent = string.Format(XMLTemplate.Message_Text,
FromUserName.InnerText,
ToUserName.InnerText,
DateTime.Now.Ticks,
"自定义回复消息内容");
}
}
return responseContent;
}
登录后复制
到这里实现功能的代码演示已完毕,后边其他的消息处理模式也是根据这种方式在做交互,比如:接收/回复文本消息、消息、语音消息、消息、小视频消息、地理位置消息、链接消息等都可以参照以上代码进行功能实现。
以上就是C#微信开发之接收 / 返回文本消息原理与实现方法的详细内容,更多请关注米云其它相关文章!
