mirror of
https://gitee.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git
synced 2025-09-20 02:29:40 +08:00
135 lines
7.8 KiB
C#
135 lines
7.8 KiB
C#
using System;
|
|
|
|
namespace SKIT.FlurlHttpClient.Wechat.TenpayV3
|
|
{
|
|
/// <summary>
|
|
/// 为 <see cref="WechatTenpayClient"/> 提供回调通知事件签名验证的扩展方法。
|
|
/// </summary>
|
|
public static class WechatTenpayClientEventVerificationExtensions
|
|
{
|
|
/// <summary>
|
|
/// <para>验证回调通知事件签名。</para>
|
|
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml </para>
|
|
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_1.shtml </para>
|
|
/// </summary>
|
|
/// <param name="client"></param>
|
|
/// <param name="callbackTimestamp">微信回调通知中的 Wechatpay-Timestamp 字段。</param>
|
|
/// <param name="callbackNonce">微信回调通知中的 Wechatpay-Nonce 字段。</param>
|
|
/// <param name="callbackBody">微信回调通知中请求正文。</param>
|
|
/// <param name="callbackSignature">微信回调通知中的 Wechatpay-Signature 字段。</param>
|
|
/// <param name="callbackSerialNumber">微信回调通知中的 Wechatpay-Serial 字段。</param>
|
|
/// <returns></returns>
|
|
public static bool VerifyEventSignature(this WechatTenpayClient client, string callbackTimestamp, string callbackNonce, string callbackBody, string callbackSignature, string callbackSerialNumber)
|
|
{
|
|
return VerifyEventSignature(
|
|
client,
|
|
callbackTimestamp: callbackTimestamp,
|
|
callbackNonce: callbackNonce,
|
|
callbackBody: callbackBody,
|
|
callbackSignature: callbackSignature,
|
|
callbackSignatureType: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256,
|
|
callbackSerialNumber: callbackSerialNumber
|
|
);
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>验证回调通知事件签名。</para>
|
|
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml </para>
|
|
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_1.shtml </para>
|
|
/// </summary>
|
|
/// <param name="client"></param>
|
|
/// <param name="callbackTimestamp">微信回调通知中的 Wechatpay-Timestamp 字段。</param>
|
|
/// <param name="callbackNonce">微信回调通知中的 Wechatpay-Nonce 字段。</param>
|
|
/// <param name="callbackBody">微信回调通知中请求正文。</param>
|
|
/// <param name="callbackSignature">微信回调通知中的 Wechatpay-Signature 字段。</param>
|
|
/// <param name="callbackSignatureType">微信回调通知中的 Wechatpay-Signature-Type 字段。</param>
|
|
/// <param name="callbackSerialNumber">微信回调通知中的 Wechatpay-Serial 字段。</param>
|
|
/// <returns></returns>
|
|
public static bool VerifyEventSignature(this WechatTenpayClient client, string callbackTimestamp, string callbackNonce, string callbackBody, string callbackSignature, string callbackSignatureType, string callbackSerialNumber)
|
|
{
|
|
return VerifyEventSignature(
|
|
client,
|
|
callbackTimestamp: callbackTimestamp,
|
|
callbackNonce: callbackNonce,
|
|
callbackBody: callbackBody,
|
|
callbackSignature: callbackSignature,
|
|
callbackSignatureType: callbackSignatureType,
|
|
callbackSerialNumber: callbackSerialNumber,
|
|
out _
|
|
);
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>验证回调通知事件签名。</para>
|
|
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml </para>
|
|
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_1.shtml </para>
|
|
/// </summary>
|
|
/// <param name="client"></param>
|
|
/// <param name="callbackTimestamp">微信回调通知中的 Wechatpay-Timestamp 字段。</param>
|
|
/// <param name="callbackNonce">微信回调通知中的 Wechatpay-Nonce 字段。</param>
|
|
/// <param name="callbackBody">微信回调通知中请求正文。</param>
|
|
/// <param name="callbackSignature">微信回调通知中的 Wechatpay-Signature 字段。</param>
|
|
/// <param name="callbackSerialNumber">微信回调通知中的 Wechatpay-Serial 字段。</param>
|
|
/// <param name="error"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="ArgumentNullException"></exception>
|
|
public static bool VerifyEventSignature(this WechatTenpayClient client, string callbackTimestamp, string callbackNonce, string callbackBody, string callbackSignature, string callbackSerialNumber, out Exception? error)
|
|
{
|
|
return VerifyEventSignature(
|
|
client,
|
|
callbackTimestamp: callbackTimestamp,
|
|
callbackNonce: callbackNonce,
|
|
callbackBody: callbackBody,
|
|
callbackSignature: callbackSignature,
|
|
callbackSignatureType: Constants.SignSchemes.WECHATPAY2_RSA_2048_WITH_SHA256,
|
|
callbackSerialNumber: callbackSerialNumber,
|
|
out error
|
|
);
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>验证回调通知事件签名。</para>
|
|
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml </para>
|
|
/// <para>REF: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay4_1.shtml </para>
|
|
/// </summary>
|
|
/// <param name="client"></param>
|
|
/// <param name="callbackTimestamp">微信回调通知中的 Wechatpay-Timestamp 字段。</param>
|
|
/// <param name="callbackNonce">微信回调通知中的 Wechatpay-Nonce 字段。</param>
|
|
/// <param name="callbackBody">微信回调通知中请求正文。</param>
|
|
/// <param name="callbackSignature">微信回调通知中的 Wechatpay-Signature 字段。</param>
|
|
/// <param name="callbackSignatureType">微信回调通知中的 Wechatpay-Signature-Type 字段。</param>
|
|
/// <param name="callbackSerialNumber">微信回调通知中的 Wechatpay-Serial 字段。</param>
|
|
/// <param name="error"></param>
|
|
/// <returns></returns>
|
|
/// <exception cref="ArgumentNullException"></exception>
|
|
public static bool VerifyEventSignature(this WechatTenpayClient client, string callbackTimestamp, string callbackNonce, string callbackBody, string callbackSignature, string callbackSignatureType, string callbackSerialNumber, out Exception? error)
|
|
{
|
|
if (client == null) throw new ArgumentNullException(nameof(client));
|
|
if (callbackTimestamp == null) throw new ArgumentNullException(nameof(callbackTimestamp));
|
|
if (callbackNonce == null) throw new ArgumentNullException(nameof(callbackNonce));
|
|
if (callbackBody == null) throw new ArgumentNullException(nameof(callbackBody));
|
|
if (callbackSignature == null) throw new ArgumentNullException(nameof(callbackSignature));
|
|
if (callbackSignatureType == null) throw new ArgumentNullException(nameof(callbackSignatureType));
|
|
if (callbackSerialNumber == null) throw new ArgumentNullException(nameof(callbackSerialNumber));
|
|
|
|
bool ret = WechatTenpayClientSignExtensions.VerifySignature(
|
|
client,
|
|
strTimestamp: callbackTimestamp,
|
|
strNonce: callbackNonce,
|
|
strContent: callbackBody,
|
|
strSignature: callbackSignature,
|
|
strSignatureScheme: callbackSignatureType,
|
|
strSerialNumber: callbackSerialNumber,
|
|
out error
|
|
);
|
|
|
|
if (error != null)
|
|
{
|
|
error = new Exceptions.WechatTenpayEventVerificationException("Verify signature of event failed. Please see the `InnerException` for more details.", error);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
}
|
|
}
|