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