由于春节的关系 WeixinSDK 这个开源项目的进展比预期推迟了大约一个月的时间,值得高兴的是到目前为止该项目的重要模块已经开发完毕。
- 关于项目
该项目的背景是现在微信公众号、微信服务号乃至微信小程序开发非常普遍了已经,以上种种开发均需要和微信打交道,但是微信官方没有提供原始的 .Net 版的 SDK 供我们使用,并且官方提供的示例亦 Bug 连连,所以决定成立该开源项目。
现在已经有些非常优秀的 .Net 版的 WeixinSDK ,并且功能非常的全面、扩展性亦非常的好,那么大家要问了 为什么还要重复造轮子呢,这个问道点上了,我所有的开源项目第一是为了项目使用,再一个原因是为了大家学习,所有所有的项目每个类均有完整的代码注释,每个类亦有对应的单元测试。并且代码易于理解,接口或抽象亦于扩展。
闲话少说进入正题 follow me.....
- 项目依赖
该项目依赖了一些基本的组件,这些组件亦是本人的几个开源项目:
- 基本 API
由于时间原因先只实现了一些常用的 API
- 微信令牌、js 令牌获取;
- 微信模板消息;
- OAuth2 授权相关接口;
- 用户管理相关接口;
支付相关接口后面会重点说。
- 令牌服务
刚才在基本 API 中有提及 微信令牌 和 js 令牌,对整个 WeixinSDK 就有这么两个令牌一个是调用微信接口所使用的 Token 一个是 JSSDK 所使用的 JsTickect,微信官方给出的用法是该令牌的有效期为 7200 秒,并且每天有调用次数限制,所以需要将其缓存起来重复使用。
- TokenServiceBase 令牌服务基类,提供所有令牌服务的基本实现以及抽象。
- GeneralTokenService 基本的令牌服务,使用本地缓存加定时器实现的基本令牌服务,如果是单机单站点的应用可以使用此令牌服务。
- DebugTokenService 调试令牌服务,该令牌服务主要应用于调试场景,直接指定一个 Token 即可调用 WeixinSDK 中的接口。
- DistributedTokenService 分布式令牌服务,使用分布式缓存实现的令牌服务,主要应用于多机多站点的场景。
-- 配置令牌服务
需要在应用程序启动代码里面执行一次即可
- GeneralTokenService tokenService = new GeneralTokenService();
- App.Builder.SetWeixinTokenService(tokenService);
- 微信消息处理
微信给我们开放了一些开发能力,比如接收微信的一些事件(关注事件、取消关注事件、按钮点击事件等)消息、接收普通文本消息、语音消息等功能。
该 SDK 中针对微信消息处理模块开发了一个简单的消息处理框架,只需要按照指定的写法写一些实现类即可。
- WeixinSDK/src/WeixinSDK/Message/Request/ 请求消息相关实体。
- WeixinSDK/src/WeixinSDK/Message/Response/ 响应消息相关实体。
- WeixinSDK/src/WeixinSDK/Message/Process/ 微信消息处理逻辑。
其中 WeixinMessageHandler 为主要实现代码
这块涉及东西较多感觉兴趣的先自己研究,后续会出一篇文章专门讲解这块。
-- 配置消息处理
消息处理配置这块考虑到扩展性,可以支持多种配置方式 比如硬编码、配置文件等,你也可以接入 Ioc 等相关代码完成该消息处理的相关功能。
1. 硬编码方式配置
- MessageProcessConfiguration pc = new MessageProcessConfiguration();
- pc.MessageList.Add(new MessageConfiguration(RequestMsgType.Text));
- App.Builder.SetWeixinMessageConfig(pc);
2. 配置文件方式配置
- 1 {
- 2 "Messages": [
- 3 {
- 4 "MsgType": "Text",
- 5 "Type": "WeixinSDK.Config.Test.Fake.MessageProcessDemo01,WeixinSDK.Config.Test"
- 6 }
- 7 ],
- 8 "EventMessages": [
- 9 {
- 10 "EventType": "Subscribe",
- 11 "EventKey": "Key01",
- 12 "Type": "WeixinSDK.Config.Test.Fake.EventMessageProcessDemo01,WeixinSDK.Config.Test"
- 13 }
- 14 ]
- 15 }
- App.Builder. SetWeixinMessageProcessConfigByJsonFile("./xxxx.json");
所有的微信消息处理类均由 派生,其实现代码为:
- 1 /**********************************************************************************************************************
- 2 * 描述:
- 3 * 微信消息处理基类。
- 4 *
- 5 * 变更历史:
- 6 * 作者:李亮 时间:2016年12月25日 新建
- 7 *
- 8 *********************************************************************************************************************/
- 9 namespace Wlitsoft.Framework.WeixinSDK.Core
- 10 {
- 11 /// <summary>
- 12 /// 微信消息处理基类。
- 13 /// </summary>
- 14 public abstract class WeixinMessageProcessBase : IWeixinMessageProcess
- 15 {
- 16 #region IWeixinMessageProcess 成员
- 17
- 18 /// <summary>
- 19 /// 设置 请求消息。
- 20 /// </summary>
- 21 public IRequestMessage RequestMessage { protected get; set; }
- 22
- 23 /// <summary>
- 24 /// 获取 相应消息。
- 25 /// </summary>
- 26 public IResponseMessage ResponseMessage { get; protected set; }
- 27
- 28 /// <summary>
- 29 /// 获取或设置 是否响应一个空字符串给微信服务器。
- 30 /// <para>默认为 <c>false</c>,当消息处理逻辑不需要给发送方响应消息则将该属性设置为 <c>true</c>。</para>
- 31 /// </summary>
- 32 public bool IsResponseEmptyString { get; set; }
- 33
- 34 /// <summary>
- 35 /// 执行处理。
- 36 /// </summary>
- 37 public abstract void Process();
- 38
- 39 #endregion
- 40
- 41 #region 构造方法
- 42
- 43 /// <summary>
- 44 /// 初始化 <see cref="WeixinMessageProcessBase"/> 的新实例。
- 45 /// </summary>
- 46 protected WeixinMessageProcessBase()
- 47 {
- 48
- 49 }
- 50
- 51 #endregion
- 52
- 53 #region 保护方法
- 54
- 55 /// <summary>
- 56 /// 根据请求消息类型获取对应类型的请求消息。
- 57 /// </summary>
- 58 /// <typeparam name="TRequestMessage">请求消息类型。</typeparam>
- 59 /// <returns>请求消息对象。</returns>
- 60 protected TRequestMessage GetRequestMessage()
- 61 {
- 62 return (TRequestMessage)this.RequestMessage;
- 63 }
- 64
- 65 #endregion
- 66 }
- 67 }
- 微信支付
- MPPay 公众号支付。
- H5Pay H5 支付。
- PayApi 支付相关 API。
- MchPayApi 企业付款相关 API。
- 结尾
项目源码地址:
来源: http://www.cnblogs.com/wlitsoft/p/6414962.html