iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#微信公众号开发之使用MessageHandler简化消息处理流程
  • 922
分享到

C#微信公众号开发之使用MessageHandler简化消息处理流程

2024-04-02 19:04:59 922人浏览 泡泡鱼
摘要

微信公众平台对信息做了比较清晰的分类,最基本的包括请求(Request)和响应(Response)两大类信息,这两类信息有分为文字、语音、图片等格式。 这些类型在Senparc.We

微信公众平台对信息做了比较清晰的分类,最基本的包括请求(Request)和响应(Response)两大类信息,这两类信息有分为文字、语音、图片等格式。

这些类型在Senparc.Weixin.MP.dll SDK中以枚举的方式区分,同时根据严格命名规则命名了所有类型的RequestMessage和ResponseMessage。

但是基于枚举和类名的区分,势必会使用到switch或者反射这样复杂的代码,用于处理不同类型的微信信息。

为此,从v0.3.0起,Senparc.Weixin.MP开发了MessageHandler,对消息处理进行了封装(所以MessageHandler内部仍然使用了复杂但是高效的switch等判断手法),可以在使用SDK的时候轻松、简洁地处理各类信息,原本需要写入if或者switch判断数据类型,然后执行的代码块,现在都只需要写入到对应的方法中。

MessageHandler是一个抽象类,开发者可以在自己的项目中创建自己的类,继承并实现(重写)MessageHandler中提供的方法。

第一步,我们新建一个MyMessageHandler.cs,将MessageHandler作为基类并重写所有方法:

using System;
using System.io;
using Senparc.Weixin.MP.MessageHandlers;
using Senparc.Weixin.MP.Entities;

namespace Senparc.Weixin.MP.Sample.CustomerMessageHandler
{
    public class MyMessageHandler : MessageHandler<MessageContext>
    {
        public MyMessageHandler(Stream inputStream)
            : base(inputStream)
        {

        }
        public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
        {
            var responseMessage = this.CreateResponseMessage<ResponseMessageText>();//ResponseMessageText也可以是News等其他类型
            responseMessage.Content = "这条消息来自DefaultResponseMessage。";
            return responseMessage;
        }

        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            //...
        }

        public override IResponseMessageBase OnVoiceRequest(RequestMessageVoice requestMessage)
        {
            //...
        }

        //更多没有重写的OnXX方法,将默认返回DefaultResponseMessage中的结果。
        ....
    }
}

上述代码中重写的方法对应了接收不同的Request类型(在MessageHandler.cs源文件中已有详细说明,根据命名规则也很好理解)。

构造函数的inputStream用于接收来自微信服务器的请求流(如果需要在外部处理,这里也可以传入XDocument)。

第二步,在不同的重写方法内,实现自己的方法。 比如我们对于文字(Text)信息进行这样的处理:

        public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
        {
            //TODO:这里的逻辑可以交给Service处理具体信息,参考OnLocationRequest方法或/Service/LocationSercice.cs
            var responseMessage = CreateResponseMessage<ResponseMessageText>();
            responseMessage.Content =
                string.FORMat(
                    "您刚才发送了文字信息:{0}\r\n您还可以发送【位置】【图片】【语音】等类型的信息,查看不同格式的回复。\r\nSDK官方地址:Http://weixin.senparc.com",
                    requestMessage.Content);
            return responseMessage;
        }

ResponseMessageBase.CreateFromRequestMessage方法在主页的readme.md中已经有说明,用于指定初始化特定类型的ResponseMessage。最终返回的responseMessage可以是基于IResponseMessageBase的任何类型。

第三步,在Action中使用MessageHandler(如果在WEBforms里通常写在Page_Load事件中):

        [HttpPost]
        [ActionName("Post")]
        public ActionResult Post(string signature, string timestamp, string nonce, string echostr)
        {
            if (!CheckSignature.Check(signature, timestamp, nonce, Token))
            {
                return Content("参数错误!");
            }

            var messageHandler = new CustomerMessageHandler(Request.InputStream);
            messageHandler.Execute();//执行微信处理过程
            return Content(messageHandler.ResponseDocument.ToString());
        }

messageHandler.Execute();用于执行整个信息处理过程,其中会调用重写的OnxxRequest方法。

用户上下文

