因爲春節的關係 WeixinSDK 這個開源項目的進展比預期推遲了大約一個月的時間,值得高興的是到目前爲止該項目的重要模塊已經開發完畢。html
- 關於項目git
該項目的背景是如今微信公衆號、微信服務號乃至微信小程序開發很是廣泛了已經,以上種種開發均須要和微信打交道,可是微信官方沒有提供原始的 .Net 版的 SDK 供咱們使用,而且官方提供的示例亦 Bug 連連,因此決定成立該開源項目。github
如今已經有些很是優秀的 .Net 版的 WeixinSDK ,而且功能很是的全面、擴展性亦很是的好,那麼你們要問了 爲何還要重複造輪子呢,這個問道點上了,我全部的開源項目第一是爲了項目使用,再一個緣由是爲了你們學習,全部全部的項目每一個類均有完整的代碼註釋,每一個類亦有對應的單元測試。而且代碼易於理解,接口或抽象亦於擴展。json
閒話少說進入正題 follow me.....小程序
- 項目依賴 微信小程序
該項目依賴了一些基本的組件,這些組件亦是本人的幾個開源項目:緩存
- 基本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。
- 結尾