C#-MVC开发微信应用(2)--开始使用微信接口

微信应用使用场景和商机很多,所以这也是一个技术的方向,因此,有空研究下、学习下微信的相关开发,也就成为SNF完善的必要条件了。本系列文章希望从一个循序渐进的角度上,全面介绍微信的相关开发过程和相关经验总结,希望给大家了解一下相关的开发历程。本篇随笔主要基于上一篇《C#-MVC开发微信应用(1)--开始使用微信接口》的基础上进行深入的介绍,介绍微信消息的处理和应答的过程。

1、微信的消息应答交互

我们知道,微信的服务器架起了客户手机和开发者服务器的一个桥梁,通过消息的传递和响应,实现了与用户的交互操作,下面是它的消息流程图。

微信向开发者服务器请求的消息包含了多种类型,不过基本来说,分为了文本消息处理、事件消息处理、语音消息的识别,以及成为开发者之前的那个消息认证操作基本分类,下面是我绘制的一个消息分类图,其中介绍了这几种关系,以及各自的消息细化分类。

对于这些消息的请求,我们在开发服务器端,需要编写相关的逻辑进行对应给的处理,然后给微信服务器平台回应消息即可。

在前一篇的随笔里面我贴过代码,介绍微信消息处理的入口操作,代码如下所示。

/// <summary>
        /// 用户发送消息后,微信平台自动Post一个请求到这里,并等待响应XML。
        /// </summary>
        [HttpPost]
        [ActionName("Index")]
        public ActionResult Post(string signature, string timestamp, string nonce, string echostr)
        {
            Stream requestStream = System.Web.HttpContext.Current.Request.InputStream;
            byte[] requestByte = new byte[requestStream.Length];
            requestStream.Read(requestByte, 0, (int)requestStream.Length);
            string requestStr = Encoding.UTF8.GetString(requestByte);

            SNFWeiXinProcess.Log("请求值:" + requestStr);
            return Content(SNFWeiXinProcess.Run(requestStr));
            //return Content(sss(signature, timestamp, nonce, echostr) );

            //return Content(ReceiveXml());

        }
SNFWeiXinProcess.Run(requestStr)就是对消息的处理函数,它实现了对不同消息的分发处理过程。‘
public static string Run(string requestStr)
        {
            BaseMessage info = new BaseMessage();
            if (!string.IsNullOrEmpty(requestStr))
            {
                info = XmlHelper.Deserialize<BaseMessage>(requestStr, info);

            }
            //创建 分发器
            IDistributor distributor = new SNFWeiXinDistributor();
            string result = "抱歉,此功能暂未开通";
            switch (info.MsgType)
            {
                case "text": //01.接收文本信息
                    RequestText text = new RequestText();
                    text = XmlHelper.Deserialize<RequestText>(requestStr, text);
                    result = distributor.OnActionText(text);
                    break;
          default: throw new Exception("找不到处理类型:" + info.MsgType);

            }
         return result;
        }

里面的SNFWeiXinProcess就是一个分发的管理类,它提取请求消息的内容,并构建不同类型的消息参数,传递给不同的响应函数进行处理,然后返回封装好的XML内容,作为响应。

具体的代码处理逻辑如下图所示。

这个消息处理接口,其实就是定义好一系列的对请求消息的处理操作,参数是不同给的消息对象,具体的代码定义如下所示(由于篇幅原因,省略部分接口,具体可以参考上图)。

public interface IDistributor
    {
        #region 01.文本信息处理 OnActionText(RequestText text)
        /// <summary>
        /// 文本信息处理
        /// </summary>
        /// <param name="text"></param>
        /// <returns>返回值</returns>
        string OnActionText(RequestText text);
        #endregion

        #region 02.图片信息处理 OnActionImage(RequestImage image)
        /// <summary>
        /// 图片信息处理
        /// </summary>
        /// <param name="image"></param>
        /// <returns>返回值</returns>
        string OnActionImage(RequestImage image);
        #endregion

        #region 03.接收的语音消息 OnActionVoice(RequestVoice voice)
        /// <summary>
        /// 接收的语音消息
        /// </summary>
        /// <param name="voice"></param>
        /// <returns>返回值</returns>
        string OnActionVoice(RequestVoice voice);
        #endregion

       .........................................................

        #region 02.订阅 OnActionEventSubscribe(RequestEventSubscribe subscribe)
        /// <summary>
        /// 取消订阅
        /// </summary>
        /// <param name="subscribe"></param>
        /// <returns>返回值</returns>
        string OnActionEventSubscribe(RequestEventSubscribe subscribe);
        #endregion
    .........................................................
  

    #region 06.点击菜单跳转链接时的事件推送 OnActionEventView(RequestEventView view)
    /// <summary>
    /// 点击菜单跳转链接时的事件推送
    /// </summary>
    /// <param name="view"></param>
    /// <returns>返回值</returns>
    string OnActionEventView(RequestEventView view);
    #endregion
  }


从上面的代码可以看出,不同的消息,到处理函数这里,就以不同的消息实体类的方式传递过来了(注意:实体类是我根据程序开发需要自己定义的,非微信本身的实体类),这样非常方便我们处理操作,否则每次需要解析不同的消息内容,很容易出现问题,这样强类型的数据类型,提高了我们开发微信应用的强壮型和高效性。这些实体类的对象有一定的继承关系的,他们的继承关系如下所示。

