开源库Magicodes.WeChat.SDK总体介绍
目录
3.2 函数管理器——WeChatFrameworkFuncsManager 9
3.2.2 获取公众号配置——Config_GetWeChatConfigByKey 12
3.3 配置管理器——WeChatConfigManager 13
3.4 接口上下文对象——WeChatApisContext 15
概要
博客使用Word发博,发布后,排版会出现很多问题,敬请谅解。另外Word发博代码格式显示凌乱,因此相关代码均使用图片替代。可加群获取原始文档。
本篇主要对MAGICODES.WECHAT.SDK进行简单总体的介绍。通过本篇教程,您可以对Magicodes.WeChat.SDK进行一个全面的了解。
注意:MAGICODES.WECHAT.SDK为心莱团队封装的轻量级微信SDK,现已全部开源,开源库地址为:https://github.com/xin-lai/Magicodes.WeChat.SDK
官方博客:http://www.cnblogs.com/codelove/
相关开源库地址:https://github.com/xin-lai
交流QQ群(Magicodes开源库交流群):346487194
Nuget包地址:https://www.nuget.org/packages?q=magicodes
主要特点

主要特点如上所示,下面再说点细节:












架构图

构造器——WeChatSDKBuilder
构造器用于构造SDK的一些初始化配置,比如日志记录器、存储器等。
为了方便扩展,日志记录器使用了Magicodes.Logger,存储器使用了Magicodes.Storage,这两个均为开源库,开源地址为:https://github.com/xin-lai
Magicodes.Logger目前提供了DebugLogger和NLog的具体实现,如果不满足需求,您完全可以编写自己的实现。
Magicodes.Storage目前实现了本地资源存储,即将实现阿里云、windows Azure等云存储。
了解了这些,我们接下来的需要知道的是:
在程序初始化时,我们需要构建这些对象,如下所示:

通过构造器设置了Api日志记录器之后,所有的API请求都会有相应的日志级别的日志输出。设置了支付日志记录器之后,所有的支付请求均由此记录器记录相关数据。存储提供程序后续会用到,目前是预留。
注意Create和Build方法,请不要试图new构造器,请使用Create来返回一个,处理完了之后,切记一定要调用Build方法,否则,你的设置是无效设置。
函数管理器——WeChatFrameworkFuncsManager
WeChatFrameworkFuncsManager是本SDK的函数总管,通过它可以注册各种函数,以便更方便的使用本SDK。WeChatFrameworkFuncsManager是懒加载单例设计,请不要new。其有以下几个主要方法:

这个是一个比较简单的设计,不过值得注意的是,函数不是瞎注册就行的,为了便于大家对号入座,这里使用了一个枚举来对应相关的业务:

也许从以上内容并不能很好的帮助你理解这个设计,我们来几段注册的代码看看:
获取Key——GetKey
使用租户Id作为Key,以确保不同的租户加载不同的公众号配置:

也可以写死,如下所示:

获取公众号配置——Config_GetWeChatConfigByKey
根据Key从数据库获取:

The Same,也可以写死:

注意,SDK只有配置没有缓存的情况下,才会触发该函数的执行。
其他
其他的就不多说了。简单说明如下所示:
Config_GetWeChatPayConfigByKey:获取支付配置,可以在此编写获取支付配置的逻辑
APIFunc_TemplateMessageApi_Create:模板消息发送成功函数,可以在此记录发送日志
APIFunc_QRCodeApi_Create:已弃用
APIFunc_GetAccessToken:获取AccessToken。用于中控服务器模式,即从中控服务器获取Accesstoken
配置管理器——WeChatConfigManager
WeChatConfigManager为配置管理器,顾名思义,就是管理各种配置和凭据,并且维护其过期时间。WeChatConfigManager是懒加载单例设计,请不要new。
目前存储有以下内容:
- 公众号配置信息
- 微信支付配置信息
- 访问凭据
- 凭证
其有以下方法可供使用:

接口上下文对象——WeChatApisContext
WeChatApisContext即接口上下文对象,该类为懒加载单例模式。通过WeChatApisContext. Current来访问。
一般情况下,使用该对象可以轻松访问所有的接口,如下自定义菜单的查询接口调用所示:

又如下面例子,二维码接口调用示例:

通常情况下,我们是极力推荐以上方式来调用接口。但是,也有例外的情形,比如Key的注册函数是依赖Cookie、Sesstion等对象的,而在某些情形下(比如公众号服务器事件响应中),无法通过这些对象获取到key,这时,就需要通过以下方式来调用了。

开发实践
开发流程图

自定义菜单API调用Demo
初始化配置

这里配置了构造器,然后注册了两个函数,分别用于获取Key以及获取公众号配置。
使用

