开源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)进行提问

开源OSS.Social项目进阶介绍和使用展示的更多相关文章
- 开源OSS.Social微信项目进阶介绍
在开源OSS.Social微信项目解析的随笔中,我简单给大家分享了进行中微信项目的概要设计,主要在讲述解决思路和过程,没有详细实现和使用介绍.本着不能马虎的态度,这篇文章我来给大家分解一下项目结构,使 ...
- 开源OSS.Social微信项目解析
前言:OSS.Social是个开源的社交网站接口集成项目,当前也有很多其他不错的项目,不过始终没有我想要的那种简单清晰,只能撸起袖子,从头打造一个.当前正在进行的是对微信项目的开发,这里把对接口的整 ...
- OSS.Social微信项目标准库介绍
经过本周的努力,昨晚终于完成OSS.Social微信项目的标准库支持,当前项目你已经可以同时在.net framework和.net core 中进行调用,调用方法也发生了部分变化,这里我简单分享下, ...
- Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区
Oschat IM 开源即时通讯项目介绍 - FengJ的个人页面 - 开源中国社区 Oschat IM 开源即时通讯项目介绍 255人收藏此文章, 我要收藏 发表于5天前(2013-08-28 ...
- 我的Android进阶之旅】GitHub 上排名前 100 的 Android 开源库进行简单的介绍
GitHub Android Libraries Top 100 简介 本文转载于:https://github.com/Freelander/Android_Data/blob/master/And ...
- .NET 开源项目 StreamJsonRpc 介绍[下篇]
阅读本文大概需要 9 分钟. 大家好,这是 .NET 开源项目 StreamJsonRpc 介绍的最后一篇.上篇介绍了一些预备知识,包括 JSON-RPC 协议介绍,StreamJsonRpc 是一个 ...
- .NET 开源项目 StreamJsonRpc 介绍
StreamJsonRpc 是一个实现了 JSON-RPC 通信协议的开源 .NET 库,在介绍 StreamJsonRpc 之前,我们先来了解一下 JSON-RPC. JSON-RPC 介绍 JSO ...
- .Net开源oss项目进度更新(含小程序接口)
和大家分享下当前OSS开源项目的进度情况: 一. OSS.Common [开源中国] [github] 经过昨天的努力,oss.common项目初步完成了对.net standard的支持,迁移过程本 ...
- 开源任务管理平台TaskManagerV2.0介绍及升级说明
上一篇开源任务管理平台TaskManager介绍发布后,有网友联系我看看能不能做个后台管理界面,方便管理系统中所有的任务.由于时间和技术问题1.0版本的时候,新增了一个3分钟读取配置文件动态修改任务的 ...
随机推荐
- 写插件时遇到的一个小问题,关于animate和css3的问题
昨天写代码时,偶然想到了如果我们把css3属性放在animate中,指定时间.能否实现动画呢.举个例子吧: <script> $(".box").animate({ & ...
- html5 WebSocket 与 PHP socket 聊天室原理
html js <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- gulp用法
转载:http://segmentfault.com/blog/laopopo/1190000000372547 http://javascript.ruanyifeng.com/tool/gulp. ...
- [iOS、Unity、Android] 浅谈闭包的使用方法
前言 我们经常所编程语言的的进步速度是落后于硬件的发展速度的. 但是最近几年,闭包语法在各个语言中都有自己的体现形式,例如 • C语言中使用函数指针作为回调函数的入口: • Java和C#语言中的La ...
- mysql表明保存不了,多了空格都不行啊
mysql表明保存不了,多了空格都不行啊
- 23、手把手教你Extjs5(二十三)模块Form的自定义的设计[2]
在本节中将要加入各种类型的字段,在加入字段的时候由于可以一行加入多个字段,因此层次结构又多了一层fieldcontainer.form里面的主要层次结构如下: form -- fieldSet -- ...
- iOS开发——delegate的相关警告
警告:Assigning to 'id<...Delegate>' from incompatible type '...ViewController *const_strong' 解决方 ...
- Tsinsen-A1490 osu! 【数学期望】
问题描述 osu!是一个基于<押忍!战斗!应援团><精英节拍特工><太鼓达人>等各种音乐游戏做成的一款独特的PC版音乐游戏.游戏中,玩家需要根据音乐的节奏,通过鼠标 ...
- IOS 7 Xcode 5 免IDP证书 真机调试(转载)
最近转开发了,真的很久没有更新博客了,今天有空写一篇吧. 今天带来的是 IOS 7 Xcode 5 免IDP证书的真机调试.说白了就是穷,不想给苹果交那$99的钱. 注意:虽然可以用这个方法实现真机调 ...
- bzoj 1036
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 11858 Solved: 4803[Submit ...