效果:

时间: 2024-12-25 10:08:54

C#-MVC开发微信应用(2)--开始使用微信接口的相关文章

MVC开发之排球计分(六)接口的实现

接口的实现 接口的用途: 接口是契约,它是方法声明的集合,封装了一些类共有的行为(方法). 即里面定义方法时只写到参数部分就用分号结束了:必须有某个/些类来实现接口才会有意义. 实现接口,就是在类中依次把接口中的方法全部写完整,即每个都补上方法体(花括号及里面的代码部分). 实现接口的类可以把它当做接口的子类,而接口可以认为是他们的父类.这样又可以扩展出多态.里氏替换的应用. 1.接口都长什么样? 很简单,一般接口都是以大写字母"I"开头来命名的,如:IComparable.ICar.

C#-MVC开发微信应用(3)--文本消息和图文消息的应答

最近咨询微信的人很多,感觉这块也是一块商机,也为了演示SNF快速开发平台的优势,就用SNF快速开发平台开发出一套微信应用程序.使用<SNF.CodeGenerator>代码生成工具可以节省大量时间. 在前面两篇两篇随笔<C#-MVC开发微信应用(1)--开始使用微信接口>和<C#-MVC开发微信应用(2)--开始使用微信接口>里面,大致介绍了我微信应用的框架构建,本随笔继续介绍这一主题,介绍消息应答里面的文本应答和图文应答的过程. 我们知道,给手机用户发送响应消息,它可

C#-MVC开发微信应用(8)--菜单管理的实现

之前讲解了微信后台管理页面的操作来管理菜单,下面我们在简单的来看一下,代码是如何实现的. 我们要实现获取微信的菜单.创建菜单.删除菜单等操作. 01.首先定义菜单操作的接口: /// <summary> /// 菜单的相关操作 /// </summary> public interface IMenuApi { /// <summary> /// 获取菜单数据 /// </summary> /// <param name="accessTok

C#-MVC开发微信应用(7)--在管理系统中同步微信用户分组信息

在前面几篇文章中,逐步从原有微信的API封装的基础上过渡到微信应用平台管理系统里面,逐步介绍管理系统中的微信数据的界面设计,以及相关的处理操作过程的逻辑和代码.希望从一个更高的层次介绍微信的开发. 在<C#-MVC开发微信应用(6)--用户分组信息管理>具体介绍了微信用户分组接口的实现方法,本篇将介绍,如何在我的平台软件上进行管理我们微信上的用户分组. 其实微信能够风风火火的原因,主要就是因为有用户信息,所以同步并管理好微信账号的关注用户数据是非常重要的.有了微信用户的数据,你可以和你任何应用

C#开发微信门户及应用(47) - 整合Web API、微信后台管理及前端微信小程序的应用方案

在微信开发中,我一直强调需要建立一个比较统一的Web API接口体系,以便实现数据的集中化,这样我们在常规的Web业务系统,Winform业务系统.微信应用.微信小程序.APP等方面,都可以直接调用基于JSON数据格式的Web API接口,在我之前的几篇随笔中,对这方面都有一定的介绍,本篇继续这个主题,细致深入的阐述如何在接口和源码的基础上整合Web API.微信后台管理及前端微信小程序的应用方案. 1.基于Web API的微信开发框架 首先我们各个业务模块,都应该围绕着Web API进行展开,

C#开发微信门户及应用(8)-微信门户应用管理系统功能介绍

最近对微信接口进行深入的研究,通过把底层接口一步步进行封装后,逐步升级到自动化配置.自动化应答,以及后台处理界面的优化和完善上,力求搭建一个较为完善.适用的微信门户应用管理系统. 微信门户应用管理系统,采用基于MVC+EasyUI的路线,由于多数域名服务器上都只能支持.NET4.0,所以以MVC3,C#4.0作为开发基础,基本上能够部署在任何.NET服务器上. 在微信门户系统里面,实现下面这些功能操作: 1)实现菜单的动态配置及更新到服务器上: 2)动态定义事件和响应消息,实现对不同行业,不同需

Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证

原文:Senparc.Weixin.MP SDK 微信公众平台开发教程(三):微信公众平台开发验证 要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方审核,审核通过之后,会在后台顶部出现“高级功能”菜单. 使用“高级功能”>“开发模式”之前,必须有一个已经部署在Internet上,可以用80端口访问的网站(域名或IP访问都可以),一些开发的准备工作见文

微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守.昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.微信公众号也可以发放现金红包了! 通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果. 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领

Java企业微信开发_09_素材管理之下载微信临时素材到本地服务器

一.本节要点 1.获取临时素材接口 请求方式:GET(HTTPS) 请求地址:https://qyapi.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID 2.获取临时素材接口的返回结果 企业微信官方开发文档中说明的返回结果如下: 若你以为这就是返回结果,然后跟之前一样,先访问接口,从http连接的输入流中的获取回结果的文本内容,你会发现你接收到的结果是一堆乱码. 这是为何? 以图片为例,此处千