diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientEventDecryptionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientEventDecryptionExtensions.cs index 27455f68..081eae28 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientEventDecryptionExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientEventDecryptionExtensions.cs @@ -18,7 +18,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (string.IsNullOrEmpty(callbackJson)) throw new ArgumentNullException(callbackJson); - return client.FlurlJsonSerializer.Deserialize(callbackJson); + return client.JsonSerializer.Deserialize(callbackJson); } /// @@ -57,7 +57,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { plainJson = Utilities.AESUtility.DecryptWithGCM( - key: client.WechatMerchantV3Secret, + key: client.Credentials.MerchantV3Secret, iv: resource.Nonce, aad: resource.AssociatedData, cipherText: resource.CipherText @@ -73,7 +73,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 throw new Exceptions.WechatTenpayEventDecryptionException("Unknown encrypt algorithm of the resource."); } - return client.FlurlJsonSerializer.Deserialize(plainJson); + return client.JsonSerializer.Deserialize(plainJson); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientEventVerificationExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientEventVerificationExtensions.cs index 62534001..520ad71a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientEventVerificationExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientEventVerificationExtensions.cs @@ -35,13 +35,13 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (callbackSignature == null) throw new ArgumentNullException(nameof(callbackSignature)); if (callbackSerialNumber == null) throw new ArgumentNullException(nameof(callbackSerialNumber)); - if (client.WechatCertificateManager == null) + if (client.CertificateManager == null) { - throw new Exceptions.WechatTenpayResponseVerificationException($"You must set an instance of `{nameof(Settings.ICertificateManager)}` at first."); + throw new Exceptions.WechatTenpayResponseVerificationException($"You must set an instance of `{nameof(Settings.CertificateManager)}` at first."); } else { - string? certificate = client.WechatCertificateManager.GetCertificate(callbackSerialNumber); + string? certificate = client.CertificateManager.GetCertificate(callbackSerialNumber); if (certificate == null) throw new Exceptions.WechatTenpayResponseVerificationException("Cannot get certificate by the serial number, may not be stored."); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteCombineTransactionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteCombineTransactionExtensions.cs index 91b89ac0..3f438ead 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteCombineTransactionExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteCombineTransactionExtensions.cs @@ -29,7 +29,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.CombineMerchantId)) - request.CombineMerchantId = client.WechatMerchantId; + request.CombineMerchantId = client.Credentials.MerchantId; if (request.SubOrderList != null) { @@ -63,7 +63,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.CombineMerchantId)) - request.CombineMerchantId = client.WechatMerchantId; + request.CombineMerchantId = client.Credentials.MerchantId; if (request.SubOrderList != null) { @@ -95,7 +95,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.CombineMerchantId)) - request.CombineMerchantId = client.WechatMerchantId; + request.CombineMerchantId = client.Credentials.MerchantId; if (request.SubOrderList != null) { @@ -127,7 +127,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.CombineMerchantId)) - request.CombineMerchantId = client.WechatMerchantId; + request.CombineMerchantId = client.Credentials.MerchantId; if (request.SubOrderList != null) { @@ -183,7 +183,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 foreach (var subOrder in request.SubOrderList) { if (string.IsNullOrEmpty(subOrder.MerchantId)) - subOrder.MerchantId = client.WechatMerchantId; + subOrder.MerchantId = client.Credentials.MerchantId; } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBusifavorExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBusifavorExtensions.cs index b3077726..a00911ae 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBusifavorExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBusifavorExtensions.cs @@ -29,7 +29,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.BelongMerchantId)) - request.BelongMerchantId = client.WechatMerchantId; + request.BelongMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "busifavor", "stocks"); @@ -313,7 +313,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Get, "marketing", "busifavor", "callbacks") @@ -337,7 +337,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "busifavor", "callbacks"); @@ -360,10 +360,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.PayerMerchantId)) - request.PayerMerchantId = client.WechatMerchantId; + request.PayerMerchantId = client.Credentials.MerchantId; if (string.IsNullOrEmpty(request.PayeeMerchantId)) - request.PayeeMerchantId = client.WechatMerchantId; + request.PayeeMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "busifavor", "subsidy", "pay-receipts"); @@ -406,10 +406,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.PayerMerchantId)) - request.PayerMerchantId = client.WechatMerchantId; + request.PayerMerchantId = client.Credentials.MerchantId; if (string.IsNullOrEmpty(request.PayeeMerchantId)) - request.PayeeMerchantId = client.WechatMerchantId; + request.PayeeMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "busifavor", "subsidy", "return-receipts"); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingFavorExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingFavorExtensions.cs index 80a48577..a21acb2c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingFavorExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingFavorExtensions.cs @@ -29,7 +29,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.BelongMerchantId)) - request.BelongMerchantId = client.WechatMerchantId; + request.BelongMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "favor", "coupon-stocks") @@ -53,7 +53,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.StockCreatorMerchantId)) - request.StockCreatorMerchantId = client.WechatMerchantId; + request.StockCreatorMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "favor", "stocks", request.StockId, "start") @@ -77,7 +77,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.StockCreatorMerchantId)) - request.StockCreatorMerchantId = client.WechatMerchantId; + request.StockCreatorMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "favor", "stocks", request.StockId, "pause") @@ -101,7 +101,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.StockCreatorMerchantId)) - request.StockCreatorMerchantId = client.WechatMerchantId; + request.StockCreatorMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "favor", "stocks", request.StockId, "restart") @@ -125,7 +125,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.StockCreatorMerchantId)) - request.StockCreatorMerchantId = client.WechatMerchantId; + request.StockCreatorMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Get, "marketing", "favor", "stocks", request.StockId) @@ -149,7 +149,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.StockCreatorMerchantId)) - request.StockCreatorMerchantId = client.WechatMerchantId; + request.StockCreatorMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Get, "marketing", "favor", "stocks") @@ -184,7 +184,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.StockCreatorMerchantId)) - request.StockCreatorMerchantId = client.WechatMerchantId; + request.StockCreatorMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Get, "marketing", "favor", "stocks", request.StockId, "merchants") @@ -210,7 +210,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.StockCreatorMerchantId)) - request.StockCreatorMerchantId = client.WechatMerchantId; + request.StockCreatorMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Get, "marketing", "favor", "stocks", request.StockId, "items") @@ -278,7 +278,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.StockCreatorMerchantId)) - request.StockCreatorMerchantId = client.WechatMerchantId; + request.StockCreatorMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "favor", "users", request.OpenId, "coupons") @@ -365,7 +365,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "marketing", "favor", "callbacks") diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs index 73d6d7a2..544ab602 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs @@ -44,7 +44,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); using var fileContent = new ByteArrayContent(request.FileBytes); - using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.FlurlJsonSerializer.Serialize(request))); + using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.JsonSerializer.Serialize(request))); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(metaContent, $"\"{Constants.FormDataFields.FORMDATA_META}\""); httpContent.Add(fileContent, "\"file\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnershipsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnershipsExtensions.cs index a7b119b9..c27a8b8e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnershipsExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingPartnershipsExtensions.cs @@ -74,10 +74,10 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 .CreateRequest(request, HttpMethod.Get, "marketing", "partnerships"); if (request.Partner != null) - flurlReq.SetQueryParam("partner", client.FlurlJsonSerializer.Serialize(request.Partner)); + flurlReq.SetQueryParam("partner", client.JsonSerializer.Serialize(request.Partner)); if (request.AuthorizedData != null) - flurlReq.SetQueryParam("authorized_data", client.FlurlJsonSerializer.Serialize(request.AuthorizedData)); + flurlReq.SetQueryParam("authorized_data", client.JsonSerializer.Serialize(request.AuthorizedData)); if (request.Limit.HasValue) flurlReq.SetQueryParam("limit", request.Limit.Value.ToString()); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs index 2294389e..bce79cd4 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs @@ -44,7 +44,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); using var fileContent = new ByteArrayContent(request.FileBytes); - using var metaContent = new StringContent(client.FlurlJsonSerializer.Serialize(request), Encoding.UTF8, "application/json"); + using var metaContent = new StringContent(client.JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(metaContent, $"\"{Constants.FormDataFields.FORMDATA_META}\""); httpContent.Add(fileContent, "\"file\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); @@ -83,7 +83,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); using var fileContent = new ByteArrayContent(request.FileBytes); - using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.FlurlJsonSerializer.Serialize(request))); + using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.JsonSerializer.Serialize(request))); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(metaContent, $"\"{Constants.FormDataFields.FORMDATA_META}\""); httpContent.Add(fileContent, "\"file\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs index 2fd311c9..e54e2383 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs @@ -108,7 +108,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.ComplaintedMerchantId)) - request.ComplaintedMerchantId = client.WechatMerchantId; + request.ComplaintedMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "merchant-service", "complaints-v2", request.ComplaintId, "response"); @@ -131,7 +131,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.ComplaintedMerchantId)) - request.ComplaintedMerchantId = client.WechatMerchantId; + request.ComplaintedMerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "merchant-service", "complaints-v2", request.ComplaintId, "complete"); @@ -247,7 +247,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); using var fileContent = new ByteArrayContent(request.FileBytes); - using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.FlurlJsonSerializer.Serialize(request))); + using var metaContent = new ByteArrayContent(Encoding.UTF8.GetBytes(client.JsonSerializer.Serialize(request))); using var httpContent = new MultipartFormDataContent(boundary); httpContent.Add(metaContent, $"\"{Constants.FormDataFields.FORMDATA_META}\""); httpContent.Add(fileContent, "\"file\"", $"\"{HttpUtility.UrlEncode(request.FileName)}\""); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayPartnerTransactionsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayPartnerTransactionsExtensions.cs index 00c625ce..47652e6b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayPartnerTransactionsExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayPartnerTransactionsExtensions.cs @@ -29,7 +29,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "partner", "transactions", "app"); @@ -54,7 +54,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "partner", "transactions", "jsapi"); @@ -77,7 +77,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "partner", "transactions", "h5"); @@ -99,7 +99,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "partner", "transactions", "native"); @@ -126,7 +126,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Get, "pay", "partner", "transactions", "out-trade-no", request.OutTradeNumber) @@ -155,7 +155,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Get, "pay", "partner", "transactions", "id", request.TransactionId) @@ -184,7 +184,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "partner", "transactions", "out-trade-no", request.OutTradeNumber, "close"); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayTransactionsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayTransactionsExtensions.cs index dcc6b957..d79dc721 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayTransactionsExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecutePayTransactionsExtensions.cs @@ -28,7 +28,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "transactions", "app"); @@ -51,7 +51,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "transactions", "jsapi"); @@ -73,7 +73,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "transactions", "h5"); @@ -95,7 +95,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "transactions", "native"); @@ -121,7 +121,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Get, "pay", "transactions", "out-trade-no", request.OutTradeNumber) @@ -148,7 +148,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Get, "pay", "transactions", "id", request.TransactionId) @@ -175,7 +175,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (request is null) throw new ArgumentNullException(nameof(request)); if (string.IsNullOrEmpty(request.MerchantId)) - request.MerchantId = client.WechatMerchantId; + request.MerchantId = client.Credentials.MerchantId; IFlurlRequest flurlReq = client .CreateRequest(request, HttpMethod.Post, "pay", "transactions", "out-trade-no", request.OutTradeNumber, "close"); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientParameterExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientParameterExtensions.cs index 1b72e116..ab3b42f6 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientParameterExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientParameterExtensions.cs @@ -43,7 +43,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 string nonce = Guid.NewGuid().ToString("N"); string package = $"prepay_id={prepayId}"; string sign = Utilities.RSAUtility.SignWithSHA256( - privateKey: client.WechatMerchantCertPrivateKey, + privateKey: client.Credentials.MerchantCertPrivateKey, plainText: $"{appId}\n{timestamp}\n{nonce}\n{package}\n" ); @@ -72,7 +72,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// public static IDictionary GenerateParametersForAppPayRequest(this WechatTenpayClient client, string appId, string prepayId) { - return GenerateParametersForAppPayRequest(client, merchantId: client.WechatMerchantId, appId: appId, prepayId: prepayId); + return GenerateParametersForAppPayRequest(client, merchantId: client.Credentials.MerchantId, appId: appId, prepayId: prepayId); } /// @@ -98,7 +98,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 string timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString(); string nonce = Guid.NewGuid().ToString("N"); string sign = Utilities.RSAUtility.SignWithSHA256( - privateKey: client.WechatMerchantCertPrivateKey, + privateKey: client.Credentials.MerchantCertPrivateKey, plainText: $"{appId}\n{timestamp}\n{nonce}\n{prepayId}\n" ); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseDecryptionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseDecryptionExtensions.cs index 409a3dba..dad862f7 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseDecryptionExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseDecryptionExtensions.cs @@ -20,7 +20,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + if (string.IsNullOrEmpty(client.Credentials.MerchantCertPrivateKey)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); if (!response.IsSuccessful()) @@ -37,7 +37,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { accountValidationModel.AccountName = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, accountValidationModel.AccountName ); } @@ -52,7 +52,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { accountValidationModel.AccountNumber = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, accountValidationModel.AccountNumber! ); } @@ -80,7 +80,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + if (string.IsNullOrEmpty(client.Credentials.MerchantCertPrivateKey)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); if (!response.IsSuccessful()) @@ -97,7 +97,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { downloadBillModel.EncryptKey = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, downloadBillModel.EncryptKey ); } @@ -126,7 +126,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + if (string.IsNullOrEmpty(client.Credentials.MerchantCertPrivateKey)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); if (!response.IsSuccessful()) @@ -139,7 +139,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { response.PayerPhone = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, response.PayerPhone! ); } @@ -164,7 +164,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantV3Secret)) + if (string.IsNullOrEmpty(client.Credentials.MerchantV3Secret)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant secret."); if (!response.IsSuccessful()) @@ -181,7 +181,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { certificateModel.EncryptCertificate.CipherText = Utilities.AESUtility.DecryptWithGCM( - key: client.WechatMerchantV3Secret, + key: client.Credentials.MerchantV3Secret, iv: certificateModel.EncryptCertificate.Nonce, aad: certificateModel.EncryptCertificate.AssociatedData, cipherText: certificateModel.EncryptCertificate.CipherText @@ -216,7 +216,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + if (string.IsNullOrEmpty(client.Credentials.MerchantCertPrivateKey)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); if (!response.IsSuccessful()) @@ -233,7 +233,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { complaintModel.PayerPhone = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, complaintModel.PayerPhone! ); } @@ -262,7 +262,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + if (string.IsNullOrEmpty(client.Credentials.MerchantCertPrivateKey)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); if (!response.IsSuccessful()) @@ -279,7 +279,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { guideModel.UserName = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, guideModel.UserName ); } @@ -294,7 +294,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { guideModel.UserMobile = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, guideModel.UserMobile ); } @@ -323,7 +323,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + if (string.IsNullOrEmpty(client.Credentials.MerchantCertPrivateKey)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); if (!response.IsSuccessful()) @@ -334,7 +334,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { response.UserName = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, response.UserName ); } @@ -358,7 +358,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + if (string.IsNullOrEmpty(client.Credentials.MerchantCertPrivateKey)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); if (!response.IsSuccessful()) @@ -369,7 +369,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { response.UserName = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, response.UserName ); } @@ -393,7 +393,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + if (string.IsNullOrEmpty(client.Credentials.MerchantCertPrivateKey)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); if (!response.IsSuccessful()) @@ -404,7 +404,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { response.UserName = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, response.UserName ); } @@ -428,7 +428,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (string.IsNullOrEmpty(client.WechatMerchantCertPrivateKey)) + if (string.IsNullOrEmpty(client.Credentials.MerchantCertPrivateKey)) throw new Exceptions.WechatTenpayResponseDecryptionException("Decrypt response failed, because of there is no merchant private key."); if (!response.IsSuccessful()) @@ -439,7 +439,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 try { response.UserName = Utilities.RSAUtility.DecryptWithECB( - client.WechatMerchantCertPrivateKey, + client.Credentials.MerchantCertPrivateKey, response.UserName ); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseVerificationExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseVerificationExtensions.cs index b620accf..3df729bb 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseVerificationExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientResponseVerificationExtensions.cs @@ -23,16 +23,16 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 if (client == null) throw new ArgumentNullException(nameof(client)); if (response == null) throw new ArgumentNullException(nameof(response)); - if (client.WechatCertificateManager == null) + if (client.CertificateManager == null) { - throw new Exceptions.WechatTenpayResponseVerificationException($"You must set an instance of `{nameof(Settings.ICertificateManager)}` at first."); + throw new Exceptions.WechatTenpayResponseVerificationException($"You must set an instance of `{nameof(Settings.CertificateManager)}` at first."); } else { if (response.WechatpayCertSerialNumber == null) throw new Exceptions.WechatTenpayResponseVerificationException("Cannot read the serial number in headers of this response."); - string? certificate = client.WechatCertificateManager.GetCertificate(response.WechatpayCertSerialNumber); + string? certificate = client.CertificateManager.GetCertificate(response.WechatpayCertSerialNumber); if (certificate == null) throw new Exceptions.WechatTenpayResponseVerificationException("Cannot get certificate by the serial number, may not be stored."); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/CertificateManager.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/CertificateManager.cs new file mode 100644 index 00000000..24cb41b9 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/CertificateManager.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings +{ + /// + /// 微信商户平台证书管理器接口。 + /// + public abstract class CertificateManager + { + /// + /// 根据证书序列号获取证书(cer 格式)。 + /// + /// + /// + public abstract string? GetCertificate(string serialNumber); + + /// + /// 设置证书序列号与证书(cer 格式)的映射关系。 + /// + /// + /// + public abstract void SetCertificate(string serialNumber, string certificate); + } + + /// + /// 一个基于内存实现的 。 + /// + public class InMemoryCertificateManager : CertificateManager + { + public IDictionary _dict; + + public InMemoryCertificateManager() + { + _dict = new ConcurrentDictionary(); + } + + public override string? GetCertificate(string serialNumber) + { + if (serialNumber == null) throw new ArgumentNullException(nameof(serialNumber)); + + return _dict[serialNumber]; + } + + public override void SetCertificate(string serialNumber, string certificate) + { + if (serialNumber == null) throw new ArgumentNullException(nameof(serialNumber)); + if (certificate == null) throw new ArgumentNullException(nameof(certificate)); + + _dict[serialNumber] = certificate; + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/Credentials.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/Credentials.cs new file mode 100644 index 00000000..e387724a --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/Credentials.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings +{ + public class Credentials + { + /// + /// 初始化客户端时 的副本。 + /// + public string MerchantId { get; } + + /// + /// 初始化客户端时 的副本。 + /// + public string MerchantV3Secret { get; } + + /// + /// 初始化客户端时 的副本。 + /// + public string MerchantCertSerialNumber { get; } + + /// + /// 初始化客户端时 的副本。 + /// + public string MerchantCertPrivateKey { get; } + + internal Credentials(WechatTenpayClientOptions options) + { + if (options == null) throw new ArgumentNullException(nameof(options)); + + MerchantId = options.MerchantId; + MerchantV3Secret = options.MerchantV3Secret; + MerchantCertSerialNumber = options.MerchantCertSerialNumber; + MerchantCertPrivateKey = options.MerchantCertPrivateKey; + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/ICertificateManager.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/ICertificateManager.cs deleted file mode 100644 index 220bd3c0..00000000 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/ICertificateManager.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings -{ - /// - /// 微信商户平台证书管理器接口。 - /// - public interface ICertificateManager - { - /// - /// 根据证书序列号获取证书(cer 格式)。 - /// - /// - /// - string? GetCertificate(string serialNumber); - - /// - /// 设置证书序列号与证书(cer 格式)的映射关系。 - /// - /// - /// - void SetCertificate(string serialNumber, string certificate); - } -} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/InMemoryCertificateManager.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/InMemoryCertificateManager.cs deleted file mode 100644 index 7e9ce92d..00000000 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Settings/InMemoryCertificateManager.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Settings -{ - /// - /// 一个基于内存实现的 。 - /// - public class InMemoryCertificateManager : ICertificateManager - { - public IDictionary _dict; - - public InMemoryCertificateManager() - { - _dict = new ConcurrentDictionary(); - } - - string? ICertificateManager.GetCertificate(string serialNumber) - { - if (serialNumber == null) throw new ArgumentNullException(nameof(serialNumber)); - - return _dict[serialNumber]; - } - - void ICertificateManager.SetCertificate(string serialNumber, string certificate) - { - if (serialNumber == null) throw new ArgumentNullException(nameof(serialNumber)); - if (certificate == null) throw new ArgumentNullException(nameof(certificate)); - - _dict[serialNumber] = certificate; - } - } -} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs index ef02b246..5d4ea92a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs @@ -20,37 +20,14 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 public partial class WechatTenpayClient : WechatClientBase { /// - /// 获取当前客户端使用的微信商户号。 + /// 获取当前客户端使用的微信商户平台凭证。 /// - public string WechatMerchantId { get; } + public Settings.Credentials Credentials { get; } /// - /// 获取当前客户端使用的微信商户 API 证书序列号(用于请求签名)。 + /// 获取当前客户端使用的微信商户平台证书管理器。 /// - internal string WechatMerchantCertSerialNumber { get; } - - /// - /// 获取当前客户端使用的微信商户 API 证书私钥(用于请求签名、响应数据解密)。 - /// - internal string WechatMerchantCertPrivateKey { get; } - - /// - /// 获取当前客户端使用的微信商户 API v3 密钥(用于事件数据解密)。 - /// - internal string WechatMerchantV3Secret { get; } - - /// - /// 获取当前客户端使用的微信商户平台证书存储器。 - /// - internal Settings.ICertificateManager? WechatCertificateManager { get; } - - /// - /// 获取当前客户端使用的 JSON 序列化器。 - /// - internal ISerializer FlurlJsonSerializer - { - get { return FlurlClient.Settings?.JsonSerializer ?? new FlurlNewtonsoftJsonSerializer(); } - } + internal Settings.CertificateManager CertificateManager { get; } /// /// 用指定的配置项初始化 类的新实例。 @@ -60,11 +37,8 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 { if (options == null) throw new ArgumentNullException(nameof(options)); - WechatMerchantId = options.MerchantId; - WechatMerchantCertSerialNumber = options.MerchantCertSerialNumber; - WechatMerchantCertPrivateKey = options.MerchantCertPrivateKey; - WechatMerchantV3Secret = options.MerchantV3Secret; - WechatCertificateManager = options.CertificateManager; + Credentials = new Settings.Credentials(options); + CertificateManager = options.CertificateManager; FlurlClient.BaseUrl = options.Endpoints ?? WechatTenpayEndpoints.DEFAULT; FlurlClient.Headers.Remove("Accept"); @@ -76,7 +50,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 FlurlClient.WithTimeout(TimeSpan.FromMilliseconds(options.Timeout)); Interceptors.Add(new Interceptors.WechatTenpaySignInterceptor( - scheme: options.AuthScheme, + scheme: options.SignAlgorithm, mchId: options.MerchantId, mchCertSn: options.MerchantCertSerialNumber, mchCertPk: options.MerchantCertPrivateKey diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClientOptions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClientOptions.cs index 9758de84..744e1799 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClientOptions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClientOptions.cs @@ -36,7 +36,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// 获取或设置微信支付 API 签名认证方式。 /// 默认值: /// - public string AuthScheme { get; set; } = Constants.SignAlgorithms.WECHATPAY2_SHA256_RSA2048; + public string SignAlgorithm { get; set; } = Constants.SignAlgorithms.WECHATPAY2_SHA256_RSA2048; /// /// 获取或设置微信商户号。 @@ -59,9 +59,9 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 public string MerchantCertPrivateKey { get; set; } = default!; /// - /// 获取或设置微信商户平台证书存储器。 + /// 获取或设置微信商户平台证书管理器。 /// 默认值: /// - public Settings.ICertificateManager? CertificateManager { get; set; } = new Settings.InMemoryCertificateManager(); + public Settings.CertificateManager CertificateManager { get; set; } = new Settings.InMemoryCertificateManager(); } }