From 7d565811a12c1139a0516ad7568d6fb1c3939b53 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 5 Feb 2024 13:40:44 +0800 Subject: [PATCH] =?UTF-8?q?feat(tenpayv2):=20=E5=9F=BA=E4=BA=8E=20ErroredR?= =?UTF-8?q?esult=20=E6=94=B9=E9=80=A0=E9=AA=8C=E7=AD=BE=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=89=A9=E5=B1=95=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...TenpayClientEventVerificationExtensions.cs | 32 ++++++++----------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientEventVerificationExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientEventVerificationExtensions.cs index 6340e197..d46b28c2 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientEventVerificationExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV2/Extensions/WechatTenpayClientEventVerificationExtensions.cs @@ -4,6 +4,8 @@ using System.Xml; namespace SKIT.FlurlHttpClient.Wechat.TenpayV2 { + using SKIT.FlurlHttpClient.Primitives; + /// /// 为 提供回调通知事件签名验证的扩展方法。 /// @@ -15,24 +17,12 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2 /// /// 微信回调通知中请求正文。 /// - /// - public static bool VerifyEventSignature(this WechatTenpayClient client, string webhookBody) - { - return VerifyEventSignature(client, webhookBody, out _); - } - - /// - /// 验证回调通知事件签名。 - /// - /// - /// 微信回调通知中请求正文。 - /// - /// - /// - public static bool VerifyEventSignature(this WechatTenpayClient client, string webhookBody, out Exception? error) + public static ErroredResult VerifyEventSignature(this WechatTenpayClient client, string webhookBody) { if (client is null) throw new ArgumentNullException(nameof(client)); + ErroredResult result; + try { @@ -49,14 +39,18 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV2 string signData = Utilities.JsonHelper.ParseToSortedQueryString(json); string actualSign = Utilities.RequestSigner.SignFromSortedQueryString(signData, client.Credentials.MerchantSecret, signType); - error = null; - return string.Equals(expectedSign, actualSign, StringComparison.OrdinalIgnoreCase); + bool valid = string.Equals(expectedSign, actualSign, StringComparison.OrdinalIgnoreCase); + if (valid) + result = ErroredResult.Ok(); + else + result = ErroredResult.Fail(new Exception($"Signature does not match. Maybe \"{actualSign}\" is an illegal signature.")); } catch (Exception ex) { - error = new WechatTenpayException("Failed to verify event. Please see the inner exception for more details.", ex); - return false; + result = ErroredResult.Fail(ex); } + + return result; } } }