开源OSS.Social微信项目进阶介绍

  在开源OSS.Social微信项目解析的随笔中,我简单给大家分享了进行中微信项目的概要设计,主要在讲述解决思路和过程,没有详细实现和使用介绍。本着不能马虎的态度,这篇文章我来给大家分解一下项目结构,使用方式以及后边的规划,希望能够让大家通达晓畅。同时,当前项目正在进行 .Net Standard 类库的过渡,相信一段时间之后就可以同时对 .net framework 和 .net core 提供支持。

  这个项目是整个OSS系列开源项目之一,主要是对 社交化产品的接口包装,而微信项目是当前正在进行的项目,在整个微信的项目中,包含三个大模块(请见上文,或见模块划分思维导图),这里对三个模块做一个分步讲解。

一.实时消息模块

  当前模块主要是对实时消息的处理,其概要设计想法和相关流程图已经在上文中做了介绍,这里对项目的具体实现做下分解演示。

  首先我介绍下消息模块的文件结构

  当前模块主要在项目中的Msg文件夹下,对应的实体则在 Msg/Mos 文件夹中,文件夹下有三个类:

  WxMsgBaseHandler(基础消息类型处理)

  WxMsgHandler(高级扩展消息处理)

  Cryptography(微信安全模式加密补位方法处理)

  在实体文件夹中,主要包含 基类(BaseMos), 普通消息类型实体(RecMsgMos-基础消息接收实体,RecEventMsgMos-基础事件消息接收实体) 和 消息响应实体 (ReplyMsgMos-响应消息实体)三个部分,这里面大家主要需要关心的是 BaseMos中的(BaseRecMsg,BaseRecEventMsg) 和 BaseReplyMsg,分别对应着 正常消息、事件消息,以及响应消息的基类。

  了解基本结构之后我们来看下具体调用方式,因为这个模块提供了两种调用模式,这里分别介绍:

  1. 基础消息模式,这个模式主要是对微信常见的消息类型的调用,在RecMsgMos和RecEventMsgMos文件中的实体也主要是对 基础模式接收消息的定义,当前模式的适用场景是开发者不需要考虑例如卡券等特殊事件消息,使用当前模式即可,调用演示如下:

  a. 自定义消息处理类WxBasicMsgService,继承自WxBasicMsgHandler,只需要给相关的事件委托Handler(请注意和事件消息的事件做区分)添加处理事件即可,传入的消息实体会根据不同委托事件一一对应,例如TextHandler对应的是TextRecMsg

  当前基础消息类型实现对应的事件为:

  正常消息:

  TextHandler(文本消息)

  ImageHandler(图片消息)

  VoiceHandler(语音消息)

  VideoHandler(视频)

  LocationHandler(位置消息)

  LinkHandler(链接消息)

  事件消息:

  SubscribeEventHandler(订阅事件)

  ScanEventHandler(扫描事件)

  LocationEventHandler(上报位置事件)

  ClickEventHandler(点击菜单事件)

  ViewEventHandler(点击菜单跳转事件)

  b. 声明配置信息

  c. 页面调用

  2. 高级消息模式,这个模式包含了基础模式的所有事件,主要适用场景是对有特殊事件消息有定制的情况。其调用方式和基础模式不同在于自定义消息处理类部分,这里展示一个简单自定义高级模式处理类:

  高级模式需要调用注册方法,RegisterMsgHandler-注册正常消息,RegisterEventMsgHandler-注册事件消息。第一个参数是消息类型名称,如果是事件消息,则是事件名称。第三个参数是具体的逻辑处理委托。第二个参数则是接收消息的实体类型,这里是举例所以我直接使用了LocationRecEventMsg,当然你也可以定义你需要的接收实体,正常消息继承自BaseRecMsg,事件消息继承自BaseRecEventMsg,举个例子:

