一个技术汪的开源梦 —— 微信开发工具包

由于春节的关系 WeixinSDK 这个开源项目的进展比预期推迟了大约一个月的时间,值得高兴的是到目前为止该项目的重要模块已经开发完毕。

 - 关于项目

     该项目的背景是现在微信公众号、微信服务号乃至微信小程序开发非常普遍了已经,以上种种开发均需要和微信打交道,但是微信官方没有提供原始的 .Net 版的 SDK 供我们使用,并且官方提供的示例亦 Bug 连连,所以决定成立该开源项目。

     现在已经有些非常优秀的 .Net 版的 WeixinSDK ,并且功能非常的全面、扩展性亦非常的好,那么大家要问了 为什么还要重复造轮子呢,这个问道点上了,我所有的开源项目第一是为了项目使用,再一个原因是为了大家学习,所有所有的项目每个类均有完整的代码注释,每个类亦有对应的单元测试。并且代码易于理解,接口或抽象亦于扩展。

闲话少说进入正题 follow me.....

- 项目依赖 

该项目依赖了一些基本的组件,这些组件亦是本人的几个开源项目:

  • Wlitsoft.Framework.Common 【公共类库】
  • Wlitsoft.Framework.Common.Serializer.JsonNet 【基于 Json.Net 的序列化实现】
  • Wlitsoft.Framework.Common.Logger.Log4Net 【基于 log4net 的日志记录者】
  • Wlitsoft.Framework.Caching.Redis 【分布式缓存 Redis 实现】

- 基本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<RequestTextMessageProcessFake>(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   ]
http://www.kuaimin.cn/news/finance/295809.html
http://www.kuaimin.cn/news/minsheng/295805.html
http://www.kuaimin.cn/news/daily/295803.html
http://www.kuaimin.cn/news/hot/295801.html
http://www.kuaimin.cn/news/finance/295800.html
http://www.kuaimin.cn/news/minsheng/295798.html
http://www.kuaimin.cn/news/daily/295797.html
http://www.kuaimin.cn/news/hot/295795.html
http://www.kuaimin.cn/news/finance/295793.html
http://www.kuaimin.cn/news/minsheng/295792.html
http://www.kuaimin.cn/news/daily/295791.html
http://www.kuaimin.cn/news/hot/295788.html
http://www.kuaimin.cn/news/finance/295786.html
http://www.kuaimin.cn/news/minsheng/295783.html
http://www.kuaimin.cn/news/daily/295782.html
http://www.kuaimin.cn/news/hot/295781.html
http://www.kuaimin.cn/news/finance/295780.html
http://www.kuaimin.cn/news/minsheng/295779.html
http://www.kuaimin.cn/news/daily/295777.html
http://www.kuaimin.cn/news/hot/295776.html
http://www.kuaimin.cn/news/finance/295775.html
http://www.kuaimin.cn/news/minsheng/295774.html
http://www.kuaimin.cn/news/daily/295772.html
http://www.kuaimin.cn/news/hot/295771.html
http://www.kuaimin.cn/news/finance/295769.html
http://www.kuaimin.cn/news/minsheng/295768.html
http://www.kuaimin.cn/news/daily/295767.html
http://www.kuaimin.cn/news/hot/295766.html
http://www.kuaimin.cn/news/finance/295764.html
http://www.kuaimin.cn/news/minsheng/295762.html
http://www.kuaimin.cn/news/daily/295761.html
http://www.kuaimin.cn/news/hot/295759.html
http://www.kuaimin.cn/news/finance/295758.html
http://www.kuaimin.cn/news/minsheng/295756.html
http://www.kuaimin.cn/news/daily/295755.html
http://www.kuaimin.cn/news/hot/295753.html
http://www.kuaimin.cn/news/finance/295751.html
http://www.kuaimin.cn/news/minsheng/295750.html
15 }
复制代码
App.Builder.SmtWeixinMessageProcessConfigByJsonFile("./xxxx.json");

所有的微信消息处理类均由 WeixinMessageProcessBase 派生,其实现代码为:

复制代码
 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 http://www.kuaimin.cn/news/daily/295748.html
