diff --git a/Directory.Build.props b/Directory.Build.props index 22c9af4..b7f3e05 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,14 +1,14 @@  - net8.0 + netstandard2.0;netstandard2.1 8.0.0 - 8.1.0 + 8.2.0 latest enable enable - 8.1.0 + 8.2.0 $(NoWarn);CS1591;CS8618;CA2211 tooclian toocliancode diff --git a/src/WeChat.Applet/Requests/AccessToken.cs b/src/WeChat.Applet/Requests/AccessToken.cs index 5496508..6ab4cb6 100644 --- a/src/WeChat.Applet/Requests/AccessToken.cs +++ b/src/WeChat.Applet/Requests/AccessToken.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using System.Text.Json.Serialization; - -namespace WeChat.Applet; +namespace WeChat.Applet; /// /// 【微信小程序】获取接口调用凭据 diff --git a/src/WeChat.Applet/Requests/CheckSession.cs b/src/WeChat.Applet/Requests/CheckSession.cs index 51610f7..976297f 100644 --- a/src/WeChat.Applet/Requests/CheckSession.cs +++ b/src/WeChat.Applet/Requests/CheckSession.cs @@ -1,6 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; namespace WeChat.Applet; diff --git a/src/WeChat.Applet/Requests/Code2Session.cs b/src/WeChat.Applet/Requests/Code2Session.cs index a106137..b2d1916 100644 --- a/src/WeChat.Applet/Requests/Code2Session.cs +++ b/src/WeChat.Applet/Requests/Code2Session.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using System.Text.Json.Serialization; - -namespace WeChat.Applet; +namespace WeChat.Applet; /// /// 【微信小程序】小程序登录 diff --git a/src/WeChat.Applet/Requests/CreateQRCode.cs b/src/WeChat.Applet/Requests/CreateQRCode.cs index fac2d46..49f725d 100644 --- a/src/WeChat.Applet/Requests/CreateQRCode.cs +++ b/src/WeChat.Applet/Requests/CreateQRCode.cs @@ -1,6 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using System.Text; @@ -69,7 +67,7 @@ public override async Task Response(IHttpResponseConte var content = await context.Message.Content.ReadAsStringAsync(); WeChatAppletHttpResponse? response = null; - if (content != null && content.StartsWith('{') && content.EndsWith('}')) + if (content != null && content.StartsWith("{") && content.EndsWith("}")) { try { diff --git a/src/WeChat.Applet/Requests/GenerateNFCScheme.cs b/src/WeChat.Applet/Requests/GenerateNFCScheme.cs index 1571128..60eacd0 100644 --- a/src/WeChat.Applet/Requests/GenerateNFCScheme.cs +++ b/src/WeChat.Applet/Requests/GenerateNFCScheme.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; - -using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; #pragma warning disable CS8601 diff --git a/src/WeChat.Applet/Requests/GenerateScheme.cs b/src/WeChat.Applet/Requests/GenerateScheme.cs index 3f97854..606be82 100644 --- a/src/WeChat.Applet/Requests/GenerateScheme.cs +++ b/src/WeChat.Applet/Requests/GenerateScheme.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; - -using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; #pragma warning disable CS8601 diff --git a/src/WeChat.Applet/Requests/GenerateShortLink.cs b/src/WeChat.Applet/Requests/GenerateShortLink.cs index 31bd5c8..4d80ade 100644 --- a/src/WeChat.Applet/Requests/GenerateShortLink.cs +++ b/src/WeChat.Applet/Requests/GenerateShortLink.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; - -using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; #pragma warning disable CS8601 diff --git a/src/WeChat.Applet/Requests/GenerateUrlLink.cs b/src/WeChat.Applet/Requests/GenerateUrlLink.cs index d318df1..2eba27a 100644 --- a/src/WeChat.Applet/Requests/GenerateUrlLink.cs +++ b/src/WeChat.Applet/Requests/GenerateUrlLink.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; - -using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; #pragma warning disable CS8601 diff --git a/src/WeChat.Applet/Requests/GetPaidUnionid.cs b/src/WeChat.Applet/Requests/GetPaidUnionid.cs index dc87f03..954ccc0 100644 --- a/src/WeChat.Applet/Requests/GetPaidUnionid.cs +++ b/src/WeChat.Applet/Requests/GetPaidUnionid.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; - -using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; namespace WeChat.Applet; diff --git a/src/WeChat.Applet/Requests/GetPhoneNumber.cs b/src/WeChat.Applet/Requests/GetPhoneNumber.cs index 2447148..ecf894b 100644 --- a/src/WeChat.Applet/Requests/GetPhoneNumber.cs +++ b/src/WeChat.Applet/Requests/GetPhoneNumber.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; - -using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; namespace WeChat.Applet; diff --git a/src/WeChat.Applet/Requests/GetQRCode.cs b/src/WeChat.Applet/Requests/GetQRCode.cs index 40a3c1a..05b1e0f 100644 --- a/src/WeChat.Applet/Requests/GetQRCode.cs +++ b/src/WeChat.Applet/Requests/GetQRCode.cs @@ -1,9 +1,6 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using System.Text; -using System.Text.Json.Serialization; #pragma warning disable CS8601 @@ -114,7 +111,7 @@ public override async Task Response(IHttpResponseConte var content = await context.Message.Content.ReadAsStringAsync(); WeChatAppletHttpResponse? response = null; - if (content != null && content.StartsWith('{') && content.EndsWith('}')) + if (content != null && content.StartsWith("{") && content.EndsWith("}")) { try { diff --git a/src/WeChat.Applet/Requests/GetUnlimitedQRCode.cs b/src/WeChat.Applet/Requests/GetUnlimitedQRCode.cs index 9b01e29..d976834 100644 --- a/src/WeChat.Applet/Requests/GetUnlimitedQRCode.cs +++ b/src/WeChat.Applet/Requests/GetUnlimitedQRCode.cs @@ -1,9 +1,6 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using System.Text; -using System.Text.Json.Serialization; #pragma warning disable CS8601 @@ -128,7 +125,7 @@ public override async Task Response(IHttpResponseConte var content = await context.Message.Content.ReadAsStringAsync(); WeChatAppletHttpResponse? response = null; - if (content != null && content.StartsWith('{') && content.EndsWith('}')) + if (content != null && content.StartsWith("{") && content.EndsWith("}")) { try { diff --git a/src/WeChat.Applet/Requests/QueryScheme.cs b/src/WeChat.Applet/Requests/QueryScheme.cs index c489346..7dd4754 100644 --- a/src/WeChat.Applet/Requests/QueryScheme.cs +++ b/src/WeChat.Applet/Requests/QueryScheme.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; - -using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; #pragma warning disable CS8601 diff --git a/src/WeChat.Applet/Requests/QueryUrlLink.cs b/src/WeChat.Applet/Requests/QueryUrlLink.cs index fece0b2..ac97f06 100644 --- a/src/WeChat.Applet/Requests/QueryUrlLink.cs +++ b/src/WeChat.Applet/Requests/QueryUrlLink.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; - -using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; #pragma warning disable CS8601 diff --git a/src/WeChat.Applet/Requests/ResetSession.cs b/src/WeChat.Applet/Requests/ResetSession.cs index b03f056..a6d251d 100644 --- a/src/WeChat.Applet/Requests/ResetSession.cs +++ b/src/WeChat.Applet/Requests/ResetSession.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; - -using System.Text.Json.Serialization; +using Microsoft.Extensions.DependencyInjection; namespace WeChat.Applet; diff --git a/src/WeChat.Applet/WeChat.Applet.csproj b/src/WeChat.Applet/WeChat.Applet.csproj index b94ea58..d3db5b9 100644 --- a/src/WeChat.Applet/WeChat.Applet.csproj +++ b/src/WeChat.Applet/WeChat.Applet.csproj @@ -1,9 +1,16 @@  - $(TargetFrameworkVersion) + $(TargetFrameworkVersion) + + + + + + + diff --git a/src/WeChat.Applet/WeChatAppletAccessTokenStore.cs b/src/WeChat.Applet/WeChatAppletAccessTokenStore.cs index 85d6399..97793e6 100644 --- a/src/WeChat.Applet/WeChatAppletAccessTokenStore.cs +++ b/src/WeChat.Applet/WeChatAppletAccessTokenStore.cs @@ -1,10 +1,6 @@ -using Mediation; - -using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Options; -using System.Text.Json; - using WeChat.Applet; namespace WeChat; diff --git a/src/WeChat.Applet/WeChatAppletHttpResponse.cs b/src/WeChat.Applet/WeChatAppletHttpResponse.cs index 40f957b..8a2b0e1 100644 --- a/src/WeChat.Applet/WeChatAppletHttpResponse.cs +++ b/src/WeChat.Applet/WeChatAppletHttpResponse.cs @@ -1,6 +1,4 @@ -using System.Text.Json.Serialization; - -namespace WeChat; +namespace WeChat; public class WeChatAppletHttpResponse : WeChatHttpResponse { diff --git a/src/WeChat.Mp/Requests/AccessToken.cs b/src/WeChat.Mp/Requests/AccessToken.cs index 2d1ada1..432d17a 100644 --- a/src/WeChat.Mp/Requests/AccessToken.cs +++ b/src/WeChat.Mp/Requests/AccessToken.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using System.Text.Json.Serialization; - -namespace WeChat.Mp; +namespace WeChat.Mp; /// /// 【微信公众号】 access_token 请求 diff --git a/src/WeChat.Mp/Requests/JsapiConfig.cs b/src/WeChat.Mp/Requests/JsapiConfig.cs index d7816c9..a03c22e 100644 --- a/src/WeChat.Mp/Requests/JsapiConfig.cs +++ b/src/WeChat.Mp/Requests/JsapiConfig.cs @@ -1,7 +1,4 @@ -using Mediation; -using Mediation.HttpClient; - -using Microsoft.Extensions.Options; +using Microsoft.Extensions.Options; namespace WeChat.Mp; @@ -15,17 +12,26 @@ public class JsapiConfig /// /// 响应 /// - /// 应用号 - /// 时间戳 - /// 随机字符串 - /// 签名 - public record Response(string AppId, string Timestamp, string NonceStr, string Signature); + /// 应用号 + /// 时间戳 + /// 随机字符串 + /// 签名 + public class Response(string appId, string timestamp, string nonceStr, string signature) + { + public string AppId { get; } = appId; + public string Timestamp { get; } = timestamp; + public string NonceStr { get; } = nonceStr; + public string Signature { get; } = signature; + } /// /// 请求 /// - /// 调用 jsapi 页面链接地址 - public record Request(string Url) : IRequest; + /// 调用 jsapi 页面链接地址 + public class Request(string url) : IRequest + { + public string Url { get; } = url; + } /// /// diff --git a/src/WeChat.Mp/Requests/MediaGet.cs b/src/WeChat.Mp/Requests/MediaGet.cs index 3927c52..f6c8a4b 100644 --- a/src/WeChat.Mp/Requests/MediaGet.cs +++ b/src/WeChat.Mp/Requests/MediaGet.cs @@ -1,7 +1,4 @@ -using Mediation.HttpClient; - -using System.Text; -using System.Text.Json.Serialization; +using System.Text; namespace WeChat.Mp; @@ -47,7 +44,7 @@ public override async Task Response(IHttpResponseContext context) var content = await context.Message.Content.ReadAsStringAsync(); Response? response = null; - if (content != null && content.StartsWith('{') && content.EndsWith('}')) + if (content != null && content.StartsWith("{") && content.EndsWith("}")) { try { diff --git a/src/WeChat.Mp/Requests/MediaUploadImg.cs b/src/WeChat.Mp/Requests/MediaUploadImg.cs index 8c516a8..27f6cde 100644 --- a/src/WeChat.Mp/Requests/MediaUploadImg.cs +++ b/src/WeChat.Mp/Requests/MediaUploadImg.cs @@ -1,7 +1,4 @@ -using Mediation.HttpClient; - -using System.Net.Http.Headers; -using System.Text.Json.Serialization; +using System.Net.Http.Headers; namespace WeChat.Mp; diff --git a/src/WeChat.Mp/Requests/Ticket.cs b/src/WeChat.Mp/Requests/Ticket.cs index e4f3a05..92d9dac 100644 --- a/src/WeChat.Mp/Requests/Ticket.cs +++ b/src/WeChat.Mp/Requests/Ticket.cs @@ -1,8 +1,4 @@ -using Mediation.HttpClient; - -using System.Text.Json.Serialization; - -namespace WeChat.Mp; +namespace WeChat.Mp; /// /// 【微信公众号】 ticket 请求 diff --git a/src/WeChat.Mp/WeChat.Mp.csproj b/src/WeChat.Mp/WeChat.Mp.csproj index 945dc09..183c0d7 100644 --- a/src/WeChat.Mp/WeChat.Mp.csproj +++ b/src/WeChat.Mp/WeChat.Mp.csproj @@ -1,9 +1,16 @@  - $(TargetFrameworkVersion) + $(TargetFrameworkVersion) + + + + + + + diff --git a/src/WeChat.Mp/WeChatMpAccessTokenStore.cs b/src/WeChat.Mp/WeChatMpAccessTokenStore.cs index 541d0cc..becf4c2 100644 --- a/src/WeChat.Mp/WeChatMpAccessTokenStore.cs +++ b/src/WeChat.Mp/WeChatMpAccessTokenStore.cs @@ -1,10 +1,6 @@ -using Mediation; - -using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Options; -using System.Text.Json; - using WeChat.Mp; namespace WeChat; diff --git a/src/WeChat.Mp/WeChatMpHttpResponse.cs b/src/WeChat.Mp/WeChatMpHttpResponse.cs index dfb634c..5464268 100644 --- a/src/WeChat.Mp/WeChatMpHttpResponse.cs +++ b/src/WeChat.Mp/WeChatMpHttpResponse.cs @@ -1,6 +1,4 @@ -using System.Text.Json.Serialization; - -namespace WeChat; +namespace WeChat; public class WeChatMpHttpResponse : WeChatHttpResponse { diff --git a/src/WeChat.Mp/WeChatMpTicketStore.cs b/src/WeChat.Mp/WeChatMpTicketStore.cs index 5e499a1..a531a6b 100644 --- a/src/WeChat.Mp/WeChatMpTicketStore.cs +++ b/src/WeChat.Mp/WeChatMpTicketStore.cs @@ -1,10 +1,6 @@ -using Mediation; - -using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Options; -using System.Text.Json; - using WeChat.Mp; namespace WeChat; diff --git a/src/WeChat.Pay/CryptographyExtensions.cs b/src/WeChat.Pay/CryptographyExtensions.cs index a067245..f05132a 100644 --- a/src/WeChat.Pay/CryptographyExtensions.cs +++ b/src/WeChat.Pay/CryptographyExtensions.cs @@ -1,4 +1,8 @@ -using System.Security.Cryptography; +using Org.BouncyCastle.Crypto.Engines; +using Org.BouncyCastle.Crypto.Modes; +using Org.BouncyCastle.Crypto.Parameters; + +using System.Security.Cryptography; using System.Text; namespace WeChat; @@ -27,20 +31,40 @@ public static string AesGcmDecrypt(string nonce, string ciphertext, string assoc throw new ArgumentNullException(nameof(key)); } - using var aesGcm = new AesGcm(Encoding.UTF8.GetBytes(key), 16); - var nonceBytes = Encoding.UTF8.GetBytes(nonce); - var ciphertextWithTagBytes = Convert.FromBase64String(ciphertext); // ciphertext 实际包含了 tag,即尾部16字节 - var ciphertextBytes = ciphertextWithTagBytes[0..^16]; // 排除尾部16字节 - var tagBytes = ciphertextWithTagBytes[^16..]; // 获取尾部16字节 - var plaintextBytes = new byte[ciphertextBytes.Length]; - var associatedDataBytes = Encoding.UTF8.GetBytes(associatedData); - aesGcm.Decrypt(nonceBytes, ciphertextBytes, tagBytes, plaintextBytes, associatedDataBytes); - return Encoding.UTF8.GetString(plaintextBytes); + var cipher = new GcmBlockCipher(new AesEngine()); + var parameters = new AeadParameters( + new KeyParameter(Encoding.UTF8.GetBytes(key)), + 128, + Encoding.UTF8.GetBytes(nonce), + Encoding.UTF8.GetBytes(associatedData)); + + cipher.Init(false, parameters); + + var data = Convert.FromBase64String(ciphertext); + var plaintext = new byte[cipher.GetOutputSize(data.Length)]; + int length = cipher.ProcessBytes(data, 0, data.Length, plaintext, 0); + + cipher.DoFinal(plaintext, length); + + return Encoding.UTF8.GetString(plaintext); + + //using var aesGcm = new AesGcm(Encoding.UTF8.GetBytes(key), 16); + //var nonceBytes = Encoding.UTF8.GetBytes(nonce); + //var ciphertextWithTagBytes = Convert.FromBase64String(ciphertext); // ciphertext 实际包含了 tag,即尾部16字节 + //var ciphertextBytes = ciphertextWithTagBytes[0..^16]; // 排除尾部16字节 + //var tagBytes = ciphertextWithTagBytes[^16..]; // 获取尾部16字节 + //var plaintextBytes = new byte[ciphertextBytes.Length]; + //var associatedDataBytes = Encoding.UTF8.GetBytes(associatedData); + //aesGcm.Decrypt(nonceBytes, ciphertextBytes, tagBytes, plaintextBytes, associatedDataBytes); + //return Encoding.UTF8.GetString(plaintextBytes); } public static string SHA256WithRSAEncrypt(RSA rsa, string data) { - ArgumentNullException.ThrowIfNull(rsa); + if (rsa is null) + { + throw new ArgumentNullException(nameof(rsa)); + } if (string.IsNullOrEmpty(data)) { @@ -52,7 +76,10 @@ public static string SHA256WithRSAEncrypt(RSA rsa, string data) public static bool SHA256WithRSAEqual(RSA rsa, string data, string sign) { - ArgumentNullException.ThrowIfNull(rsa); + if (rsa is null) + { + throw new ArgumentNullException(nameof(rsa)); + } if (string.IsNullOrEmpty(data)) { diff --git a/src/WeChat.Pay/Requests/TransactionsNative.cs b/src/WeChat.Pay/Requests/TransactionsNative.cs index 6590cb1..5abfca5 100644 --- a/src/WeChat.Pay/Requests/TransactionsNative.cs +++ b/src/WeChat.Pay/Requests/TransactionsNative.cs @@ -1,5 +1,7 @@ namespace WeChat.Pay; +#pragma warning disable CS8601 + /// /// 【微信支付】Native下单 /// diff --git a/src/WeChat.Pay/WeChat.Pay.csproj b/src/WeChat.Pay/WeChat.Pay.csproj index 66166f1..51fe92f 100644 --- a/src/WeChat.Pay/WeChat.Pay.csproj +++ b/src/WeChat.Pay/WeChat.Pay.csproj @@ -1,8 +1,12 @@  - $(TargetFrameworkVersion) + $(TargetFrameworkVersion) + + + + diff --git a/src/WeChat.Pay/WeChatPayAuthorizationHandler.cs b/src/WeChat.Pay/WeChatPayAuthorizationHandler.cs index 5a48c1c..0482378 100644 --- a/src/WeChat.Pay/WeChatPayAuthorizationHandler.cs +++ b/src/WeChat.Pay/WeChatPayAuthorizationHandler.cs @@ -5,18 +5,11 @@ namespace WeChat; -public class WeChatPayAuthorizationHandler : IWeChatPayAuthorizationHandler +public class WeChatPayAuthorizationHandler(IWeChatPayCertificateStore certificateStore) : IWeChatPayAuthorizationHandler { - private readonly IWeChatPayCertificateStore _certificateStore; - - public WeChatPayAuthorizationHandler(IWeChatPayCertificateStore certificateStore) - { - _certificateStore = certificateStore; - } - public async Task Handle(HttpRequestMessage message, WeChatPayOptions options) { - if (!_certificateStore.TryGet(options, out var certificate)) + if (!certificateStore.TryGet(options, out var certificate)) { throw new ArgumentException("证书获取失败"); } diff --git a/src/WeChat.Pay/WeChatPayOptions.cs b/src/WeChat.Pay/WeChatPayOptions.cs index f2305ad..187f2d2 100644 --- a/src/WeChat.Pay/WeChatPayOptions.cs +++ b/src/WeChat.Pay/WeChatPayOptions.cs @@ -133,8 +133,6 @@ private void GetCertificateInfo() } CertificateSerialNo = Certificate2.GetSerialNumberString(); -#pragma warning disable CS8601 CertificateRSAPrivateKey = Certificate2.GetRSAPrivateKey(); -#pragma warning restore CS8601 } } diff --git a/src/WeChat.Pay/WeChatPayResponseSignatureChecker.cs b/src/WeChat.Pay/WeChatPayResponseSignatureChecker.cs index eb647f2..577a47c 100644 --- a/src/WeChat.Pay/WeChatPayResponseSignatureChecker.cs +++ b/src/WeChat.Pay/WeChatPayResponseSignatureChecker.cs @@ -1,47 +1,38 @@ using Microsoft.Extensions.Logging; -using System.Security.Cryptography.X509Certificates; + using System.Security.Cryptography; +using System.Security.Cryptography.X509Certificates; using System.Text; namespace WeChat; -#pragma warning disable 8602 -public class WeChatPayResponseSignatureChecker : IWeChatPayResponseSignatureChecker +public class WeChatPayResponseSignatureChecker( + ILogger logger, + IWeChatPayPlatformCertificateStore certificateStore) : IWeChatPayResponseSignatureChecker { - private readonly ILogger _logger; - private readonly IWeChatPayPlatformCertificateStore _certificateStore; - - public WeChatPayResponseSignatureChecker( - ILogger logger, - IWeChatPayPlatformCertificateStore certificateStore) - { - _logger = logger; - _certificateStore = certificateStore; - } - public async Task Check(HttpResponseMessage message, WeChatPayOptions settings) { try { - if (!message.Headers.TryGetValues("Wechatpay-Serial", out var serialValues)) + if (!message.Headers.TryGetValues("WeChatPay-Serial", out var serialValues)) { - _logger.LogError("响应签名检查:Wechatpay-Serial 为空"); - throw new WeChatException("响应签名检查:Wechatpay-Serial 为空"); + logger.LogError("响应签名检查:WeChatPay-Serial 为空"); + throw new WeChatException("响应签名检查:WeChatPay-Serial 为空"); } - if (!message.Headers.TryGetValues("Wechatpay-Timestamp", out var timestampValues)) + if (!message.Headers.TryGetValues("WeChatPay-Timestamp", out var timestampValues)) { - _logger.LogError("响应签名检查:Wechatpay-Timestamp 为空"); - throw new WeChatException("响应签名检查:Wechatpay-Timestamp 为空"); + logger.LogError("响应签名检查:WeChatPay-Timestamp 为空"); + throw new WeChatException("响应签名检查:WeChatPay-Timestamp 为空"); } - if (!message.Headers.TryGetValues("Wechatpay-Nonce", out var nonceValues)) + if (!message.Headers.TryGetValues("WeChatPay-Nonce", out var nonceValues)) { - _logger.LogError("响应签名检查:Wechatpay-Nonce 为空"); - throw new WeChatException("响应签名检查:Wechatpay-Nonce 为空"); + logger.LogError("响应签名检查:WeChatPay-Nonce 为空"); + throw new WeChatException("响应签名检查:WeChatPay-Nonce 为空"); } - if (!message.Headers.TryGetValues("Wechatpay-Signature", out var signatureValues)) + if (!message.Headers.TryGetValues("WeChatPay-Signature", out var signatureValues)) { - _logger.LogError("响应签名检查:Wechatpay-Signature 为空"); - throw new WeChatException("响应签名检查:Wechatpay-Signature 为空"); + logger.LogError("响应签名检查:WeChatPay-Signature 为空"); + throw new WeChatException("响应签名检查:WeChatPay-Signature 为空"); } var body = await message.Content.ReadAsStringAsync(); var serialNo = serialValues.First(); @@ -49,19 +40,19 @@ public async Task Check(HttpResponseMessage message, WeChatPayOptions settings) var nonce = nonceValues.First(); var signature = signatureValues.First(); - var certificate2 = await _certificateStore.GetAsync(serialNo, settings); + var certificate2 = await certificateStore.GetAsync(serialNo, settings); var signatureSourceData = $"{timestamp}\n{nonce}\n{body}\n"; var rsa = certificate2.GetRSAPublicKey(); if (!rsa.VerifyData(Encoding.UTF8.GetBytes(signatureSourceData), Convert.FromBase64String(signature), HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1)) { - _logger.LogError("响应签名检查:检查不通过"); + logger.LogError("响应签名检查:检查不通过"); throw new WeChatException("响应签名检查:检查不通过"); } } catch (Exception ex) { - _logger.LogError("响应签名检查:检查异常"); + logger.LogError("响应签名检查:检查异常"); throw new WeChatException("响应签名检查:检查异常", ex); } } diff --git a/src/WeChat/WeChat.csproj b/src/WeChat/WeChat.csproj index c3ae7f8..81de405 100644 --- a/src/WeChat/WeChat.csproj +++ b/src/WeChat/WeChat.csproj @@ -1,13 +1,20 @@  - $(TargetFrameworkVersion) + $(TargetFrameworkVersion) + + + + + + + - + diff --git a/src/WeChat/WeChatDictionary`T.cs b/src/WeChat/WeChatDictionary`T.cs index 41a3ebd..ad2cd66 100644 --- a/src/WeChat/WeChatDictionary`T.cs +++ b/src/WeChat/WeChatDictionary`T.cs @@ -1,5 +1,4 @@ using System.Collections; -using System.Diagnostics.CodeAnalysis; namespace WeChat; @@ -83,7 +82,7 @@ public WeChatDictionary Set(string key, T? value) public bool Remove(string key) => _dictionary.Remove(key); - public bool TryGetValue(string key, [MaybeNullWhen(false)] out T value) => _dictionary.TryGetValue(key, out value); + public bool TryGetValue(string key, out T value) => _dictionary.TryGetValue(key, out value); public void Add(KeyValuePair item) => Add(item.Key, item.Value); diff --git a/src/WeChat/WeChatHttpRequest.cs b/src/WeChat/WeChatHttpRequest.cs index 74d0ad7..a0e247e 100644 --- a/src/WeChat/WeChatHttpRequest.cs +++ b/src/WeChat/WeChatHttpRequest.cs @@ -1,6 +1,4 @@ -using Mediation.HttpClient; - -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System.Text; diff --git a/src/WeChat/WeChatHttpRequestException.cs b/src/WeChat/WeChatHttpRequestException.cs index 277c2cc..3d39a2d 100644 --- a/src/WeChat/WeChatHttpRequestException.cs +++ b/src/WeChat/WeChatHttpRequestException.cs @@ -16,11 +16,10 @@ public WeChatHttpRequestException(string? message, Exception? inner) : base(mess { } - public WeChatHttpRequestException(string? message, Exception? inner, HttpStatusCode? statusCode) : base(message, inner, statusCode) + public WeChatHttpRequestException(string? message, Exception? inner, HttpStatusCode? statusCode) : base(message, inner) { + StatusCode = statusCode; } - public WeChatHttpRequestException(HttpRequestError httpRequestError, string? message = null, Exception? inner = null, HttpStatusCode? statusCode = null) : base(httpRequestError, message, inner, statusCode) - { - } + public HttpStatusCode? StatusCode { get; } } diff --git a/src/WeChat/WeChatHttpResponse.cs b/src/WeChat/WeChatHttpResponse.cs index 674fe1e..af9efc3 100644 --- a/src/WeChat/WeChatHttpResponse.cs +++ b/src/WeChat/WeChatHttpResponse.cs @@ -1,5 +1,4 @@ using System.Net; -using System.Text.Json.Serialization; namespace WeChat; diff --git a/src/WeChat/WeChatResponse.cs b/src/WeChat/WeChatResponse.cs index ef4a509..bf8ebd6 100644 --- a/src/WeChat/WeChatResponse.cs +++ b/src/WeChat/WeChatResponse.cs @@ -1,5 +1,4 @@ -using System.Text.Json.Serialization; -using System.Xml.Serialization; +using System.Xml.Serialization; namespace WeChat; diff --git a/src/WeChat/WeChatSerializer.cs b/src/WeChat/WeChatSerializer.cs index 0568e50..6fb220f 100644 --- a/src/WeChat/WeChatSerializer.cs +++ b/src/WeChat/WeChatSerializer.cs @@ -1,6 +1,4 @@ using System.Text.Encodings.Web; -using System.Text.Json; -using System.Text.Json.Serialization; namespace WeChat; diff --git a/src/WeChat/WeChatSignature.cs b/src/WeChat/WeChatSignature.cs index e7b2215..a5f456e 100644 --- a/src/WeChat/WeChatSignature.cs +++ b/src/WeChat/WeChatSignature.cs @@ -75,7 +75,8 @@ public static string MD5Encrypt( { encoding ??= Encoding.UTF8; - var data = MD5.HashData(encoding.GetBytes(input)); + var md5 = MD5.Create(); + var data = md5.ComputeHash(encoding.GetBytes(input)); var sBuilder = new StringBuilder(); foreach (var item in data) @@ -98,7 +99,8 @@ public static string SHA1Encrypt( { encoding ??= Encoding.UTF8; - var data = SHA1.HashData(encoding.GetBytes(input)); + var sha1 = SHA1.Create(); + var data = sha1.ComputeHash(encoding.GetBytes(input)); var sBuilder = new StringBuilder(); foreach (var item in data) @@ -121,8 +123,8 @@ public static string SHA256Encrypt( { encoding ??= Encoding.UTF8; - var bytes = encoding.GetBytes(input); - var data = SHA256.HashData(bytes); + var sha256 = SHA256.Create(); + var data = sha256.ComputeHash(encoding.GetBytes(input)); return Convert.ToBase64String(data); }