最近比較忙,都沒有好好維護(hù)博客,今天拿個(gè)半成品來(lái)交代吧。
記不清上次關(guān)于微信公眾號(hào)快速開發(fā)框架(簡(jiǎn)稱JCWX)的更新是什么時(shí)候了,自從更新到支持.Net Framework 4.0以后基本上就沒怎么維護(hù)了,一方面工作比較忙,一方面家庭也需要維護(hù),男人,你懂的。
自從NetCore發(fā)布以后,一直想把JCWX更新到Core版本,從6月開始就著手更新了,大概花了一個(gè)月時(shí)間,更新到了Net Core 1.1版本,當(dāng)時(shí)并沒有對(duì)外公開,只是在Nuget上發(fā)布了下,隨后8月的時(shí)候2.0發(fā)布了,借著機(jī)會(huì),我把代碼更新了下,使其支持.Net Core 2.0,也就是現(xiàn)在你看到的版本。
在更新到Net Core 1.1的時(shí)候,原本不打算繼續(xù)了,因?yàn)樘K大大的公眾號(hào)SDK已經(jīng)非常強(qiáng)大了,不過(guò),沒想到在Nuget上未公開的版本竟然也有上百名開發(fā)者下載使用,這讓我很感動(dòng),所以我決定堅(jiān)持下去。
為了與之前的版本區(qū)分,我在Github上新建了項(xiàng)目:https://github.com/JamesYing/JCWXCore
目前我在dev Branch上進(jìn)行開發(fā),您可以從Dev上獲取最新的開發(fā)信息。
如果您之前不了我的項(xiàng)目,您可以點(diǎn)擊【傳送門】進(jìn)行了解
為項(xiàng)目開了個(gè)網(wǎng)站:http://www.wxquickframework.com
使用方式:
1、可以Clonehttps://github.com/JamesYing/JCWXCore.git后編譯后引入您的項(xiàng)目
2、通過(guò)Nuget 控制臺(tái):Install-Package JCSoft.WX.Framework -Version 5.2.0
更新內(nèi)容
一、支持服務(wù)注冊(cè)
我們知道Asp.Net Core的DI是非常強(qiáng)大的,通過(guò)在Startup.cs中,把我們的服務(wù)注冊(cè)到程序中。JCWXCore也支持DI方式注冊(cè)。
使用過(guò)JCWX的朋友應(yīng)該知道,我在調(diào)用Api的時(shí)候,使用了接口IApiClient,在代碼中我也提供了一個(gè)默認(rèn)的ApiClient:DefaultApiClient。
在JCWXCore中,我們依然使用IApiClient接口作為主要調(diào)用接口,在DefaultApiClient中,我依賴了ILogger和IHttpFactory,您可以通過(guò)DI注冊(cè)屬于你自己的服務(wù)。
IHttpFactory目前僅僅支持Get和Post,并沒有提供UploadFile,希望朋友能一起完善
在.Net Core中,我們使用非常方便,只需要在Startup.cs的ConfigureServices中添加如下代碼:
publicvoidConfigureServices(IServiceCollection services)
{//add wx quickframework serviceservices.AddWXFramework();
services.AddMvc();
}
注冊(cè)之后,我們就可以在項(xiàng)目中任何地方使用了,比如在Controller中:
publicclassTestController:Controller
{privatereadonlyIApiClient _client;publicTestController(IApiClient client)
{
_client=client;
}publicActionResult Test(ApiRequest request)
{varresponse =_client.Execute(request);returnJson(response);
}
}
二、支持配置
到了.Net Core,我們使用json文件方式進(jìn)行配置,這里我支持了通過(guò)Json配置文件配置和服務(wù)注冊(cè)時(shí)配置
1、Json文件配置(一般時(shí)appsettings.json):
{"AppId": "AppId","AppSecert": "AppSecert","EncodingAESKey": "EncodingAESKey","Token": "Token","MessageMode": 2//0:明文 1:兼容 2:密文}
2、服務(wù)注冊(cè)時(shí):
publicvoidConfigureServices(IServiceCollection services)
{//add wx quickframework serviceservices.AddWXFramework(o =>{
o.AppId="123";
o.AppSecert="123123";
o.Token="123123";
o.MessageMode=MessageMode.Cipher;
o.EncodingAESKey="encodingAESKey";
});
services.AddMvc();
}
目前來(lái)說(shuō)配置并不是很完善,我將在下一版本中,使其能夠根據(jù)配置文件,自動(dòng)獲取AccessToken,方便大家使用。
三、自動(dòng)被動(dòng)消息加解密
細(xì)心的朋友一定注意到在配置信息中,有一個(gè)MessageMode的枚舉,以前比較偷懶,一直沒有加支持,這次終于把加解密給加上去了,為了更好的體驗(yàn),我把被動(dòng)消息加解密做成了自動(dòng)解密,自動(dòng)加密。
在開發(fā)的時(shí)候我并沒有采用中間件的方式做自動(dòng)加解密,而是采用了添加InputFormatter和OutputFormatter的方式。
如果需要使用自動(dòng)加解密,需要進(jìn)行如下步驟:
1、配置MessageMode為兼容模式或者密碼模式
2、引用“using JCSoft.WX.Mvc.Formatters”,可以通過(guò)Nuget控制臺(tái)引入:
Install-Package JCSoft.WX.Mvc.Cores -Version 1.2.0
3、在Startup.cs的ConfigureServices中把InputFormat和OutputFormat添加進(jìn)去:
services.Configure(options =>{
options.InputFormatters.Add(newWechatXmlSerializerInputFormatter(
Configuration.GetValue("Token"),
Configuration.GetValue("EncodingAESKey"),
Configuration.GetValue("AppId"),
Configuration.GetValue("MessageMode")
));
options.OutputFormatters.Add(newWechatXmlSerializerOutputFormatter(
Configuration.GetValue("Token"),
Configuration.GetValue("EncodingAESKey"),
Configuration.GetValue("AppId"),
Configuration.GetValue("MessageMode")
));
});
這里的代碼不是很好看,如果有更好的方法,請(qǐng)艾特我。
為了測(cè)試自動(dòng)加解密,我做了一個(gè)demo項(xiàng)目:PassivityRequestMessageDemo
因?yàn)闇y(cè)試公眾號(hào)被動(dòng)消息接口必須使用80端口,家里的電信貓無(wú)法映射80,我就把它build了一個(gè)鏡像,使其在docker容器中運(yùn)行,您也可以進(jìn)行操作下:)
四、增加部分API
因?yàn)楹芫脹]有更新了,所以很多新的API都沒有支持,這次我添加了一些,但估計(jì)有遠(yuǎn)遠(yuǎn)不夠,希望大家能夠一起來(lái)幫我添加。
目前來(lái)說(shuō)現(xiàn)在應(yīng)該有80%的Api了,但還是真心希望找?guī)讉€(gè)志同道合的一起維護(hù),有興趣的請(qǐng)?zhí)砑游业腝Q:785418
寫在最后
這次把JCWX更新到Core,不僅僅是為了項(xiàng)目升級(jí),更是對(duì).Net Core的一次學(xué)習(xí),包括Docker化等等,讓我學(xué)到了很多,也踩了很多坑。不過(guò)一個(gè)人的力量真的有限,現(xiàn)在每天的生活就是工作-帶娃-鍛煉-學(xué)英文 一個(gè)循環(huán)下來(lái)已經(jīng)晚上11點(diǎn),真的力不從心,只能中午抽空修改,在這里也對(duì)大家說(shuō)聲抱歉。
自從換了工作后,我養(yǎng)成了如下習(xí)慣:
1、習(xí)慣郵件發(fā)送問(wèn)題
2、習(xí)慣做TodoList
3、開始堅(jiān)持鍛煉(瘦了20斤)
4、戒煙成功
5、每天學(xué)習(xí)15個(gè)英文單詞
6、每天看半小時(shí)書
現(xiàn)在感覺每天都不夠用,寫代碼,帶娃,鍛煉,學(xué)習(xí),連寫博客都有點(diǎn)奢侈。
.Net Core真的是好東西,但是在國(guó)內(nèi)應(yīng)用真的不多,希望大家一起加入,壯大國(guó)內(nèi)的社區(qū)。
如果您是.Net Core愛好者,可以考慮加入我的QQ群:376248054(最近氣氛不加,希望大家踴躍?。?/p>