千家信息网

微信公众平台开发中MessageHandler怎么用

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,小编给大家分享一下微信公众平台开发中MessageHandler怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!继续为项目添加一个CustomMessageHandle.cs类:
千家信息网最后更新 2026年11月01日微信公众平台开发中MessageHandler怎么用

小编给大家分享一下微信公众平台开发中MessageHandler怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

继续为项目添加一个CustomMessageHandle.cs类:

CustomMessageHandle.cs需要继承Senparc.Weixin.MP.MessageHandlers这个抽象类,并实现部分方法。最初步的CustomMessageHandle.cs代码
可能如下:

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web;using Senparc.Weixin.MP.Entities;using Senparc.Weixin.MP.MessageHandlers; namespace Senparc.Weixin.MP.Sample.Weixin{    public class CustomMessageHandler : MessageHandler    {        public CustomMessageHandler(Stream inputStream, PostModel postModel)            : base(inputStream, postModel)        {         }         public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)        {            var responseMessage = base.CreateResponseMessage(); //ResponseMessageText也可以是News等其他类型            responseMessage.Content = "这条消息来自DefaultResponseMessage。";            return responseMessage;        }    }}

我们可以看到必须要重写实现的抽象方法名为DefaultResponseMessage(),这一条信息用于返回一条的消息,假如对应类型(如语音)的微信消息没有被代码处理,那么默认会返回这里的结果。

在DefaultResponseMessage()方法中,我们看到这样一句:

var responseMessage = base.CreateResponseMessage(); //ResponseMessageText也可以是News等其他类型

  这里的CreateResponseMessage方法即创建一个返回对象,T可以为以下类型的任意一个,分别对应了不同的返回类型:

ResponseMessageText - 对应文本消息

ResponseMessageNews - 对应图文消息

ResponseMessageMusic - 对应音乐消息

ResponseMessageXXX - 其他类型以此类推

关于上述所有类型参数的设置方法,可以看开源项目的Demo,这里不再重复:https://github.com/JeffreySu/WeiXinMPSDK。

那么我们如何处理用户发过来的文字信息呢?

很简单--重写一个OnTextRequest方法即可:

public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage){    var responseMessage = base.CreateResponseMessage();    responseMessage.Content = "您的OpenID是:" + requestMessage.FromUserName      //这里的requestMessage.FromUserName也可以直接写成base.WeixinOpenId                            + "。\r\n您发送了文字信息:" + requestMessage.Content;  //\r\n用于换行,requestMessage.Content即用户发过来的文字内容    return responseMessage;}

这个方法中可以自由发挥,比如读取数据库、判断关键字,甚至返回不同的ResponseMessageXX类型(只要最终的类型都是在IResponseMessageBase接口下的即可)。

与OnTextRequest对应,如果我们要处理语音、地理位置、菜单等类型的消息,只需要重写对应的方法,可以重写的方法如下:

public virtual IResponseMessageBase OnImageRequest(RequestMessageImage requestMessage);        public virtual IResponseMessageBase OnLinkRequest(RequestMessageLink requestMessage);        public virtual IResponseMessageBase OnLocationRequest(RequestMessageLocation requestMessage);        public virtual IResponseMessageBase OnTextRequest(RequestMessageText requestMessage);        public virtual IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage);        public virtual IResponseMessageBase OnVideoRequest(RequestMessageVideo requestMessage);        public virtual IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage);        public virtual IResponseMessageBase OnEvent_ViewRequest(RequestMessageEvent_View requestMessage);        public virtual IResponseMessageBase OnEvent_EnterRequest(RequestMessageEvent_Enter requestMessage);        public virtual IResponseMessageBase OnEvent_LocationRequest(RequestMessageEvent_Location requestMessage);        public virtual IResponseMessageBase OnEvent_SubscribeRequest(RequestMessageEvent_Subscribe requestMessage);        public virtual IResponseMessageBase OnEvent_UnsubscribeRequest(RequestMessageEvent_Unsubscribe requestMessage);        public virtual IResponseMessageBase OnEvent_ScanRequest(RequestMessageEvent_Scan requestMessage)        public virtual IResponseMessageBase OneEvent_MassSendJobFinisRequest(RequestMessageEvent_MassSendJobFinish requestMessage)

其中OnEvent_XX对应的都是Event请求的子类型。

在CustomMessageHandler的基类设置的时候,我们看到使用了一个叫MessageContext的泛型(MessageHandler),这个MessageContext是SDK提供的一个默认的消息上下文处理类,这个类已经能够处理最基础的情况,如果您的应用不是很复杂,那么直接用这个类就行了。如果项目比较复杂,您也可以根据自己的需要写一个自己的类(继承IMessageContext接口),或继承这个类在扩展一些更多的属性(例如工作流和分布式缓存等等)。

至此我们已经使用MassageHandler处理所有微信用户发送过来的请求。

下面介绍一些MassageHandler的"秘密武器"。

OnExecuting()和OnExecuted()

  我们可以直接重写这两个方法。其中OnExecuting会在所有消息处理方法(如OnTextRequest,OnVoiceRequest等)执行之前执行,这个过程中,我们可以把CancelExecute设为true,来中断后面所有方法的执行(包括OnExecuted),例如:

public override void OnExecuting(){    if (RequestMessage.FromUserName == "olPjZjsXuQPJoV0HlruZkNzKc91E")    {        CancelExcute = true; //终止此用户的对话             //如果没有下面的代码,用户不会收到任何回复,因为此时ResponseMessage为null         //添加一条固定回复        var responseMessage = CreateResponseMessage();        responseMessage.Content = "Hey!你已经被拉黑啦!";         ResponseMessage = responseMessage;//设置返回对象    }}

如果OnExecuting中没有中断,当例如OnTextRequest方法执行完毕之后(或执行了默认方法),OnExecuted()方法将会触发,我们也可以对应地重写。要注意的是,在OnExecuted()方法内,ResponseMessage已经被赋了返回值。

看完了这篇文章,相信你对"微信公众平台开发中MessageHandler怎么用"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

方法 类型 消息 处理 用户 代码 信息 文字 项目 公众 平台 开发 不同 复杂 对象 接口 更多 篇文章 语音 以此类推 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 百单网互联网科技有限公司怎么样 中关村互联网科技集团 国智互联网科技 中国 科技 互联网 美国互联网科技 互联网金融科技创新 互联网科技大会案例 互联网科技产品 互联网企业和科技型企业 崇明区互联网教育科技诚信经营 青岛科技大学互联网大赛研究生 天津腾达互联网科技有限公司 高科技互联网套路 城市宝互联网科技有限公司 领航科技大厦互联网公司 下一代互联网重大应用科技园 易企秀互联网科技是做什么的 宁波跨境商互联网科技有限公司 山东蛋芒互联网科技有限公司 云信互联网科技有限公司 圆梦互联网科技 互联网 的科技创新 互联网女皇 腾讯科技 天津腾达互联网科技有限公司 中和天地互联网科技有限公司 工业互联网展湾科技股份有限公司 城市宝互联网科技有限公司 科技互联网行业投资研究 国产互联网科技公司
0