C#微信开发之接收 / 返回文本消息

发布时间 - 2026-01-10 22:52:22    点击率:

接收 / 返回文本消息

①接收/返回文本消息原理说明

当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上,着手开发之前先行阅读微信公众平台接收普通消息微信开发文档,对微信的这种消息处理机制有一定了解之后再着手开发(微信开发接收普通消息开发文档)

注意点:

1、关于重试的消息排重,推荐使用msgid排重。

2、微信服务器在五秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次。假如服务器无法保证在五秒内处理并回复,可以直接回复空串,微信服务器不会对此作任何处理,并且不会发起重试。详情请见“发送消息-被动回复消息”。

3、为了保证更高的安全保障,开发者可以在公众平台官网的开发者中心处设置消息加密。开启加密后,用户发来的消息会被加密,公众号被动回复用户的消息也需要加密(但开发者通过客服接口等API调用形式向用户发送消息,则不受影响)。关于消息加解密的详细说明,请见“消息加解密说明”。

 POST到开发者服务器上边的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>

 接收消息数据包参数说明:

 返回文本消息的XML格式:

 <xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>12345678</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[你好]]></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 name="postStr"></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 name="xmldoc"></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# 调用Win32Api关闭当前应用的方法  # c#使用win32api实现获取光标位置  # C# 执行CMD命令并接收返回结果的操作方式  # C#异步方法返回void与Task的区别详解  # C# DataSet查看返回结果集的实现  # C# ODP.NET 调用Oracle函数返回值时报错的一个解决方案  # C# WebApi 接口返回值不困惑:返回值类型详解  # webBrowser执行js的方法  # 并返回值  # c#后台取值的实现  # c#基于Win32Api实现返回Windows桌面功能  # 数据包  # 自定义  # 重试  # 请见  # 发送消息  # 文档  # 加解密  # 客服  # 推荐使用  # 其他的  # 有一定  # 没办法  # 不受  # 更高  # 详细说明  # 可以直接  # 要将  # 转化为  # 官网  # 安全保障 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在阿里云虚拟主机上快速搭建个人网站?  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  详解Android中Activity的四大启动模式实验简述  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Laravel Docker环境搭建教程_Laravel Sail使用指南  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  5种Android数据存储方式汇总  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  如何在Tomcat中配置并部署网站项目?  如何快速搭建安全的FTP站点?  canvas 画布在主流浏览器中的尺寸限制详细介绍  详解jQuery停止动画——stop()方法的使用  Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】  Bootstrap CSS布局之列表  太平洋网站制作公司,网络用语太平洋是什么意思?  再谈Python中的字符串与字符编码(推荐)  微信h5制作网站有哪些,免费微信H5页面制作工具?  Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  Java遍历集合的三种方式  JavaScript如何操作视频_媒体API怎么控制播放  活动邀请函制作网站有哪些,活动邀请函文案?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  Laravel观察者模式如何使用_Laravel Model Observer配置  制作公司内部网站有哪些,内网如何建网站?  Laravel集合Collection怎么用_Laravel集合常用函数详解  长沙企业网站制作哪家好,长沙水业集团官方网站?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  bing浏览器学术搜索入口_bing学术文献检索地址  js实现获取鼠标当前的位置  EditPlus 正则表达式 实战(3)  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  如何快速搭建虚拟主机网站?新手必看指南  jquery插件bootstrapValidator表单验证详解  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  如何在 React 中条件性地遍历数组并渲染元素  Laravel怎么使用Intervention Image库处理图片上传和缩放  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  网站制作壁纸教程视频,电脑壁纸网站?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  Laravel如何实现用户注册和登录?(Auth脚手架指南)  如何获取上海专业网站定制建站电话?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  Laravel如何为API生成Swagger或OpenAPI文档