开源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)进行提问
转载于:https://blog.51cto.com/osscoder/1894690
开源OSS.Social微信项目进阶介绍相关推荐
- 开源OSS.Social微信项目解析
前言:OSS.Social是个开源的社交网站接口集成项目,当前也有很多其他不错的项目,不过始终没有我想要的那种简单清晰,只能撸起袖子,从头打造一个.当前正在进行的是对微信项目的开发,这里把对接口的整理 ...
- OSS.Social微信项目标准库介绍
经过本周的努力,昨晚终于完成OSS.Social微信项目的标准库支持,当前项目你已经可以同时在.net framework和.net core 中进行调用,调用方法也发生了部分变化,这里我简单分享下, ...
- .NET 开源项目 StreamJsonRpc 介绍[下篇]
阅读本文大概需要 9 分钟. 大家好,这是 .NET 开源项目 StreamJsonRpc 介绍的最后一篇.上篇介绍了一些预备知识,包括 JSON-RPC 协议介绍,StreamJsonRpc 是一个 ...
- Otter(阿里开源项目Otter介绍)
1.Otter-入门篇1(阿里开源项目Otter介绍) https://my.oschina.net/wenzhenxi/blog/719095 2.Otter-入门篇2(Manager安装配置) h ...
- Apache DolphinScheduler 开源之夏学生项目申请开启,6 大课题等你来拿万元奖金!
开源之夏 2023 学生报名已经正式开启!Apache DolphinScheduler 今年继续参与开源之夏的活动,2023 年 4 月 29 日-6 月 3 日 15:00 UTC+8,同学们可以 ...
- Cassandra在海量数据存储及大型项目案例介绍-part4
Cassandra是一套开源分布式NoSQL数据库系统.它最初由Facebook开发,用于储存收件箱等简单格式数据,此后,由于Cassandra良好的可扩展性,被Digg.Twitter等知名Web ...
- 白鹭[egret]项目目录介绍)
白鹭[egret]项目目录介绍 前言 一.游戏项目目录 1. egretProperties.json说明 二.使用步骤 1.引入库 2.读入数据 需要免费游戏源码的请微信搜索/扫码下方小程序 扫描下 ...
- 技术栈 | 开源社区的明星项目—Ceph谈
图片来源:网络 作者 侯玉彬 来源 启迪云计算 如需转载,请联系原作者授权 简介 诞生于2006年的Ceph,是开源社区的明星项目,也是私有云事实上的标准-OpenStack的默认存储后端. Ceph ...
- React native 项目进阶(redux, redux saga, redux logger)
之前利用知乎日报的api写了react-native的一个入门项目,传送文章地址React Native 项目入门和源码地址RN入门项目源码,目前github上的代码已经在原文的基础上增加了新的功能, ...
最新文章
- 2022-2028年中国康养地产行业市场需求前景及投资战略分析报告
- Java基本数据之间的类型转换
- v3 微信api 请求微信_企业微信API使用基本教程
- HtmlUnit自动填写表单并提交
- const的用法,特别是用在函数前面与后面的区别
- Scala关系运算符的一览图
- ES6公用跑马灯抽奖组件的封装及使用
- 通过“FBI树”复习二叉树算法(洛谷P1087题题解,Java语言描述)
- 【NOI OpenJudge】【1.1】编程基础之输入输出
- Android 自定义View(一)常用属性
- python web工资怎么样_月薪21170的Python Web岗,学到什么程度能找到工作?
- mysql 表单记录主键重新从1开始排序
- IT桔子沙龙之本地生活服务O2O探路者笔记整理
- ildasm ilasm
- python人像美颜_人像美颜美妆算法入门必备
- OAuth2 oauth_client_details表字段的详细说明
- Android SMB 简单几步实现手机给电脑传输数据
- android 清理系统缓存文件怎么恢复,文件过期或已被清理怎么恢复(微信如何恢复已清理文件)...
- 多功能音频工具的旗舰音乐编辑工具!Music Studio
- 纯JavaScript二维码在线生成网页源码
热门文章
- 计算机软件和硬件比较,软件与硬件RAID优劣之比较
- rabbitmq 查询版本_Hyperf 发布 v2.0.14 版本 | 企业级的 PHP 微服务云原生协程框架
- 第四范式冲刺IPO:4年亏13亿收入逐年翻番,研发工资人均2万
- 亚信科技CTO欧阳晔博士:5G网络助推边缘AI|MEET 2022
- 体验首款Linux消费级平板,原来芯片和系统全是国产
- 美国火星车失联的7分钟,高清视频传回来了
- 5天玩转PyTorch深度学习,从GAN到词嵌入都有实例丨教程资源
- Java动态追踪技术探究
- LeetCode 448. Find All Numbers Disappeared in an Array 442. Find All Duplicates in an Array
- Kotlin教程(九)泛型