博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个技术汪的开源梦 —— 微信开发工具包
阅读量:7055 次
发布时间:2019-06-28

本文共 4311 字,大约阅读时间需要 14 分钟。

- 关于项目

     该项目的背景是现在微信公众号、微信服务号乃至微信小程序开发非常普遍了已经,以上种种开发均需要和微信打交道,但是微信官方没有提供原始的 .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
(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.SmtWeixinMessageProcessConfigByJsonFile("./xxxx.json");

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

1 /********************************************************************************************************************** 2  * 描述: 3  *      微信消息处理基类。 4  *  5  * 变更历史: 6  *      作者:李亮  时间:2016年12月25日     新建 7  *  8  *********************************************************************************************************************/ 9 namespace Wlitsoft.Framework.WeixinSDK.Core10 {11     /// 12     /// 微信消息处理基类。13     /// 14     public abstract class WeixinMessageProcessBase : IWeixinMessageProcess15     {16         #region IWeixinMessageProcess 成员17 18         /// 19         /// 设置 请求消息。20         /// 21         public IRequestMessage RequestMessage { protected get; set; }22 23         /// 24         /// 获取 相应消息。25         /// 26         public IResponseMessage ResponseMessage { get; protected set; }27 28         /// 29         /// 获取或设置 是否响应一个空字符串给微信服务器。30         /// 
默认为
false
,当消息处理逻辑不需要给发送方响应消息则将该属性设置为
true
31 ///
32 public bool IsResponseEmptyString { get; set; }33 34 /// 35 /// 执行处理。36 /// 37 public abstract void Process();38 39 #endregion40 41 #region 构造方法42 43 /// 44 /// 初始化
的新实例。45 ///
46 protected WeixinMessageProcessBase()47 {48 49 }50 51 #endregion52 53 #region 保护方法54 55 /// 56 /// 根据请求消息类型获取对应类型的请求消息。57 /// 58 ///
请求消息类型。
59 ///
请求消息对象。
60 protected TRequestMessage GetRequestMessage
()61 {62 return (TRequestMessage)this.RequestMessage;63 }64 65 #endregion66 }67 }

- 微信支付

 - MPPay 公众号支付。

 - H5Pay H5支付。

 - PayApi 支付相关 API。

 - MchPayApi 企业付款相关 API。

 

- 结尾

项目源码地址:

-------------------------------------------------------------

生命不息,挖坑不止!

转载于:https://www.cnblogs.com/yyy116008/p/6699040.html

你可能感兴趣的文章
HDU 1181 变形课 【DFS】
查看>>
MySQL事务
查看>>
7月26日实习日志
查看>>
Django之 路由系统
查看>>
UVa 679 Dropping Balls (例题 6-6)
查看>>
FileWriter写数据
查看>>
【Andorid X 项目笔记】TextView字幕效果(3)
查看>>
HDU 1002
查看>>
练习markdown语法
查看>>
python 制作自定义包并安装到系统目录
查看>>
大文件排序问题
查看>>
php实现rar文件的读取和解压
查看>>
2014年天津市第一批科技计划项目
查看>>
@芥末的糖 ---------- node连接数据库两种方式mysql和moogoDB
查看>>
MongoDB 学习笔记2----条件操作符
查看>>
关于Hibernate5.x的那点事
查看>>
sk-learn 选择正确的估算器
查看>>
python操作mysql数据库
查看>>
erp的核心代码,替代orm
查看>>
字符串--manacher算法(回文串匹配)
查看>>