可能您已经注意到,从v0.4.0开始,MessageHandler提供了一个泛型:

public class MyMessageHandler : MessageHandler<MessageContext>

这里的MessageContext是SDK默认提供的一个基于IMessageContext接口的类(已经基本够用),您也可以根据自己的需要实现自己的类。 关于上下文的说明见这里:用户上下文WeixinContext和MessageContext。

到此这篇关于C#使用MessageHandler简化消息处理流程的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#微信公众号开发之使用MessageHandler简化消息处理流程

本文链接: https://www.lsjlt.com/news/151554.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#微信公众号开发之使用MessageHandler简化消息处理流程
    微信公众平台对信息做了比较清晰的分类,最基本的包括请求(Request)和响应(Response)两大类信息,这两类信息有分为文字、语音、图片等格式。 这些类型在Senparc.We...
    99+
    2024-04-02
  • C#微信公众号开发之消息处理
    前言: 回顾上一节服务器配置的内容,我们已经可以自己完成公众号服务器的配置。配置完成之后,我们就可以通过调用的方式,完成对消息管理的处理。当用户关注公众号或者发送消息的时候,我们应该...
    99+
    2024-04-02
  • C#微信公众号开发之用户管理
    前言: 微信公众号提供了用户和用户组的管理,我们可以在微信公众号官方里面进行操作,添加备注和标签,以及移动用户组别,同时,微信公众号提供了相应的接口方便我们调用,可方便的把用户同步到...
    99+
    2024-04-02
  • C#如何使用MessageHandler简化消息处理
    这篇文章主要介绍“C#如何使用MessageHandler简化消息处理”,在日常操作中,相信很多人在C#如何使用MessageHandler简化消息处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#如何使...
    99+
    2023-07-02
  • Koa2微信公众号开发之消息管理的示例分析
    这篇文章将为大家详细讲解有关Koa2微信公众号开发之消息管理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。接收消息当普通微信用户向公众账号发消息时,微信服务器将...
    99+
    2024-04-02
  • nodejs微信公众号开发之如何实现自动回复各种消息
    这篇文章主要介绍了nodejs微信公众号开发之如何实现自动回复各种消息,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1. 被动回复用户消息当...
    99+
    2024-04-02
  • C#微信公众号开发之用户上下文WeixinContext和MessageContext
    概述 由于微信公众平台的特殊机制,所有的信息都由微信服务器转发而来,因此服务器是无法使用Session对用户会话的上下文进行管理的。 为此Senparc.WeiXin.MP SDK增...
    99+
    2024-04-02
  • 微信小程序 | 微信公众平台SpringBoot开发实例 │ 模板消息的应用开发
     在手机微信公众号中输入文本(如“你好”),公众号发送两条模板消息,如下图所示。 1、说明 1●模板消息的基本规则 模板消息用来帮助公众号进行业务通知,是在模板内容中设定参数(参数必须以{ {开头,且以.DATA} }结尾)并在调用时为这...
    99+
    2023-09-20
    微信公众平台 java 开发语言 微信小程序 小程序
  • 微信公众号开发中使用Java如何实现获取用户的信息
    微信公众号开发中使用Java如何实现获取用户的信息?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先需要到微信网站去设置一下,我是直接用的微信测试号。        接口配...
    99+
    2023-05-31
    java 微信公众号 用户信息
  • 微信公众号开发中网页授权怎么实现简化用户绑定
    今天就跟大家聊聊有关微信公众号开发中网页授权怎么实现简化用户绑定,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先我们要明确绑定微信用户和系统用户,其目的是为了用户在一次绑定以后,再...
    99+
    2023-06-04
  • 微信公众平台开发中使用Java如何实现一个消息回复功能
    本篇文章给大家分享的是有关微信公众平台开发中使用Java如何实现一个消息回复功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。(一)回复文本消息在前面我们已经完成了对消息的分类...
    99+
    2023-05-31
    java 消息回复
  • 微信公众平台开发中使用Java挺好实现一个多媒体消息回复功能
    微信公众平台开发中使用Java挺好实现一个多媒体消息回复功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。(一)素材接口图片上传按照之前我们的约定将接口请求的url写入到配置文...
    99+
    2023-05-31
    java 消息回复
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作