feat(tenpayv3): WechatTenpayGlobalClient 不再继承自 WechatTenpayClient

This commit is contained in:
Fu Diwei 2025-07-12 12:48:32 +08:00
parent 827a32ee0b
commit acdc13a8cf
12 changed files with 101 additions and 61 deletions

View File

@ -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();
}
}

View File

@ -28,7 +28,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
public static T DecryptEventResource<T>(this WechatTenpayGlobalClient client, WechatTenpayGlobalEvent webhookEvent)
where T : WechatTenpayGlobalEvent.Types.IDecryptedResource, new()
{
return WechatTenpayClientEventDecryptionExtensions.DecryptEventResource<T>(client, webhookEvent.Resource);
return WechatTenpayClientEventDecryptionExtensions.DecryptEventResource<T>(client.ProxyClient, webhookEvent.Resource);
}
/// <summary>
@ -41,7 +41,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
public static T DecryptEventResource<T>(this WechatTenpayGlobalClient client, WechatTenpayGlobalEvent.Types.Resource webhookEventResource)
where T : WechatTenpayGlobalEvent.Types.IDecryptedResource, new()
{
return WechatTenpayClientEventDecryptionExtensions.DecryptEventResource<T>(client, webhookEventResource);
return WechatTenpayClientEventDecryptionExtensions.DecryptEventResource<T>(client.ProxyClient, webhookEventResource);
}
}
}

View File

@ -23,7 +23,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
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);
}
/// <summary>
@ -43,7 +43,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
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);
}
/// <summary>
@ -63,7 +63,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
public static Task<ErroredResult> 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);
}
/// <summary>
@ -84,7 +84,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
public static Task<ErroredResult> 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);
}
}
}

View File

@ -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<Models.QueryCertificatesResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);

View File

@ -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<Models.CreatePartnerTransactionAppResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
return await client.ProxyClient.SendFlurlRequestAsJsonAsync<Models.CreatePartnerTransactionAppResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
@ -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<Models.CreatePartnerTransactionJsapiResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
return await client.ProxyClient.SendFlurlRequestAsJsonAsync<Models.CreatePartnerTransactionJsapiResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
@ -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<Models.CreatePartnerTransactionNativeResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
return await client.ProxyClient.SendFlurlRequestAsJsonAsync<Models.CreatePartnerTransactionNativeResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
@ -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<Models.ClosePartnerTransactionResponse>(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);

View File

@ -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<Models.CreateTransactionAppResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
return await client.ProxyClient.SendFlurlRequestAsJsonAsync<Models.CreateTransactionAppResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
@ -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<Models.CreateTransactionMWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
return await client.ProxyClient.SendFlurlRequestAsJsonAsync<Models.CreateTransactionMWebResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
@ -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<Models.CreateTransactionJsapiResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
return await client.ProxyClient.SendFlurlRequestAsJsonAsync<Models.CreateTransactionJsapiResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
@ -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<Models.CreateTransactionNativeResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
return await client.ProxyClient.SendFlurlRequestAsJsonAsync<Models.CreateTransactionNativeResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
@ -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<Models.CloseTransactionResponse>(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);

View File

@ -18,7 +18,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
public static IDictionary<string, string> GenerateParametersForJsapiPayRequest(this WechatTenpayGlobalClient client, string appId, string prepayId)
{
return WechatTenpayClientParameterExtensions.GenerateParametersForJsapiPayRequest(client, appId, prepayId);
return WechatTenpayClientParameterExtensions.GenerateParametersForJsapiPayRequest(client.ProxyClient, appId, prepayId);
}
/// <summary>
@ -34,7 +34,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
public static IDictionary<string, string> GenerateParametersForAppPayRequest(this WechatTenpayGlobalClient client, string appId, string prepayId)
{
return WechatTenpayClientParameterExtensions.GenerateParametersForAppPayRequest(client, appId, prepayId);
return WechatTenpayClientParameterExtensions.GenerateParametersForAppPayRequest(client.ProxyClient, appId, prepayId);
}
/// <summary>
@ -51,7 +51,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
public static IDictionary<string, string> 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);
}
}
}

View File