如上面所示,通过WeChatApiContext获取接口,然后调用基本无需额外传递配置参数和Token等。针对业务情况,部分复杂API还支持通过JSON字符串来调用(内部会根据JSON字符串结合转换器来反序列化)。,
开源库Magicodes.WeChat.SDK总体介绍的更多相关文章
- 使用开源库MAGICODES.WECHAT.SDK进行微信公众号支付开发
概要 博客使用Word发博,发布后,排版会出现很多问题,敬请谅解.可加群获取原始文档. 本篇主要讲解微信支付的开发流程,相关业务基于MAGICODES.WECHAT.SDK实现.通过本篇教程,您可以很 ...
- EQueue - 一个C#写的开源分布式消息队列的总体介绍(转)
源: EQueue - 一个C#写的开源分布式消息队列的总体介绍 EQueue - 一个纯C#写的分布式消息队列介绍2 EQueue - 详细谈一下消息持久化以及消息堆积的设计
- 开源库Magicodes.ECharts使用教程
目录 1 概要 2 2 Magicodes.ECharts工作原理 3 2.1 架构说明 3 2.1.1 Axis 4 2.1.2 CommonD ...
- GitHub开源库排名一百的简单介绍,值得收藏!
GitHub Android Libraries Top 100 简介 本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitHub ...
- 开源库Magicodes.Storage正式发布
说明 Magicodes.Storage,是心莱科技团队提供的统一存储库,相关库均使用.NET标准库(netstandard2.0)编写,支持.NET Framework以及.NET Core. 我们 ...
- EQueue - 一个C#写的开源分布式消息队列的总体介绍
前言 本文想介绍一下前段时间在写enode时,顺便实现的一个分布式消息队列equeue.这个消息队列的思想不是我想出来的,而是通过学习阿里的rocketmq后,自己用c#实现了一个轻量级的简单版本.一 ...
- Magicodes.Admin.Core开源框架总体介绍
框架说明 Magicodes.Admin.Core框架在ABP以及ASP.NET ZERO的基础上进行了封装和完善,目前基于.NET Core 2.0+(Framework版本),由于部分组件在.NE ...
- 开源库支付库Magicodes.Pay发布
Magicodes.Pay,是心莱科技团队提供的统一支付库,相关库均使用.NET标准库编写,支持.NET Framework以及.NET Core.目前支持以下支付方式和功能: 支付宝APP支付 支付 ...
- 最好的.NET开源免费ZIP库DotNetZip(.NET组件介绍之三)
在项目开发中,除了对数据的展示更多的就是对文件的相关操作,例如文件的创建和删除,以及文件的压缩和解压.文件压缩的好处有很多,主要就是在文件传输的方面,文件压缩的好处就不需要赘述,因为无论是开发者,还是 ...
随机推荐
- XUtils
//HttpUtils实例化对象 HttpUtils http = new HttpUtils(); /* *发送请求send(HttpMethod ...
- [修改后]html+css 做成一个可浏览的表格
现在表格内容需要显示的要求如下: 1, 表格很大,界面放不小,需要放到div中. 2, 在div中可以用scroll滑动查看. 3, td中的内容保持在一行中. 4, 可以点击tr,然后可以选中并了解 ...
- 理解soft-clipped reads
什么是soft-clipped reads 当基因组发生某一段的缺失,或转录组的剪接,在测序过程中,横跨缺失位点及剪接位点的reads回帖到基因组时,一条reads被切成两段,匹配到不同的区域,这样的 ...
- C#图片保存到本地
/// <summary> /// 上传微信头像到服务器 /// </summary> /// <param name="imgUrl">< ...
- STL库的内存配置器(allocator)
正在学习中,如果有错,还请多多指教,根据不断的理解,会进行更改,更改之前的样子都会保留下来,记录错误是最大的进步,嗯嗯! 具有次配置力的SGI空间配置器(SGI是STL的一种版本,也有其他的版本) 这 ...
- MATLAB寻找数组前k个大值
有时候我们需要寻找数组的前k个大值并按照顺序输出, 在C语言可以通过快速排序等算法,快速求得,这里用matlab写了一个比较简单实用的程序(适用于数组长度不是特别大的情况). function [va ...
- Numpy 中一维数据转置的几种方法
把一个一维数组转置有如下几种方法.就是把 一行 n列的数组 转换成 n 行一列的数组, 如 如 [1,2,3,4] => [[1] [2] [3] [4]] 方法一: np.transpose ...
- Mysql主从架构的复制原理及配置详解
一.简述Mysql复制 Mysql复制是通过将mysql的某一台主机的数据复制到其他主机(slaves)上,并且在slaves上重新执行一遍来实现.主服务器每次数据操作都会将更新记录到二进制日志文件, ...
- spring自动装配
spring提供了自动装配(autowiring)和自动检测(autodiscovery)用来减少XML的配置数量. 自动装配bean属性 byName——把与Bean的属性具有相同名字(或ID)的其 ...
- UVALive 4329 Ping pong(树状数组)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=13895 题意:一条街上住有n个乒乓选手,每个人都有一个技能值,现在 ...