一个技术汪的开源梦 —— 微信开发工具包(WeixinSDK)
由于春节的关系 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. 配置文件方式配置
- {
- "Messages": [
- {
- "MsgType": "Text",
- "Type": "WeixinSDK.Config.Test.Fake.MessageProcessDemo01,WeixinSDK.Config.Test"
- }
- ],
- "EventMessages": [
- {
- "EventType": "Subscribe",
- "EventKey": "Key01",
- "Type": "WeixinSDK.Config.Test.Fake.EventMessageProcessDemo01,WeixinSDK.Config.Test"
- }
- ]
- }
- App.Builder.SmtWeixinMessageProcessConfigByJsonFile("./xxxx.json");
所有的微信消息处理类均由 WeixinMessageProcessBase 派生,其实现代码为:
- /**********************************************************************************************************************
- * 描述:
- * 微信消息处理基类。
- *
- * 变更历史:
- * 作者:李亮 时间:2016年12月25日 新建
- *
- *********************************************************************************************************************/
- namespace Wlitsoft.Framework.WeixinSDK.Core
- {
- /// <summary>
- /// 微信消息处理基类。
- /// </summary>
- public abstract class WeixinMessageProcessBase : IWeixinMessageProcess
- {
- #region IWeixinMessageProcess 成员
- /// <summary>
- /// 设置 请求消息。
- /// </summary>
- public IRequestMessage RequestMessage { protected get; set; }
- /// <summary>
- /// 获取 相应消息。
- /// </summary>
- public IResponseMessage ResponseMessage { get; protected set; }
- /// <summary>
- /// 获取或设置 是否响应一个空字符串给微信服务器。
- /// <para>默认为 <c>false</c>,当消息处理逻辑不需要给发送方响应消息则将该属性设置为 <c>true</c>。</para>
- /// </summary>
- public bool IsResponseEmptyString { get; set; }
- /// <summary>
- /// 执行处理。
- /// </summary>
- public abstract void Process();
- #endregion
- #region 构造方法
- /// <summary>
- /// 初始化 <see cref="WeixinMessageProcessBase"/> 的新实例。
- /// </summary>
- protected WeixinMessageProcessBase()
- {
- }
- #endregion
- #region 保护方法
- /// <summary>
- /// 根据请求消息类型获取对应类型的请求消息。
- /// </summary>
- /// <typeparam name="TRequestMessage">请求消息类型。</typeparam>
- /// <returns>请求消息对象。</returns>
- protected TRequestMessage GetRequestMessage<TRequestMessage>()
- {
- return (TRequestMessage)this.RequestMessage;
- }
- #endregion
- }
- }
- 微信支付
- MPPay 公众号支付。
- H5Pay H5支付。
- PayApi 支付相关 API。
- MchPayApi 企业付款相关 API。
- 结尾
项目源码地址:https://github.com/Wlitsoft/WeixinSDK
一个技术汪的开源梦 —— 微信开发工具包(WeixinSDK)的更多相关文章
- 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之 Http 请求客户端
一个技术汪的开源梦 —— 目录 想必大家在项目开发的时候应该都在程序中调用过自己内部的接口或者使用过第三方提供的接口,咱今天不讨论 REST ,最常用的请求应该就是 GET 和 POST 了,那下面开 ...
- 一个技术汪的开源梦 —— 基于 .Net Core 的组件 Nuget 包制作 & 发布
一个技术汪的开源梦 —— 目录 微软的 ASP.Net Core 强化了 Nuget 的使用,所有的 .Net Core 组件均有 Nuget 管理,所以有必要探讨一下 .Net Core 组件制作 ...
- 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之序列化
一个技术汪的开源梦 —— 目录 想必大家在项目中都接触过 JSON 或者 XML 吧,为了将对象在网络上传输或者将其持久化必须将其序列化为一个字符串然后进行后续操作.常见的就是将其序列化成 JSON ...
- 一个技术汪的开源梦 —— 基于 .Net Core 的公共组件之目录结构
一个技术汪的开源梦 —— 目录 这篇文章是开源公共组件的开篇那就先说说项目的 Github 目录结构和 .Net Core 的项目结构. 1. GitHub 目录结构和相关文件 - src 源码项目目 ...
- 一个技术汪的开源梦 —— 公共组件缓存之分布式缓存 Redis 实现篇
Redis 安装 & 配置 本测试环境将在 CentOS 7 x64 上安装最新版本的 Redis. 1. 运行以下命令安装 Redis $ wget http://download.redi ...
- 微信开发工具包,jar包
https://www.oschina.net/code/snippet_218887_22896 github地址:https://github.com/wuweiit/weixinapi
- 微信开发之如何使用开发工具--weixin-java-tools
一.前沿 微信公众平台由于没有提供针对语言的开发包,只公布了一个基于Http协议的接口和加解密的算法sdk,这样给微信公众号的开发者带来很多工作量,除了实现业务逻辑外,还需要自己处理底层的接口协议细节 ...
- 基于SpringBoot的开源微信开发平台,Jeewx-Boot 1.0 版本发布
项目介绍 JeewxBoot 是一款基于SpringBoot的免费微信开发平台.支持微信公众号.小程序官网.微信抽奖活动. Jeewx-Boot实现了微信公众号管理.小程序CMS.微信抽奖活动等基础功 ...
- oAuth2授权协议 & 微信授权登陆和绑定 & 多环境共用一个微信开发平台回调设置
OAuth2(open Auth)开放授权协议 授权码模式流程: 1.浏览器(客户端)点击一个比如使用微信登陆按钮 2.会跳到认证服务器页面,让用户选择是否授权 3.如果用户点击授权,那么会跳转到开始 ...
随机推荐
- FMDB事务的使用
http://blog.csdn.net/qq_29892943/article/details/50541439 首先,说一下事务是什么,比如说我们有一个学生表和一个学生成绩表,而且一个学生对应一个 ...
- java实现——007用两个栈实现队列
import java.util.Stack; public class T007 { public static void main(String[] args) { Queue q = new Q ...
- adb报错:The connection to adb is down, and a severe&nbs
我觉得这就像是adb的大姨妈一样,不过处理起来还是很easy滴: 1.报错:BUILD FAILEDD:\workspace\ganji\build.xml:144: The following e ...
- javascript-函数声明和函数表达式-call-apply
1.函数声明与函数表达式 <script type="text/javascript"> //函数表达式,解析器在像执行环境中加载数据时,函数表达式是解析器执行到这段代 ...
- lower_bound和upper_bound算法实现
lower_bound算法要求在已经按照非递减顺序排序的数组中找到第一个大于等于给定值key的那个数,其基本实现原理是二分查找,如下所示: int lower_bound(vector<int& ...
- Core Data 应用程序实践指南(Core Data 应用程序实践指南)
译者序 前言 勘误 1. 初次尝试Core Data应用程序 本书的基础,基本概念,能做什么,不能做什么.实现CoreDataHelper类,演示如何将Core Data同既有的应用程序相集成. 2. ...
- css3实战版的点击列表项产生水波纹动画
1.html+js: <!DOCTYPE html><html><head lang="en"> <meta charset=&qu ...
- JavaScript对象属性的基础教程指南
JavaScript是使用“对象化编程”的,或者叫“面向对象编程”的.所谓“对象化编程”,意思是把JavaScript能涉及的范围划分成大大小小的对象,对象下面还继续划分对象直至非常详细为止,所有的编 ...
- Discuz经典函数注释之authcode
Discuz函数中最经典的函数是authcode函数,因为supesite,UCenterHome,UCenter,Discuz X都使用了这个函数进行加密啊传输串与cookie 今天为大家带来aut ...
- hadoop-1.x的运行实例
我的环境是hadoop-0.20.2,eclipse:SDK-3.3.2, 源数据为: Apr 23 11:49:54 hostapd: wlan0: STA 14:7d:c5:9e:fb:84 Ap ...