微信公眾平台快速開發框架 For Core 2.0 beta –JCSoft.WX.Core 5.2.0 beta發布


寫在前面

最近比較忙,都沒有好好維護博客,今天拿個半成品來交代吧。

記不清上次關於微信公眾號快速開發框架(簡稱JCWX)的更新是什么時候了,自從更新到支持.Net Framework 4.0以后基本上就沒怎么維護了,一方面工作比較忙,一方面家庭也需要維護,男人,你懂的。

自從NetCore發布以后,一直想把JCWX更新到Core版本,從6月開始就着手更新了,大概花了一個月時間,更新到了Net Core 1.1版本,當時並沒有對外公開,只是在Nuget上發布了下,隨后8月的時候2.0發布了,借着機會,我把代碼更新了下,使其支持.Net Core 2.0,也就是現在你看到的版本。

在更新到Net Core 1.1的時候,原本不打算繼續了,因為蘇大大的公眾號SDK已經非常強大了,不過,沒想到在Nuget上未公開的版本竟然也有上百名開發者下載使用,這讓我很感動,所以我決定堅持下去。

為了與之前的版本區分,我在Github上新建了項目:https://github.com/JamesYing/JCWXCore

目前我在dev Branch上進行開發,您可以從Dev上獲取最新的開發信息。

如果您之前不了我的項目,您可以點擊【傳送門】進行了解

為項目開了個網站:http://www.wxquickframework.com

使用方式:

1、可以Clone https://github.com/JamesYing/JCWXCore.git 后編譯后引入您的項目

2、通過Nuget 控制台:Install-Package JCSoft.WX.Framework -Version 5.2.0

更新內容

一、支持服務注冊

我們知道Asp.Net Core的DI是非常強大的,通過在Startup.cs中,把我們的服務注冊到程序中。JCWXCore也支持DI方式注冊。

使用過JCWX的朋友應該知道,我在調用Api的時候,使用了接口IApiClient,在代碼中我也提供了一個默認的ApiClient:DefaultApiClient。

在JCWXCore中,我們依然使用IApiClient接口作為主要調用接口,在DefaultApiClient中,我依賴了ILogger和IHttpFactory,您可以通過DI注冊屬於你自己的服務。

IHttpFactory目前僅僅支持Get和Post,並沒有提供UploadFile,希望朋友能一起完善

在.Net Core中,我們使用非常方便,只需要在Startup.cs的ConfigureServices中添加如下代碼:

public void ConfigureServices(IServiceCollection services)
{
    //add wx quickframework service
    services.AddWXFramework();

    services.AddMvc();
}

注冊之后,我們就可以在項目中任何地方使用了,比如在Controller中:

public class TestController:Controller
{
  private readonly IApiClient _client;
  public TestController(IApiClient client)
  {
      _client = client;
  }

  public ActionResult Test(ApiRequest request)
  {
      var response = _client.Execute(request);

      return Json(response);
  }
}

二、支持配置

到了.Net Core,我們使用json文件方式進行配置,這里我支持了通過Json配置文件配置和服務注冊時配置

1、Json文件配置(一般時appsettings.json):

{
  "AppId": "AppId",
  "AppSecert": "AppSecert",
  "EncodingAESKey": "EncodingAESKey",
  "Token": "Token",
  "MessageMode": 2 //0:明文 1:兼容 2:密文
}


2、服務注冊時:

public void ConfigureServices(IServiceCollection services)
{
    //add wx quickframework service
      services.AddWXFramework(o =>
      {
          o.AppId = "123";
          o.AppSecert = "123123";
          o.Token = "123123";
          o.MessageMode = MessageMode.Cipher;
          o.EncodingAESKey = "encodingAESKey";
      });

    services.AddMvc();
}

目前來說配置並不是很完善,我將在下一版本中,使其能夠根據配置文件,自動獲取AccessToken,方便大家使用。

三、自動被動消息加解密

細心的朋友一定注意到在配置信息中,有一個MessageMode的枚舉,以前比較偷懶,一直沒有加支持,這次終於把加解密給加上去了,為了更好的體驗,我把被動消息加解密做成了自動解密,自動加密。

在開發的時候我並沒有采用中間件的方式做自動加解密,而是采用了添加InputFormatter和OutputFormatter的方式。

如果需要使用自動加解密,需要進行如下步驟:

1、配置MessageMode為兼容模式或者密碼模式

2、引用“using JCSoft.WX.Mvc.Formatters”,可以通過Nuget控制台引入:

      Install-Package JCSoft.WX.Mvc.Cores -Version 1.2.0

3、在Startup.cs的ConfigureServices中把InputFormat和OutputFormat添加進去:

services.Configure<MvcOptions>(options =>
{
    options.InputFormatters.Add(new WechatXmlSerializerInputFormatter(
            Configuration.GetValue<string>("Token"),
            Configuration.GetValue<string>("EncodingAESKey"),
            Configuration.GetValue<string>("AppId"),
            Configuration.GetValue<MessageMode>("MessageMode")
        ));

    options.OutputFormatters.Add(new WechatXmlSerializerOutputFormatter(
            Configuration.GetValue<string>("Token"),
            Configuration.GetValue<string>("EncodingAESKey"),
            Configuration.GetValue<string>("AppId"),
            Configuration.GetValue<MessageMode>("MessageMode")
        ));
});

這里的代碼不是很好看,如果有更好的方法,請艾特我。

為了測試自動加解密,我做了一個demo項目:PassivityRequestMessageDemo

因為測試公眾號被動消息接口必須使用80端口,家里的電信貓無法映射80,我就把它build了一個鏡像,使其在docker容器中運行,您也可以進行操作下:)

四、增加部分API

因為很久沒有更新了,所以很多新的API都沒有支持,這次我添加了一些,但估計有遠遠不夠,希望大家能夠一起來幫我添加。

目前來說現在應該有80%的Api了,但還是真心希望找幾個志同道合的一起維護,有興趣的請添加我的QQ:785418

寫在最后

這次把JCWX更新到Core,不僅僅是為了項目升級,更是對.Net Core的一次學習,包括Docker化等等,讓我學到了很多,也踩了很多坑。不過一個人的力量真的有限,現在每天的生活就是工作-帶娃-鍛煉-學英文 一個循環下來已經晚上11點,真的力不從心,只能中午抽空修改,在這里也對大家說聲抱歉。

自從換了工作后,我養成了如下習慣:

1、習慣郵件發送問題

2、習慣做TodoList

3、開始堅持鍛煉(瘦了20斤)

4、戒煙成功

5、每天學習15個英文單詞

6、每天看半小時書

現在感覺每天都不夠用,寫代碼,帶娃,鍛煉,學習,連寫博客都有點奢侈。

.Net Core真的是好東西,但是在國內應用真的不多,希望大家一起加入,壯大國內的社區。

如果您是.Net Core愛好者,可以考慮加入我的QQ群:376248054(最近氣氛不加,希望大家踴躍啊)


免責聲明!

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



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