using System; using System.Text; using System.Threading; using System.Threading.Tasks; namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 { using SKIT.FlurlHttpClient.Primitives; using SKIT.FlurlHttpClient.Wechat.TenpayV3.Constants; public static class WechatTenpayClientResponseVerificationExtensions { /// /// 验证响应签名。 /// /// REF:
///
/// ///
///
/// /// /// /// public static ErroredResult VerifyResponseSignature(this WechatTenpayClient client, TResponse response) where TResponse : WechatTenpayResponse { if (client is null) throw new ArgumentNullException(nameof(client)); if (response is null) throw new ArgumentNullException(nameof(response)); return VerifyResponseSignature( client, responseTimestamp: response.WechatpayTimestamp, responseNonce: response.WechatpayNonce, responseBody: Encoding.UTF8.GetString(response.GetRawBytes()), responseSignature: response.WechatpaySignature, responseSignatureType: response.WechatpaySignatureType, responseSerialNumber: response.WechatpayCertificateSerialNumber ); } /// /// 验证响应签名。 /// /// REF:
///
/// ///
///
/// /// /// 。 /// /// /// /// public static ErroredResult VerifyResponseSignature(this WechatTenpayClient client, string responseTimestamp, string responseNonce, string responseBody, string responseSignature, string responseSerialNumber) { return VerifyResponseSignature( client, responseTimestamp: responseTimestamp, responseNonce: responseNonce, responseBody: responseBody, responseSignature: responseSignature, responseSignatureType: SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, responseSerialNumber ); } /// /// 验证响应签名。 /// /// REF:
///
/// ///
///
/// /// /// 。 /// /// /// /// /// public static ErroredResult VerifyResponseSignature(this WechatTenpayClient client, string responseTimestamp, string responseNonce, string responseBody, string responseSignature, string responseSignatureType, string responseSerialNumber) { if (client is null) throw new ArgumentNullException(nameof(client)); return WechatTenpayClientSigningExtensions.VerifySignature( client, strTimestamp: responseTimestamp, strNonce: responseNonce, strContent: responseBody, strSignature: responseSignature, strSignScheme: responseSignatureType, strSerialNumber: responseSerialNumber ); } /// /// 异步验证响应签名。 /// /// REF:
///
/// ///
///
/// /// /// /// /// public static Task VerifyResponseSignatureAsync(this WechatTenpayClient client, TResponse response, CancellationToken cancellationToken = default) where TResponse : WechatTenpayResponse { if (client is null) throw new ArgumentNullException(nameof(client)); if (response is null) throw new ArgumentNullException(nameof(response)); return VerifyResponseSignatureAsync( client, responseTimestamp: response.WechatpayTimestamp, responseNonce: response.WechatpayNonce, responseBody: Encoding.UTF8.GetString(response.GetRawBytes()), responseSignature: response.WechatpaySignature, responseSignatureType: response.WechatpaySignatureType, responseSerialNumber: response.WechatpayCertificateSerialNumber, cancellationToken: cancellationToken ); } /// /// 异步验证响应签名。 /// /// REF:
///
/// ///
///
/// /// /// 。 /// /// /// /// /// public static Task VerifyResponseSignatureAsync(this WechatTenpayClient client, string responseTimestamp, string responseNonce, string responseBody, string responseSignature, string responseSerialNumber, CancellationToken cancellationToken = default) { return VerifyResponseSignatureAsync( client, responseTimestamp: responseTimestamp, responseNonce: responseNonce, responseBody: responseBody, responseSignature: responseSignature, responseSignatureType: SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256, responseSerialNumber: responseSerialNumber, cancellationToken ); } /// /// 异步验证响应签名。 /// /// REF:
///
/// ///
///
/// /// /// 。 /// /// /// /// /// /// public static Task VerifyResponseSignatureAsync(this WechatTenpayClient client, string responseTimestamp, string responseNonce, string responseBody, string responseSignature, string responseSignatureType, string responseSerialNumber, CancellationToken cancellationToken = default) { if (client is null) throw new ArgumentNullException(nameof(client)); return WechatTenpayClientSigningExtensions.VerifySignatureAsync( client, strTimestamp: responseTimestamp, strNonce: responseNonce, strContent: responseBody, strSignature: responseSignature, strSignScheme: responseSignatureType, strSerialNumber: responseSerialNumber, cancellationToken ); } } }