public class CustomRecMsg : BaseRecMsg
{
  protected override void FormatPropertiesFromMsg()
  {
    base.FormatPropertiesFromMsg();
    Content = this["Content"];
  }
  public string Content { get; set; }
}

如果对于消息模块还有其他疑问,可以添加osscoder公众号提问,晚上我会统一解决。

二.功能接口模块

  这个模块主要是公号内的功能性接口,调用时需要调用全局的AccessToken,接口文件主要在Offcial文件夹下,根据功能对象分类下属又做了子模块分类,文件结构和消息模块下的类似,不过需要注意的是同一个文件夹下有几个类文件,但是类名都是同一个,例如Basic文件加下有User,Menu,Media等多个api文件,但类名同为:WxOffBasicApi。

  这里使用了Partail关键字,保证结构的清晰,同时保证调用时的简单。详细的分类可以见下面的结构:

  也就是功能模块接口主要有以下几个:WxOffBasicApi,WxOffCardApi,WxOffStatApi(统计,简写了),WxOffStoreApi,WxOffAssist,直接声明实例调用即可,当然当前接口还没有完全结束,主要集中在图中未标状态的部分,如果想要使用没有的接口,这里提供一个WxOffBaseApi基类中的方法调用示例,只需要返回一个WxBaseResp或者它的子类即可,WxBaseResp中有IsSuccess属性,可以通过它来判断当前的返回结果:

当然文件的命名也有一个简单规则:

请求实体:Wx+ 动作 + 对象/模块名称 + Req/Resp (如:WxAddMemberCardReq)
对象实体:Wx + 对象/模块名称 + Mo (如:WxMemberCardMo)
接口类:Wx+Off+模块名称+Api

三. 社交接口模块

  当前模块主要集中在Sns文件夹下,功能是面向用户相关的,微信的这块功能主要集中在授权和获取授权用户的基本信息,文件组成比较简单,里面提供了两种页面授权模式,PC扫码授权和手机微信端页面授权。调用方式也十分的简单,如图:

以上是几个部分的结构和调用方式介绍,所有实例代码都在OSS.Social.Samples中,可以去github或者 开源中国 下载查看。 

四.  OSS项目的规划

  当前已经开源的项目有 OSS.Common ,  OSS.Http, OSS.Social。 后期的计划还会有支付,客服,和用户三个项目,最近两周我的主要安排是完成OSS.Social 项目,同时完成 以上项目的.Net Standard 项目,完成对.net core 的支持,也欢迎有共同爱好的同学前来贡献代码,完成这个简单,基础,实用的系列项目。

 

续:这里把实时消息的处理流程再做一次回顾,可以和使用介绍再对照体会一下

当你看到这里的时候,你已经看完了,十分感谢你的耐心,如果还有其他疑问欢迎关注公众号(osscoder)进行提问

时间: 2024-10-12 19:41:30

开源OSS.Social微信项目进阶介绍的相关文章

OSS.Social微信项目标准库介绍

经过本周的努力,昨晚终于完成OSS.Social微信项目的标准库支持,当前项目你已经可以同时在.net framework和.net core 中进行调用,调用方法也发生了部分变化,这里我简单分享下,主要包含下边几个部分: · 移植后的变化 · 和OSS.Common,OSS.Http关系 · 异步(Task)使用介绍 一. 移植后的变化 如果不了解OSS.Social的同学,可以参看我前面的几篇文章介绍,这里就不多说了.?这次移植的变化首先是对.net core项目能够提供直接的支持,当前的使

【转】apache开源项目的介绍

Jakarta项目是ASF(The Apache Software Foundation)的一部分.ASF是一个非赢利组织,她鼓励基于开放的软件许可下进行合作.注重实效的开发,并提供各个领域的高质量软件,她涉及到Http服务器,编译工具,类库,开发架构,服务器端Java技术,J2EE容器,数据库工具,日志工具,XML解析等等诸多领域.ASF提供的java项目有一部分在Jakarta中,还有一些成为独立的诸如Tomcat的项目,Jakarta项目则提供了多种多样开源的java解决通用方案. 先介绍

