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


    由于春节的关系 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   ]
    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 
    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<TRequestMessage>()
    61         {
    62             return (TRequestMessage)this.RequestMessage;
    63         }
    64 
    65         #endregion
    66     }
    67 }

    - 微信支付

     - MPPay 公众号支付。

     - H5Pay H5支付。

     - PayApi 支付相关 API。

     - MchPayApi 企业付款相关 API。

    - 结尾

    项目源码地址:https://github.com/Wlitsoft/WeixinSDK

    一个技术汪的开源梦 —— 目录

  • 相关阅读:
    QDUOJ 来自xjy的签到题(bfs+状压dp)
    HDU
    【原创+整理】线程同步之详解自旋锁
    【原创】浅说windows下的中断请求级IRQL
    【原创】驱动开发中Memory read error导致的蓝屏问题
    [转&精]IO_STACK_LOCATION与IRP的一点笔记
    【原创】《windows驱动开发技术详解》第4章实验总结二
    【原创】《windows驱动开发技术详解》第4章实验总结一
    【转载】LINUX 和 WINDOWS 内核的区别
    【原创】Windows服务管家婆之Service Control Manager
  • 原文地址:https://www.cnblogs.com/wlitsoft/p/6414962.html
Copyright © 2020-2023  润新知