http://www.kuaimin.cn/news/hot/295747.html
http://www.kuaimin.cn/news/finance/295745.html
http://www.kuaimin.cn/news/minsheng/295744.html
http://www.kuaimin.cn/news/daily/295742.html
http://www.kuaimin.cn/news/hot/295740.html
http://www.kuaimin.cn/news/finance/295739.html
http://www.kuaimin.cn/news/minsheng/295738.html
http://www.kuaimin.cn/news/daily/295737.html
http://www.kuaimin.cn/news/hot/295735.html
http://www.kuaimin.cn/news/finance/295733.html
http://www.kuaimin.cn/news/minsheng/295731.html
http://www.kuaimin.cn/news/daily/295730.html
http://www.kuaimin.cn/news/hot/295728.html
http://www.kuaimin.cn/news/finance/295726.html
http://www.kuaimin.cn/news/minsheng/295725.html
http://www.kuaimin.cn/news/daily/295723.html
http://www.kuaimin.cn/news/hot/295722.html
http://www.kuaimin.cn/news/finance/295721.html
http://www.kuaimin.cn/news/minsheng/295719.html
http://www.kuaimin.cn/news/daily/295717.html
http://www.kuaimin.cn/news/hot/295716.html
http://www.kuaimin.cn/news/finance/295714.html
http://www.kuaimin.cn/news/minsheng/295713.html
http://www.kuaimin.cn/news/daily/295712.html
http://www.kuaimin.cn/news/hot/295709.html
http://www.kuaimin.cn/news/finance/295708.html
http://www.kuaimin.cn/news/minsheng/295706.html
http://www.kuaimin.cn/news/daily/295704.html
http://www.kuaimin.cn/news/hot/295703.html
http://www.kuaimin.cn/news/finance/295702.html
http://www.kuaimin.cn/news/minsheng/295694.html
http://www.kuaimin.cn/news/daily/295693.html
http://www.kuaimin.cn/news/hot/295441.html
http://www.kuaimin.cn/news/hot/295439.html
http://www.kuaimin.cn/news/hot/295437.html
http://www.kuaimin.cn/news/hot/295435.html
http://www.kuaimin.cn/news/hot/295433.html
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 http://www.kuaimin.cn/news/hot/295432.html
http://www.kuaimin.cn/news/hot/295431.html
http://www.kuaimin.cn/news/hot/295429.html
http://www.kuaimin.cn/news/hot/295427.html
http://www.kuaimin.cn/news/hot/295425.html
http://www.kuaimin.cn/news/hot/295424.html
http://www.kuaimin.cn/news/finance/295422.html
http://www.kuaimin.cn/news/finance/295420.html
http://www.kuaimin.cn/news/finance/295418.html
http://www.kuaimin.cn/news/finance/295417.html
http://www.kuaimin.cn/news/finance/295415.html
http://www.kuaimin.cn/news/finance/295414.html
http://www.kuaimin.cn/news/finance/295413.html
http://www.kuaimin.cn/news/finance/295411.html
http://www.kuaimin.cn/news/finance/295410.html
http://www.kuaimin.cn/news/finance/295409.html
http://www.kuaimin.cn/news/finance/295407.html
http://www.kuaimin.cn/news/finance/295404.html
http://www.kuaimin.cn/news/minsheng/295400.html
http://www.kuaimin.cn/news/minsheng/295398.html
http://www.kuaimin.cn/news/minsheng/295396.html
http://www.kuaimin.cn/news/minsheng/295394.html
http://www.kuaimin.cn/news/minsheng/295391.html
http://www.kuaimin.cn/news/minsheng/295389.html
http://www.kuaimin.cn/news/minsheng/295388.html
http://www.kuaimin.cn/news/minsheng/295387.html
http://www.kuaimin.cn/news/minsheng/295385.html
http://www.kuaimin.cn/news/minsheng/295382.html
http://www.kuaimin.cn/news/minsheng/295380.html
http://www.kuaimin.cn/news/minsheng/295379.html
http://www.kuaimin.cn/news/daily/295376.html
http://www.kuaimin.cn/news/daily/295374.html
http://www.kuaimin.cn/news/daily/295373.html
http://www.kuaimin.cn/news/daily/295370.html
http://www.kuaimin.cn/news/daily/295369.html
http://www.kuaimin.cn/news/daily/295367.html
http://www.kuaimin.cn/news/daily/295365.html
http://www.kuaimin.cn/news/daily/295363.html
http://www.kuaimin.cn/news/daily/295362.html
http://www.kuaimin.cn/news/daily/295361.html
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<TRequestMessage>()
61         {
62             return (TRequestMessage)this.RequestMessage;
63         }
64 
65         #endregion
66     }
67 }
复制代码

- 微信支付

 - MPPay 公众号支付。

 - H5Pay H5支付。

 - PayApi 支付相关 API。

 - MchPayApi 企业付款相关 API。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值