diff --git a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Program.cs b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Program.cs index e8b14218..973633ba 100644 --- a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Program.cs +++ b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Program.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; using System.Text; -using System.Threading.Tasks; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Hosting; diff --git a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/BackgroundServices/TenpayCertificateRefreshingBackgroundService.cs b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/BackgroundServices/TenpayCertificateRefreshingBackgroundService.cs index 80529d8b..3077caaf 100644 --- a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/BackgroundServices/TenpayCertificateRefreshingBackgroundService.cs +++ b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/BackgroundServices/TenpayCertificateRefreshingBackgroundService.cs @@ -14,18 +14,15 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.BackgroundSe { private readonly ILogger _logger; private readonly Options.TenpayOptions _tenpayOptions; - private readonly CertificateManager _tenpayCertificateManager; private readonly HttpClients.IWechatTenpayHttpClientFactory _tenpayHttpClientFactory; public TenpayCertificateRefreshingBackgroundService( ILoggerFactory loggerFactory, IOptions tenpayOptions, - CertificateManager tenpayCertificateManager, HttpClients.IWechatTenpayHttpClientFactory tenpayHttpClientFactory) { _logger = loggerFactory.CreateLogger(GetType()); _tenpayOptions = tenpayOptions.Value; - _tenpayCertificateManager = tenpayCertificateManager; _tenpayHttpClientFactory = tenpayHttpClientFactory; } @@ -52,7 +49,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.BackgroundSe foreach (var certificateModel in response.CertificateList) { - _tenpayCertificateManager.AddEntry(new CertificateEntry(certificateModel)); + client.CertificateManager.AddEntry(new CertificateEntry(certificateModel)); } _logger.LogInformation("刷新微信商户平台证书成功。"); diff --git a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/IWechatTenpayCertificateManagerFactory.cs b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/IWechatTenpayCertificateManagerFactory.cs new file mode 100644 index 00000000..8268e793 --- /dev/null +++ b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/IWechatTenpayCertificateManagerFactory.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.HttpClients +{ + using SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings; + + public interface IWechatTenpayCertificateManagerFactory + { + CertificateManager Create(string merchantId); + } +} diff --git a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/IWechatTenpayHttpClientFactory.cs b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/IWechatTenpayHttpClientFactory.cs index 0b1fc5a8..fa5e8ad5 100644 --- a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/IWechatTenpayHttpClientFactory.cs +++ b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/IWechatTenpayHttpClientFactory.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.HttpClients +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.HttpClients { public interface IWechatTenpayHttpClientFactory { diff --git a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/Implements/WechatTenpayCertificateManagerFactory.cs b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/Implements/WechatTenpayCertificateManagerFactory.cs new file mode 100644 index 00000000..19143ede --- /dev/null +++ b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/Implements/WechatTenpayCertificateManagerFactory.cs @@ -0,0 +1,21 @@ +using System.Collections.Concurrent; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.HttpClients.Implements +{ + using SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings; + + partial class WechatTenpayCertificateManagerFactory : IWechatTenpayCertificateManagerFactory + { + private readonly ConcurrentDictionary _dict; + + public WechatTenpayCertificateManagerFactory() + { + _dict = new ConcurrentDictionary(); + } + + public CertificateManager Create(string merchantId) + { + return _dict.GetOrAdd(merchantId, new InMemoryCertificateManager()); + } + } +} diff --git a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/Implements/WechatTenpayHttpClientFactory.cs b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/Implements/WechatTenpayHttpClientFactory.cs index b7b366bc..12846b89 100644 --- a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/Implements/WechatTenpayHttpClientFactory.cs +++ b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Services/HttpClients/Implements/WechatTenpayHttpClientFactory.cs @@ -12,34 +12,34 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5.Services.HttpClients. partial class WechatTenpayHttpClientFactory : IWechatTenpayHttpClientFactory { private readonly System.Net.Http.IHttpClientFactory _httpClientFactory; - private readonly Options.TenpayOptions _wechatOptions; - private readonly CertificateManager _certificateManager; + private readonly Options.TenpayOptions _tenpayOptions; + private readonly IWechatTenpayCertificateManagerFactory _tenpayCertificateManagerFactory; public WechatTenpayHttpClientFactory( System.Net.Http.IHttpClientFactory httpClientFactory, - IOptions wechatOptions, - CertificateManager certificateManager) + IOptions tenpayOptions, + IWechatTenpayCertificateManagerFactory tenpayCertificateManagerFactory) { _httpClientFactory = httpClientFactory; - _wechatOptions = wechatOptions.Value; - _certificateManager = certificateManager; + _tenpayOptions = tenpayOptions.Value; + _tenpayCertificateManagerFactory = tenpayCertificateManagerFactory; FlurlHttp.GlobalSettings.FlurlClientFactory = new DelegatingFlurlClientFactory(_httpClientFactory); } public WechatTenpayClient Create(string merchantId) { - var wechatMerchant = _wechatOptions.Merchants?.FirstOrDefault(e => string.Equals(merchantId, e.MerchantId)); - if (wechatMerchant == null) + var merchantOptions = _tenpayOptions.Merchants?.FirstOrDefault(e => string.Equals(merchantId, e.MerchantId)); + if (merchantOptions == null) throw new Exception("未在配置项中找到该 MerchantId 对应的微信商户号。"); return new WechatTenpayClient(new WechatTenpayClientOptions() { - MerchantId = wechatMerchant.MerchantId, - MerchantV3Secret = wechatMerchant.SecretV3, - MerchantCertSerialNumber = wechatMerchant.CertSerialNumber, - MerchantCertPrivateKey = wechatMerchant.CertPrivateKey, - CertificateManager = _certificateManager, + MerchantId = merchantOptions.MerchantId, + MerchantV3Secret = merchantOptions.SecretV3, + MerchantCertSerialNumber = merchantOptions.CertSerialNumber, + MerchantCertPrivateKey = merchantOptions.CertPrivateKey, + CertificateManager = _tenpayCertificateManagerFactory.Create(merchantOptions.MerchantId), AutoEncryptRequestSensitiveProperty = true, AutoDecryptResponseSensitiveProperty = true }); diff --git a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Startup.cs b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Startup.cs index 789e278f..a220645e 100644 --- a/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Startup.cs +++ b/samples/SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5/Startup.cs @@ -1,17 +1,10 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5 { - using SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings; - public class Startup { public IConfiguration Configuration { get; } @@ -31,7 +24,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Sample_Net5 // ע빤 HTTP ͻ services.AddHttpClient(); - services.AddSingleton(); + services.AddSingleton(); services.AddSingleton(); // ע̨