.Net开源oss项目进度更新(含小程序接口)

和大家分享下当前OSS开源项目的进度情况: 一. OSS.Common [开源中国] [github] 经过昨天的努力,oss.common项目初步完成了对.net standard的支持,迁移过程本周以新文章的形式开放给大家,当前解决方案有两个: OSS.Common.NET40 - 针对原来.net framework项目继续提供支持. OSS.Common.Standard - 针对新的可以多平台的可移植项目支持(已经转为.net standard)项目. 二. OSS.Social  [

项目进阶 之 集群环境搭建(三)多管理节点MySQL集群

上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客咱们继续讲解MySQL集群的相关内容,同时针对上一篇遗留的问题提出一个解决方案. 1.单管理节点MySQL集群和多管理节点MySQL集群 上一篇的博客中,我们搭建的MySQL集群架构中,只存在一个管理节点,这样搭建的集群可以用如下所示的结构表示. 仔细分析上图就会发现,上图所示的单管理节点MySQL集群存在当唯一的管理节点由于网络.断电.压力过大等各种原因宕机后,数据节点和SQL节点将会各自为

[开源]起步,这只是一个开始。开源Qoss Flow Engine项目pre-alpha版本

迈开的第一步,至少证明已然开始. 这还只是以个pre-alpha的版本,意味着,它目前就根本没有多少功能,它也许只还有那一点点尚未搭建完成的骨头架子,但它会慢慢成长. -.. 哈哈,废话真多.步入正题吧. 1. Qoss Flow Engine是什么?          Qoss其实它的定位是一个开源的BPM(Business Process Management,业务流程管理) ,现在说它是个BPM,就说大了,其实,它现在就还只是个控制流程流转的类库而已.在一个BPM系统中需要很多完善的功能,

阿里云开源离线同步工具DataX3.0介绍

阿里云开源离线同步工具DataX3.0介绍 一. DataX3.0概览 ? DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳定高效的数据同步功能. 设计理念 为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源.当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数

开源CMS建站项目DNN研究与心得

DNN (Dotnetnuke) 首先是开源的,并且采用BSD开源协议,也就是说你可以任意修改源代码.传播.作为商品出售,仅有的要求就是保留源代码中的版权文字,这就解决了我多年来的心病:我知道动网新闻发布系统.微软官方论坛等都做得相当不错,可惜源代码都是不公开的,并且有着很严格的产权保护,你在做项目时不得不多考虑一些东西,但是DNN不一样,它几乎赤裸裸的以至于你可以为所欲为,并且得到了官方的稳定支持,学习和开发资料相对齐全,这么好的东西,我为什么不采用拿来主义呢? DNN部署是很简单的,没费多大

开源大数据索引项目hive-solr

github地址:https://github.com/qindongliang/hive-solr 欢迎大家fork和使用 关于这个项目的介绍,请参考散仙前面的文章: http://qindongliang.iteye.com/blog/2283862 最新更新: (1)添加了对solrcloud集群的支持 (2)修复了在反序列时对于hive中null列和空值的处理bug (3)优化了在构建索引时对于null值和空值的忽略 一些测试: 数据量:约一千二百万,8个字段,其中一个是大文本,2个是分

.NET Core实战项目之CMS 第十三章 开发篇-在MVC项目结构介绍及应用第三方UI

作为后端开发的我来说,前端表示真心玩不转,你如果让我微调一个位置的样式的话还行,但是让我写一个很漂亮的后台的话,真心做不到,所以我一般会选择套用一些开源UI模板来进行系统UI的设计.那如何套用呢?今天就以我们系列实战教程中的CMS系统为例来应用第三方的后台模板LayuiCMS2.0为例来进行实战演练吧! 本文已收录至<.NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划> 作者:依乐祝 首发地址 "DotNetCore实战"公众号 原文地址:https://w