千家信息网

如何处理微信公众号开发中的消息与事件

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要为大家展示了"如何处理微信公众号开发中的消息与事件",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何处理微信公众号开发中的消息与事件"这篇文章
千家信息网最后更新 2026年11月01日如何处理微信公众号开发中的消息与事件

这篇文章主要为大家展示了"如何处理微信公众号开发中的消息与事件",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"如何处理微信公众号开发中的消息与事件"这篇文章吧。


1 消息(事件)概况

当普通微信用户向公众号发消息或者微信服务器向公众号推送事件时,微信服务器将POST消息(事件)的XML数据包到开发者填写的公众号服务器URL上;公众号服务器然后对消息作出响应。
1.1 消息的流转过程
为了便于区分,我们将微信服务器发往公众号服务器的消息称为请求(Request)消息;将公众号服务器发往微信服务器的消息称为响应(Response)消息;将推送事件看成特殊的请求消息。
请求与响应消息的流转过程如下图所示:

1.2 请求消息
请求消息有很多种,我们为其一一建立了对应的类,类层次结构如下图所示:

有些请求消息,我们可以做出响应,有些则不能,详见下表:

消息类型是否事件能够被动回复备注
文本×√
图片×√
声音×√
视频×未知接收不到视频消息,不知道是否能被动回复
地理位置×√
链接×√
订阅√√
取消订阅√×
扫描二维码√×
上报地理位置√×
点击菜单拉取消息√√
点击菜单跳转链接√×
点击菜单扫码推√×
点击菜单扫码等待回复√√
点击菜单系统发图√未知接收不到系统发图事件;微信服务器会发送图片消息,可回复
点击菜单拍照或相册发图√×微信服务器会发送图片消息,可回复
点击菜单微信发图√×微信服务器会发送图片消息,可回复
点击菜单选择地理位置√×微信服务器会发送地理位置消息,可回复
推送群发消息结果√×
推送发送模板消息结果√×

1.3 响应消息
响应消息的类层次结构如下图所示:


2 验证消息的真实性
公众号服务器接收到微信服务器的请求之后,第一件事情是验证消息的真实性。
Utility.CheckSignature方法用于验证消息签名是否正确。
示例如下:

///     /// 验证消息的有效性    ///     ///     /// 如果消息有效,返回true;否则返回false。    private bool Validate(HttpContext context)    {        string username = RequestEx.TryGetQueryString("username");  //在接口配置的URL中加入了username参数,表示哪个微信公众号        AccountInfo account = AccountInfoCollection.GetAccountInfo(username);        if (account == null)            return false;        string token = account.Token;        string signature = RequestEx.TryGetQueryString("signature");        string timestamp = RequestEx.TryGetQueryString("timestamp");        string nonce = RequestEx.TryGetQueryString("nonce");        if (string.IsNullOrWhiteSpace(signature) || string.IsNullOrWhiteSpace(timestamp) || string.IsNullOrWhiteSpace(nonce))            return false;        return xrwang.weixin.PublicAccount.Utility.CheckSignature(signature, token, timestamp, nonce);    }验证消息真实性

验证消息真实性

3 解析消息

如果消息签名通过验证,我们需要将XML格式的消息文本解析成请求消息对象,RequestMessageHelper类用于完成这项工作。

RequestMessageHelper helper = new RequestMessageHelper(context.Request);if(helper.Message != null){    //消息解析成功,对它进行处理}

消息解析成功之后,helper.Message为消息基类RequestBaseMessage,我们可以根据属性MsgType及Event判断到底是哪种消息(事件),并转换成适当的子类型。例如:

RequestBaseMessage bm=helper.Message;switch(bm.MsgType){    case RequestMessageTypeEnum.text:  //文本消息        HandleTextMessage((RequestTextMessage)bm);        break;    case RequestMessageTypeEnum.image: //图片消息        HandleImageMessage((RequestImageMessage)bm);        break;    //处理其他消息    case RequestMessageTypeEnum.event:    //事件        RequestEventMessage ev=(RequestEventMessage)bm;        switch(ev.Event)        {            case RequestEventTypeEnum.subscribe:    //订阅                HandleSubscribeMessage((RequestSubscribeMessage)ev);                break;            case RequestEventTypeEnum.unsubscribe:    //取消订阅                HandleUnsubscribeMessage((RequestUnsubscribeMessage)ev);                break;            //处理其他事件        }        break;    default:        break;}

解析消息的细节请参看源代码:http://git.oschina.net/xrwang2/xrwang.weixin.PublicAccount/blob/master/PublicAccount/RequestMessage/RequestMessageHelper.cs

4 被动回复消息
从微信服务器接收到消息(事件)之后,我们可以在5秒之内直接(被动)回复消息;也可以先直接回复空字符串,然后再在48小时内回复客服消息。
先初始化ResponseXxxMessage,然后用ToXml方法得到响应消息内容。
被动回复消息的示例如下:

///     /// 处理微信的POST请求    ///     ///     /// 返回xml响应    private string HandlePost(HttpContext context)    {        RequestMessageHelper helper = new RequestMessageHelper(context.Request);        if (helper.Message != null)        {            ResponseBaseMessage responseMessage = HandleRequestMessage(helper.Message);            return responseMessage.ToXml(helper.EncryptType);        }        else            return string.Empty;    }    ///     /// 处理请求消息,返回响应消息    ///     /// 返回响应消息    private ResponseBaseMessage HandleRequestMessage(RequestBaseMessage requestMessage)    {        ResponseTextMessage response = new ResponseTextMessage(requestMessage.FromUserName, requestMessage.ToUserName,             DateTime.Now, string.Format("自动回复,请求内容如下:\r\n{0}", requestMessage));        return response;    }

以上是"如何处理微信公众号开发中的消息与事件"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

消息 服务器 服务 事件 公众 菜单 验证 内容 图片 处理 开发 位置 地理 地理位置 真实性 推送 订阅 文本 篇文章 有效 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技学院 互联网科技公司官网 世界互联网领先科技成果 广州凡科互联网科技 掌上梦互联网科技 互联网科技汛 佰商互联网科技有限公司 互联网金融科技委员会 阿里互联网科技公司 互联网校园科技培训 互联网和黑科技的看法 阿大互联网科技有限公司 消费医药和互联网科技 996高科技互联网公司 中国互联网公司排名锤子科技 长沙茂晟互联网科技有限公司 上海京穆互联网科技有限公司 卡尔迅互联网科技有限公司 珠海东科互联网科技有限公司 河南商务圈互联网科技有限公司 广东万易互联网科技有限公司惠州分公司 网络科技有限互联网 现代科技和互联网有关系吗 江苏南京365互联网科技 移动互联网科技股 电子商务与互联网科技的关系 互联网科技快讯热点 互联网时代科技型公司的机会 马化腾互联网科技教学 科技美学互联网 艺术
0