@ -14,7 +14,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
public static TRequest EncryptRequestSensitiveProperty<TRequest>(this WechatTenpayGlobalClient client, TRequest request)
where TRequest : WechatTenpayGlobalRequest
{
return WechatTenpayClientRequestEncryptionExtensions.EncryptRequestSensitiveProperty<TRequest>(client, request);
return WechatTenpayClientRequestEncryptionExtensions.EncryptRequestSensitiveProperty<TRequest>(client.ProxyClient, request);
}
/// <summary>
@ -27,7 +27,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
public static Task<TRequest> EncryptRequestSensitivePropertyAsync<TRequest>(this WechatTenpayGlobalClient client, TRequest request, CancellationToken cancellationToken = default)
where TRequest : WechatTenpayGlobalRequest
{
return WechatTenpayClientRequestEncryptionExtensions.EncryptRequestSensitivePropertyAsync<TRequest>(client, request, cancellationToken);
return WechatTenpayClientRequestEncryptionExtensions.EncryptRequestSensitivePropertyAsync<TRequest>(client.ProxyClient, request, cancellationToken);
}
}
}

View File

@ -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);
}
}
}

View File

@ -21,7 +21,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
public static ErroredResult VerifyResponseSignature<TResponse>(this WechatTenpayGlobalClient client, TResponse response)
where TResponse : WechatTenpayGlobalResponse
{
return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignature(client, response);
return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignature(client.ProxyClient, response);
}
/// <summary>
@ -40,7 +40,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
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);
}
/// <summary>
@ -60,7 +60,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
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);
}
/// <summary>
@ -78,7 +78,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
public static Task<ErroredResult> VerifyResponseSignatureAsync<TResponse>(this WechatTenpayGlobalClient client, TResponse response, CancellationToken cancellationToken = default)
where TResponse : WechatTenpayGlobalResponse
{
return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignatureAsync(client, response, cancellationToken);
return WechatTenpayClientResponseVerificationExtensions.VerifyResponseSignatureAsync(client.ProxyClient, response, cancellationToken);
}
/// <summary>
@ -98,7 +98,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
public static Task<ErroredResult> 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);
}
/// <summary>
@ -119,7 +119,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <returns></returns>
public static Task<ErroredResult> 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);
}
}
}

View File

@ -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;
/// <summary>
/// 一个微信支付 Global API HTTP 客户端。
/// </summary>
public class WechatTenpayGlobalClient : WechatTenpayClient
public class WechatTenpayGlobalClient : CommonClientBase, ICommonClient
{
internal WechatTenpayClient ProxyClient { get; }
/// <summary>
/// 获取当前客户端使用的微信支付商户凭证。
/// </summary>
public new Settings.Credentials Credentials { get; }
public Settings.Credentials Credentials { get; }
/// <summary>
/// 获取当前客户端使用的微信支付平台证书管理器。
/// </summary>
public _ROOT_.Settings.ICertificateManager PlatformCertificateManager { get; }
/// <summary>
/// 获取是否自动加密请求中的敏感信息字段。
/// </summary>
protected internal bool AutoEncryptRequestSensitiveProperty { get; }
/// <summary>
/// 获取是否自动解密请求中的敏感信息字段。
/// </summary>
protected internal bool AutoDecryptResponseSensitiveProperty { get; }
/// <summary>
/// 用指定的配置项初始化 <see cref="WechatTenpayGlobalClient"/> 类的新实例。
@ -32,30 +52,43 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <param name="httpClient"></param>
/// <param name="disposeClient"></param>
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
));
}
/// <summary>
@ -78,7 +111,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.ExtendedSDK.Global
/// <param name="httpContent"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public new async Task<T> SendFlurlRequestAsync<T>(IFlurlRequest flurlRequest, HttpContent? httpContent = null, CancellationToken cancellationToken = default)
public async Task<T> SendFlurlRequestAsync<T>(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
/// <param name="data"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public new async Task<T> SendFlurlRequestAsJsonAsync<T>(IFlurlRequest flurlRequest, object? data = null, CancellationToken cancellationToken = default)
public async Task<T> SendFlurlRequestAsJsonAsync<T>(IFlurlRequest flurlRequest, object? data = null, CancellationToken cancellationToken = default)
where T : WechatTenpayGlobalResponse, new()
{
if (flurlRequest is null) throw new ArgumentNullException(nameof(flurlRequest));

View File

@ -7,13 +7,13 @@ using Flurl.Http;
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
{
using SKIT.FlurlHttpClient.Wechat.TenpayV3.Constants;
/// <summary>
/// 一个微信支付 API HTTP 客户端。
/// </summary>
public class WechatTenpayClient : CommonClientBase, ICommonClient
{
private static readonly string ASSEMBLY_VERSION = Assembly.GetAssembly(typeof(WechatTenpayClient))!.GetName()!.Version!.ToString();
/// <summary>
/// 获取当前客户端使用的微信支付商户凭证。
/// </summary>
@ -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<T>(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 ||