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