From acdc13a8cf9e1b1dbc5973669b943b95bb7cc04c Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Sat, 12 Jul 2025 12:48:32 +0800 Subject: [PATCH] =?UTF-8?q?feat(tenpayv3):=20`WechatTenpayGlobalClient`=20?= =?UTF-8?q?=E4=B8=8D=E5=86=8D=E7=BB=A7=E6=89=BF=E8=87=AA=20`WechatTenpayCl?= =?UTF-8?q?ient`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Constants/[Internal]/AssemblyProps.cs | 9 +++ ...ayGlobalClientEventDecryptionExtensions.cs | 4 +- ...GlobalClientEventVerificationExtensions.cs | 8 +- ...obalClientExecuteCertificatesExtensions.cs | 2 +- ...entExecutePartnerTransactionsExtensions.cs | 14 ++-- ...obalClientExecuteTransactionsExtensions.cs | 16 ++-- ...atTenpayGlobalClientParameterExtensions.cs | 6 +- ...GlobalClientRequestEncryptionExtensions.cs | 4 +- ...lobalClientResponseDecryptionExtensions.cs | 2 +- ...balClientResponseVerificationExtensions.cs | 12 +-- .../Global/WechatTenpayGlobalClient.cs | 77 +++++++++++++------ .../WechatTenpayClient.cs | 8 +- 12 files changed, 101 insertions(+), 61 deletions(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Constants/[Internal]/AssemblyProps.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Constants/[Internal]/AssemblyProps.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Constants/[Internal]/AssemblyProps.cs new file mode 100644 index 00000000..b2462784 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Constants/[Internal]/AssemblyProps.cs @@ -0,0 +1,9 @@ +using System.Reflection; + +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Constants +{ + internal class AssemblyProps + { + public static readonly string VERSION = Assembly.GetAssembly(typeof(AssemblyProps))!.GetName()!.Version!.ToString(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientEventDecryptionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientEventDecryptionExtensions.cs index 9e9f2df1..bc83bd33 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientEventDecryptionExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientEventDecryptionExtensions.cs @@ -28,7 +28,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global public static T DecryptEventResource(this WechatTenpayGlobalClient client, WechatTenpayGlobalEvent webhookEvent) where T : WechatTenpayGlobalEvent.Types.IDecryptedResource, new() { - return WechatTenpayClientEventDecryptionExtensions.DecryptEventResource(client, webhookEvent.Resource); + return WechatTenpayClientEventDecryptionExtensions.DecryptEventResource(client.ProxyClient, webhookEvent.Resource); } /// @@ -41,7 +41,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global public static T DecryptEventResource(this WechatTenpayGlobalClient client, WechatTenpayGlobalEvent.Types.Resource webhookEventResource) where T : WechatTenpayGlobalEvent.Types.IDecryptedResource, new() { - return WechatTenpayClientEventDecryptionExtensions.DecryptEventResource(client, webhookEventResource); + return WechatTenpayClientEventDecryptionExtensions.DecryptEventResource(client.ProxyClient, webhookEventResource); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientEventVerificationExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientEventVerificationExtensions.cs index a903517e..f81ed78e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientEventVerificationExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientEventVerificationExtensions.cs @@ -23,7 +23,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static ErroredResult VerifyEventSignature(this WechatTenpayGlobalClient client, string webhookTimestamp, string webhookNonce, string webhookBody, string webhookSignature, string webhookSerialNumber) { - return WechatTenpayClientEventVerificationExtensions.VerifyEventSignature(client, webhookTimestamp, webhookNonce, webhookBody, webhookSignature, webhookSerialNumber); + return WechatTenpayClientEventVerificationExtensions.VerifyEventSignature(client.ProxyClient, webhookTimestamp, webhookNonce, webhookBody, webhookSignature, webhookSerialNumber); } /// @@ -43,7 +43,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static ErroredResult VerifyEventSignature(this WechatTenpayGlobalClient client, string webhookTimestamp, string webhookNonce, string webhookBody, string webhookSignature, string webhookSignatureType, string webhookSerialNumber) { - return WechatTenpayClientEventVerificationExtensions.VerifyEventSignature(client, webhookTimestamp, webhookNonce, webhookBody, webhookSignature, webhookSignatureType, webhookSerialNumber); + return WechatTenpayClientEventVerificationExtensions.VerifyEventSignature(client.ProxyClient, webhookTimestamp, webhookNonce, webhookBody, webhookSignature, webhookSignatureType, webhookSerialNumber); } /// @@ -63,7 +63,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static Task VerifyEventSignatureAsync(this WechatTenpayGlobalClient client, string webhookTimestamp, string webhookNonce, string webhookBody, string webhookSignature, string webhookSerialNumber, CancellationToken cancellationToken = default) { - return WechatTenpayClientEventVerificationExtensions.VerifyEventSignatureAsync(client, webhookTimestamp, webhookNonce, webhookBody, webhookSignature, webhookSerialNumber, cancellationToken); + return WechatTenpayClientEventVerificationExtensions.VerifyEventSignatureAsync(client.ProxyClient, webhookTimestamp, webhookNonce, webhookBody, webhookSignature, webhookSerialNumber, cancellationToken); } /// @@ -84,7 +84,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static Task VerifyEventSignatureAsync(this WechatTenpayGlobalClient client, string webhookTimestamp, string webhookNonce, string webhookBody, string webhookSignature, string webhookSignatureType, string webhookSerialNumber, CancellationToken cancellationToken = default) { - return WechatTenpayClientEventVerificationExtensions.VerifyEventSignatureAsync(client, webhookTimestamp, webhookNonce, webhookBody, webhookSignature, webhookSignatureType, webhookSerialNumber, cancellationToken); + return WechatTenpayClientEventVerificationExtensions.VerifyEventSignatureAsync(client.ProxyClient, webhookTimestamp, webhookNonce, webhookBody, webhookSignature, webhookSignatureType, webhookSerialNumber, cancellationToken); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecuteCertificatesExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecuteCertificatesExtensions.cs index db521884..c62acae9 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecuteCertificatesExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecuteCertificatesExtensions.cs @@ -30,7 +30,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global if (client is null) throw new ArgumentNullException(nameof(client)); if (request is null) throw new ArgumentNullException(nameof(request)); - IFlurlRequest flurlReq = client + IFlurlRequest flurlReq = client.ProxyClient .CreateFlurlRequest(request, HttpMethod.Get, "certificates"); return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecutePartnerTransactionsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecutePartnerTransactionsExtensions.cs index 62692088..122fb283 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecutePartnerTransactionsExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecutePartnerTransactionsExtensions.cs @@ -30,7 +30,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global IFlurlRequest flurlReq = client .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "app"); - return await ((WechatTenpayClient)client).SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + return await client.ProxyClient.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } /// @@ -81,7 +81,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global IFlurlRequest flurlReq = client .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "jsapi"); - return await ((WechatTenpayClient)client).SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + return await client.ProxyClient.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } /// @@ -106,7 +106,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global IFlurlRequest flurlReq = client .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "native"); - return await ((WechatTenpayClient)client).SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + return await client.ProxyClient.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } /// @@ -158,7 +158,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global if (request.MerchantId is null) request.MerchantId = client.Credentials.MerchantId; - IFlurlRequest flurlReq = client + IFlurlRequest flurlReq = client.ProxyClient .CreateFlurlRequest(request, HttpMethod.Get, "transactions", "out-trade-no", request.OutTradeNumber) .SetQueryParam("sp_mchid", request.MerchantId) .SetQueryParam("sub_mchid", request.SubMerchantId); @@ -190,7 +190,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global if (request.MerchantId is null) request.MerchantId = client.Credentials.MerchantId; - IFlurlRequest flurlReq = client + IFlurlRequest flurlReq = client.ProxyClient .CreateFlurlRequest(request, HttpMethod.Get, "transactions", "id", request.TransactionId) .SetQueryParam("sp_mchid", request.MerchantId) .SetQueryParam("sub_mchid", request.SubMerchantId); @@ -221,7 +221,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global if (request.MerchantId is null) request.MerchantId = client.Credentials.MerchantId; - IFlurlRequest flurlReq = client + IFlurlRequest flurlReq = client.ProxyClient .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "out-trade-no", request.OutTradeNumber, "close"); return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); @@ -246,7 +246,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global if (request.MerchantId is null) request.MerchantId = client.Credentials.MerchantId; - IFlurlRequest flurlReq = client + IFlurlRequest flurlReq = client.ProxyClient .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "out-trade-no", request.OutTradeNumber, "reverse") .SetQueryParam("sp_mchid", request.MerchantId) .SetQueryParam("sub_mchid", request.SubMerchantId); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecuteTransactionsExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecuteTransactionsExtensions.cs index 05cd20ea..96abcb7b 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecuteTransactionsExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientExecuteTransactionsExtensions.cs @@ -30,7 +30,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global IFlurlRequest flurlReq = client .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "app"); - return await ((WechatTenpayClient)client).SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + return await client.ProxyClient.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } /// @@ -55,7 +55,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global IFlurlRequest flurlReq = client .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "mweb"); - return await ((WechatTenpayClient)client).SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + return await client.ProxyClient.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } /// @@ -81,7 +81,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global IFlurlRequest flurlReq = client .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "jsapi"); - return await ((WechatTenpayClient)client).SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + return await client.ProxyClient.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } /// @@ -106,7 +106,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global IFlurlRequest flurlReq = client .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "native"); - return await ((WechatTenpayClient)client).SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); + return await client.ProxyClient.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); } /// @@ -158,7 +158,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global if (request.MerchantId is null) request.MerchantId = client.Credentials.MerchantId; - IFlurlRequest flurlReq = client + IFlurlRequest flurlReq = client.ProxyClient .CreateFlurlRequest(request, HttpMethod.Get, "transactions", "out-trade-no", request.OutTradeNumber) .SetQueryParam("mchid", request.MerchantId); @@ -189,7 +189,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global if (request.MerchantId is null) request.MerchantId = client.Credentials.MerchantId; - IFlurlRequest flurlReq = client + IFlurlRequest flurlReq = client.ProxyClient .CreateFlurlRequest(request, HttpMethod.Get, "transactions", "id", request.TransactionId) .SetQueryParam("mchid", request.MerchantId); @@ -219,7 +219,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global if (request.MerchantId is null) request.MerchantId = client.Credentials.MerchantId; - IFlurlRequest flurlReq = client + IFlurlRequest flurlReq = client.ProxyClient .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "out-trade-no", request.OutTradeNumber, "close"); return await client.SendFlurlRequestAsJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false); @@ -244,7 +244,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global if (request.MerchantId is null) request.MerchantId = client.Credentials.MerchantId; - IFlurlRequest flurlReq = client + IFlurlRequest flurlReq = client.ProxyClient .CreateFlurlRequest(request, HttpMethod.Post, "transactions", "out-trade-no", request.OutTradeNumber, "reverse") .SetQueryParam("mchid", request.MerchantId); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientParameterExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientParameterExtensions.cs index afce8c01..2d372026 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientParameterExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientParameterExtensions.cs @@ -18,7 +18,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static IDictionary GenerateParametersForJsapiPayRequest(this WechatTenpayGlobalClient client, string appId, string prepayId) { - return WechatTenpayClientParameterExtensions.GenerateParametersForJsapiPayRequest(client, appId, prepayId); + return WechatTenpayClientParameterExtensions.GenerateParametersForJsapiPayRequest(client.ProxyClient, appId, prepayId); } /// @@ -34,7 +34,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static IDictionary GenerateParametersForAppPayRequest(this WechatTenpayGlobalClient client, string appId, string prepayId) { - return WechatTenpayClientParameterExtensions.GenerateParametersForAppPayRequest(client, appId, prepayId); + return WechatTenpayClientParameterExtensions.GenerateParametersForAppPayRequest(client.ProxyClient, appId, prepayId); } /// @@ -51,7 +51,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static IDictionary GenerateParametersForAppPayRequest(this WechatTenpayGlobalClient client, string merchantId, string appId, string prepayId) { - return WechatTenpayClientParameterExtensions.GenerateParametersForAppPayRequest(client, merchantId, appId, prepayId); + return WechatTenpayClientParameterExtensions.GenerateParametersForAppPayRequest(client.ProxyClient, merchantId, appId, prepayId); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientRequestEncryptionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientRequestEncryptionExtensions.cs index b4dafbb5..d731c2c9 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientRequestEncryptionExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientRequestEncryptionExtensions.cs @@ -14,7 +14,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global public static TRequest EncryptRequestSensitiveProperty(this WechatTenpayGlobalClient client, TRequest request) where TRequest : WechatTenpayGlobalRequest { - return WechatTenpayClientRequestEncryptionExtensions.EncryptRequestSensitiveProperty(client, request); + return WechatTenpayClientRequestEncryptionExtensions.EncryptRequestSensitiveProperty(client.ProxyClient, request); } /// @@ -27,7 +27,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global public static Task EncryptRequestSensitivePropertyAsync(this WechatTenpayGlobalClient client, TRequest request, CancellationToken cancellationToken = default) where TRequest : WechatTenpayGlobalRequest { - return WechatTenpayClientRequestEncryptionExtensions.EncryptRequestSensitivePropertyAsync(client, request, cancellationToken); + return WechatTenpayClientRequestEncryptionExtensions.EncryptRequestSensitivePropertyAsync(client.ProxyClient, request, cancellationToken); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientResponseDecryptionExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientResponseDecryptionExtensions.cs index a0da0b76..1577e1ea 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientResponseDecryptionExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientResponseDecryptionExtensions.cs @@ -69,7 +69,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global return (DecryptResponseSensitiveProperty(client, queryCertificatesResponse) as TResponse)!; } - return WechatTenpayClientResponseDecryptionExtensions.DecryptResponseSensitiveProperty(client, response); + return WechatTenpayClientResponseDecryptionExtensions.DecryptResponseSensitiveProperty(client.ProxyClient, response); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientResponseVerificationExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientResponseVerificationExtensions.cs index fe63b415..7e132bfc 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientResponseVerificationExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/Extensions/WechatTenpayGlobalClientResponseVerificationExtensions.cs @@ -21,7 +21,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global public static ErroredResult VerifyResponseSignature(this WechatTenpayGlobalClient client, TResponse response) where TResponse : WechatTenpayGlobalResponse { - return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignature(client, response); + return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignature(client.ProxyClient, response); } /// @@ -40,7 +40,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static ErroredResult VerifyResponseSignature(this WechatTenpayGlobalClient client, string responseTimestamp, string responseNonce, string responseBody, string responseSignature, string responseSerialNumber) { - return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignature(client, responseTimestamp, responseNonce, responseBody, responseSignature, responseSerialNumber); + return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignature(client.ProxyClient, responseTimestamp, responseNonce, responseBody, responseSignature, responseSerialNumber); } /// @@ -60,7 +60,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static ErroredResult VerifyResponseSignature(this WechatTenpayGlobalClient client, string responseTimestamp, string responseNonce, string responseBody, string responseSignature, string responseSignatureType, string responseSerialNumber) { - return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignature(client, responseTimestamp, responseNonce, responseBody, responseSignature, responseSignatureType, responseSerialNumber); + return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignature(client.ProxyClient, responseTimestamp, responseNonce, responseBody, responseSignature, responseSignatureType, responseSerialNumber); } /// @@ -78,7 +78,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global public static Task VerifyResponseSignatureAsync(this WechatTenpayGlobalClient client, TResponse response, CancellationToken cancellationToken = default) where TResponse : WechatTenpayGlobalResponse { - return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignatureAsync(client, response, cancellationToken); + return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignatureAsync(client.ProxyClient, response, cancellationToken); } /// @@ -98,7 +98,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static Task VerifyResponseSignatureAsync(this WechatTenpayGlobalClient client, string responseTimestamp, string responseNonce, string responseBody, string responseSignature, string responseSerialNumber, CancellationToken cancellationToken = default) { - return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignatureAsync(client, responseTimestamp, responseNonce, responseBody, responseSignature, responseSerialNumber, cancellationToken); + return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignatureAsync(client.ProxyClient, responseTimestamp, responseNonce, responseBody, responseSignature, responseSerialNumber, cancellationToken); } /// @@ -119,7 +119,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// public static Task VerifyResponseSignatureAsync(this WechatTenpayGlobalClient client, string responseTimestamp, string responseNonce, string responseBody, string responseSignature, string responseSignatureType, string responseSerialNumber, CancellationToken cancellationToken = default) { - return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignatureAsync(client, responseTimestamp, responseNonce, responseBody, responseSignature, responseSignatureType, responseSerialNumber, cancellationToken); + return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignatureAsync(client.ProxyClient, responseTimestamp, responseNonce, responseBody, responseSignature, responseSignatureType, responseSerialNumber, cancellationToken); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/WechatTenpayGlobalClient.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/WechatTenpayGlobalClient.cs index e646fbb5..9cfae973 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/WechatTenpayGlobalClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/ExtendedSDK/Global/WechatTenpayGlobalClient.cs @@ -6,15 +6,35 @@ using Flurl.Http; namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global { + using _ROOT_ = SKIT.FlurlHttpClient.Wechat.TenpayV3; + using SKIT.FlurlHttpClient.Wechat.TenpayV3.Constants; + /// /// 一个微信支付 Global API HTTP 客户端。 /// - public class WechatTenpayGlobalClient : WechatTenpayClient + public class WechatTenpayGlobalClient : CommonClientBase, ICommonClient { + internal WechatTenpayClient ProxyClient { get; } + /// /// 获取当前客户端使用的微信支付商户凭证。 /// - public new Settings.Credentials Credentials { get; } + public Settings.Credentials Credentials { get; } + + /// + /// 获取当前客户端使用的微信支付平台证书管理器。 + /// + public _ROOT_.Settings.ICertificateManager PlatformCertificateManager { get; } + + /// + /// 获取是否自动加密请求中的敏感信息字段。 + /// + protected internal bool AutoEncryptRequestSensitiveProperty { get; } + + /// + /// 获取是否自动解密请求中的敏感信息字段。 + /// + protected internal bool AutoDecryptResponseSensitiveProperty { get; } /// /// 用指定的配置项初始化 类的新实例。 @@ -32,30 +52,43 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// /// internal protected WechatTenpayGlobalClient(WechatTenpayGlobalClientOptions options, HttpClient? httpClient, bool disposeClient = true) - : base( - new WechatTenpayClientOptions() - { - Timeout = options.Timeout, - Endpoint = options.Endpoint, - AcceptLanguage = options.AcceptLanguage, - SignScheme = options.SignScheme, - MerchantId = options.MerchantId, - MerchantV3Secret = options.MerchantV3Secret, - MerchantCertificateSerialNumber = options.MerchantCertificateSerialNumber, - MerchantCertificatePrivateKey = options.MerchantCertificatePrivateKey, - AutoEncryptRequestSensitiveProperty = options.AutoEncryptRequestSensitiveProperty, - AutoDecryptResponseSensitiveProperty = options.AutoDecryptResponseSensitiveProperty, - PlatformCertificateManager = options.PlatformCertificateManager - }, - httpClient, - disposeClient - ) + : base(httpClient, disposeClient) { if (options is null) throw new ArgumentNullException(nameof(options)); + ProxyClient = new WechatTenpayClient(new WechatTenpayClientOptions() + { + Timeout = options.Timeout, + Endpoint = options.Endpoint, + AcceptLanguage = options.AcceptLanguage, + SignScheme = options.SignScheme, + MerchantId = options.MerchantId, + MerchantV3Secret = options.MerchantV3Secret, + MerchantCertificateSerialNumber = options.MerchantCertificateSerialNumber, + MerchantCertificatePrivateKey = options.MerchantCertificatePrivateKey, + PlatformAuthScheme = _ROOT_.Settings.PlatformAuthScheme.Certificate, + PlatformCertificateManager = options.PlatformCertificateManager, + AutoEncryptRequestSensitiveProperty = options.AutoEncryptRequestSensitiveProperty, + AutoDecryptResponseSensitiveProperty = options.AutoDecryptResponseSensitiveProperty + }, httpClient, disposeClient); + Credentials = new Settings.Credentials(options); + PlatformCertificateManager = options.PlatformCertificateManager; + AutoEncryptRequestSensitiveProperty = options.AutoEncryptRequestSensitiveProperty; + AutoDecryptResponseSensitiveProperty = options.AutoDecryptResponseSensitiveProperty; FlurlClient.BaseUrl = options.Endpoint ?? WechatTenpayGlobalEndpoints.DEFAULT; + FlurlClient.WithHeader(HttpHeaders.Accept, "application/json"); + FlurlClient.WithHeader(HttpHeaders.AcceptLanguage, options.AcceptLanguage); + FlurlClient.WithHeader(HttpHeaders.UserAgent, $"OS/{Environment.OSVersion.Platform} SKIT.FlurlHttpClient.Wechat.Tenpay/{AssemblyProps.VERSION}"); + FlurlClient.WithTimeout(options.Timeout <= 0 ? Timeout.InfiniteTimeSpan : TimeSpan.FromMilliseconds(options.Timeout)); + + Interceptors.Add(new Interceptors.WechatTenpayRequestSigningInterceptor( + scheme: options.SignScheme, + mchId: options.MerchantId, + mchCertSn: options.MerchantCertificateSerialNumber, + mchCertPk: options.MerchantCertificatePrivateKey + )); } /// @@ -78,7 +111,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// /// /// - public new async Task SendFlurlRequestAsync(IFlurlRequest flurlRequest, HttpContent? httpContent = null, CancellationToken cancellationToken = default) + public async Task SendFlurlRequestAsync(IFlurlRequest flurlRequest, HttpContent? httpContent = null, CancellationToken cancellationToken = default) where T : WechatTenpayGlobalResponse, new() { if (flurlRequest is null) throw new ArgumentNullException(nameof(flurlRequest)); @@ -95,7 +128,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global /// /// /// - public new async Task SendFlurlRequestAsJsonAsync(IFlurlRequest flurlRequest, object? data = null, CancellationToken cancellationToken = default) + public async Task SendFlurlRequestAsJsonAsync(IFlurlRequest flurlRequest, object? data = null, CancellationToken cancellationToken = default) where T : WechatTenpayGlobalResponse, new() { if (flurlRequest is null) throw new ArgumentNullException(nameof(flurlRequest)); diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs index fe4db695..012c5300 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs @@ -7,13 +7,13 @@ using Flurl.Http; namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 { + using SKIT.FlurlHttpClient.Wechat.TenpayV3.Constants; + /// /// 一个微信支付 API HTTP 客户端。 /// public class WechatTenpayClient : CommonClientBase, ICommonClient { - private static readonly string ASSEMBLY_VERSION = Assembly.GetAssembly(typeof(WechatTenpayClient))!.GetName()!.Version!.ToString(); - /// /// 获取当前客户端使用的微信支付商户凭证。 /// @@ -74,7 +74,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 FlurlClient.BaseUrl = options.Endpoint ?? WechatTenpayEndpoints.DEFAULT; FlurlClient.WithHeader(HttpHeaders.Accept, "application/json"); FlurlClient.WithHeader(HttpHeaders.AcceptLanguage, options.AcceptLanguage); - FlurlClient.WithHeader(HttpHeaders.UserAgent, $"OS/{Environment.OSVersion.Platform} SKIT.FlurlHttpClient.Wechat.Tenpay/{ASSEMBLY_VERSION}"); + FlurlClient.WithHeader(HttpHeaders.UserAgent, $"OS/{Environment.OSVersion.Platform} SKIT.FlurlHttpClient.Wechat.Tenpay/{AssemblyProps.VERSION}"); FlurlClient.WithTimeout(options.Timeout <= 0 ? Timeout.InfiniteTimeSpan : TimeSpan.FromMilliseconds(options.Timeout)); Interceptors.Add(new Interceptors.WechatTenpayRequestSigningInterceptor( @@ -121,7 +121,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 where T : WechatTenpayResponse, new() { if (flurlRequest is null) throw new ArgumentNullException(nameof(flurlRequest)); - if (this is ExtendedSDK.Global.WechatTenpayGlobalClient) throw new InvalidOperationException("This client only supports WeChatPay Global business. Maybe you have misused the client builder or imported a wrong namespaces."); using IFlurlResponse flurlResponse = await base.SendFlurlRequestAsync(flurlRequest, httpContent, cancellationToken).ConfigureAwait(false); return await WrapFlurlResponseAsJsonAsync(flurlResponse, cancellationToken).ConfigureAwait(false); @@ -139,7 +138,6 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 where T : WechatTenpayResponse, new() { if (flurlRequest is null) throw new ArgumentNullException(nameof(flurlRequest)); - if (this is ExtendedSDK.Global.WechatTenpayGlobalClient) throw new InvalidOperationException("This client only supports WeChatPay Global business. Maybe you have misused the client builder or imported a wrong namespaces."); bool isSimpleRequest = data is null || flurlRequest.Verb == HttpMethod.Get ||