zoukankan      html  css  js  c++  java
  • 微信公众平台开发学习系列(二):微信公众平台接收消息与发送消息

    本篇主要介绍如何使用senparc来处理微信公众平台的接收消息与发送消息。

    首先微信端会将用户的发送的信息以post请求发送到填写的url上,服务端代码如下:

    1         [HttpPost]
    2         public ActionResult Get(PostModel postModel)
    3         {
    4             var messageHandler = new CustomMessageHandler(Request.InputStream, postModel);
    5 
    6             messageHandler.Execute();//执行微信处理过程
    7 
    8             return Content(messageHandler.ResponseDocument.ToString());
    9         }

    新建一个CustomMessageHandler类和一个CustomMessageContext类,CustomMessageHandler类继承MessageHandler<CustomMessageContext>,CustomMessageContext类继承MessageContext<IRequestMessageBase,IResponseMessageBase>,CustomMessageContext类的方法此处不贴出,主要是实现CustomMessageHandler类的方法,代码如下:

     1         public CustomMessageHandler(Stream inputStream, PostModel postModel)
     2             : base(inputStream, postModel)
     3         {
     4 
     5         }
     6 
     7         public override IResponseMessageBase DefaultResponseMessage(IRequestMessageBase requestMessage)
     8         {
     9             var responseMessage = base.CreateResponseMessage<ResponseMessageText>(); //ResponseMessageText指返回文本信息
    10             responseMessage.Content = "这条消息来自DefaultResponseMessage。"+requestMessage.MsgId;
    11             return responseMessage;
    12         }

    返回信息的格式多种多样,如:ResponseMessageText,ResponseMessageNews,ResponseMessageImage等。接收信息的格式也分很多种,不同格式有不同的处理方法:OnTextRequest,OnImageRequest,OnEvent_ViewRequest等。如果没有重写相应方法,就默认执行DefaultResponseMessage方法。本篇重写2个方法作为简单的例子。

    用户发送文本信息情况下的返回信息处理

    1         public override IResponseMessageBase OnTextRequest(RequestMessageText requestMessage)
    2         {
    3             var responseMessage = base.CreateResponseMessage<ResponseMessageText>();
    4             responseMessage.Content = "您的OpenID是:" + requestMessage.FromUserName     
    5                                     + "。
    您发送了文字信息:" + requestMessage.Content; 
    6             return responseMessage;
    7         }

    菜单点击事件情况下的返回信息处理

     1         public override IResponseMessageBase OnEvent_ClickRequest(RequestMessageEvent_Click requestMessage)
     2         {
     3             IResponseMessageBase reponseMessage = null;
     4             //菜单点击,需要跟创建菜单时的Key匹配
     5             switch (requestMessage.EventKey)
     6             {
     7                 case "OneClick":
     8                     {
     9                         var strongResponseMessage = CreateResponseMessage<ResponseMessageNews>();
    10                         reponseMessage = strongResponseMessage;
    11                         strongResponseMessage.Articles.Add(new Article()
    12                         {
    13                             Title = "您点击了菜单图文按钮",
    14                             Description = "您点击图文链接按钮,这是一条图文信息。",
    15                             PicUrl = "https://ss2.baidu.com/6ONYsjip0QIZ8tyhnq/it/u=3233073314,694013259&fm=58&s=39C718720E8EBE011B398BAC0300F024",
    16                             Url = "http://www.baidu.com"
    17                         });
    18                     }
    19                     break;
    20                 case "SubClickRoot_Text":
    21                     {
    22                         var strongResponseMessage = CreateResponseMessage<ResponseMessageText>();
    23                         reponseMessage = strongResponseMessage;
    24                         strongResponseMessage.Content = "您点击了子菜单按钮。";
    25                     }
    26                     break;
    27                 default:
    28                     {
    29                         var strongResponseMessage = CreateResponseMessage<ResponseMessageText>();
    30                         strongResponseMessage.Content = "您点击了按钮,EventKey:" + requestMessage.EventKey;
    31                         reponseMessage = strongResponseMessage;
    32                     }
    33                     break;
    34             }
    35 
    36             return reponseMessage;
    37         }
  • 相关阅读:
    用最简单的例子理解装饰器模式(Decorator Pattern)
    用最简单的例子理解迭代器模式(Iterator Pattern)
    用最简单的例子理解观察者模式(Observer Pattern)
    用最简单的例子理解单例模式(Singleton Pattern)
    用最简单的例子理解对象为Null模式(Null Object Pattern)
    用最简单的例子理解策略模式(Strategy Pattern)
    使用Lazy<T>实现对客户订单的延迟加载
    C#关键字var是什么,在何种情况下使用
    C#中的IDisposable模式
    CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码
  • 原文地址:https://www.cnblogs.com/dashuailuoli/p/5094116.html
Copyright © 2011-2022 走看看