一個技術汪的開源夢 —— 微信開發工具包


由於春節的關系 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

一個技術汪的開源夢 —— 目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM