diff --git a/.editorconfig b/.editorconfig index 36d44d5b..203d7e03 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,4 +1,7 @@ [*.cs] +# CS1570: XML 注释出现 XML 格式错误 +dotnet_diagnostic.CS1570.severity = none + # CS1591: 缺少对公共可见类型或成员的 XML 注释 dotnet_diagnostic.CS1591.severity = suggestion diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index af845ba7..6443ecff 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -124,7 +124,6 @@ - **必须**:提交记录中的 ``,可取值为: - - _core_:关于 `SKIT.FlurlHttpClient.Wechat` 项目的变化; - _wxapi_:关于 `SKIT.FlurlHttpClient.Wechat.Api` 项目的变化; - _tenpayv3_:关于 `SKIT.FlurlHttpClient.Wechat.TenpayV3` 项目的变化; - _work_:关于 `SKIT.FlurlHttpClient.Wechat.Work` 项目的变化; diff --git a/README.md b/README.md index 208d8b01..6a330696 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ - 基于 `Flurl.Http`,可与 `IHttpClientFactory` 集成。 -- 支持 .NET Framework 4.6.1+、.NET Standard 2.0+、.NET Core 2.0+、.NET 5。 +- 支持 .NET Framework 4.6.1+、.NET Standard 2.0+、.NET Core 2.0+、.NET 5、.NET 6。 - 支持 Windows / Linux / macOS 多平台部署。 diff --git a/SKIT.FlurlHttpClient.Wechat.sln b/SKIT.FlurlHttpClient.Wechat.sln index b39a2587..cb7efc1f 100644 --- a/SKIT.FlurlHttpClient.Wechat.sln +++ b/SKIT.FlurlHttpClient.Wechat.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.31112.23 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D5D590C3-7794-4BEB-9BC4-68EE4E09E064}" ProjectSection(SolutionItems) = preProject @@ -10,8 +10,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{3E34ADB9-1F52-4C96-9A42-DE782DE1AAA3}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SKIT.FlurlHttpClient.Wechat", "src\SKIT.FlurlHttpClient.Wechat\SKIT.FlurlHttpClient.Wechat.csproj", "{63F7116F-320A-4CD8-9B84-2C675412F70F}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SKIT.FlurlHttpClient.Wechat.Api", "src\SKIT.FlurlHttpClient.Wechat.Api\SKIT.FlurlHttpClient.Wechat.Api.csproj", "{082C1F69-7932-473F-A700-49584371BE8C}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SKIT.FlurlHttpClient.Wechat.TenpayV3", "src\SKIT.FlurlHttpClient.Wechat.TenpayV3\SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj", "{6FE502D4-C43D-49C9-9E57-D1EE566FD1C3}" @@ -20,7 +18,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SKIT.FlurlHttpClient.Wechat EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SKIT.FlurlHttpClient.Wechat.Ads", "src\SKIT.FlurlHttpClient.Wechat.Ads\SKIT.FlurlHttpClient.Wechat.Ads.csproj", "{7F155EFB-152F-4798-9984-99102B21D2F8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKIT.FlurlHttpClient.Wechat.OpenAI", "src\SKIT.FlurlHttpClient.Wechat.OpenAI\SKIT.FlurlHttpClient.Wechat.OpenAI.csproj", "{AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SKIT.FlurlHttpClient.Wechat.OpenAI", "src\SKIT.FlurlHttpClient.Wechat.OpenAI\SKIT.FlurlHttpClient.Wechat.OpenAI.csproj", "{AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{C95AF531-CF44-44AA-AC90-F4DF9F941674}" EndProject @@ -36,7 +34,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SKIT.FlurlHttpClient.Wechat EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SKIT.FlurlHttpClient.Wechat.Ads.UnitTests", "test\SKIT.FlurlHttpClient.Wechat.Ads.UnitTests\SKIT.FlurlHttpClient.Wechat.Ads.UnitTests.csproj", "{561E0BFB-7817-41FE-BAF2-D78817679AC1}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests", "test\SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests\SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests.csproj", "{9689135B-44BA-4D55-8663-7C669BAFE066}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests", "test\SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests\SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests.csproj", "{9689135B-44BA-4D55-8663-7C669BAFE066}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "samples", "samples", "{35C901ED-C234-4A91-9561-AD89B3BB788D}" EndProject @@ -50,10 +48,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {63F7116F-320A-4CD8-9B84-2C675412F70F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63F7116F-320A-4CD8-9B84-2C675412F70F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63F7116F-320A-4CD8-9B84-2C675412F70F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63F7116F-320A-4CD8-9B84-2C675412F70F}.Release|Any CPU.Build.0 = Release|Any CPU {082C1F69-7932-473F-A700-49584371BE8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {082C1F69-7932-473F-A700-49584371BE8C}.Debug|Any CPU.Build.0 = Debug|Any CPU {082C1F69-7932-473F-A700-49584371BE8C}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -70,6 +64,10 @@ Global {7F155EFB-152F-4798-9984-99102B21D2F8}.Debug|Any CPU.Build.0 = Debug|Any CPU {7F155EFB-152F-4798-9984-99102B21D2F8}.Release|Any CPU.ActiveCfg = Release|Any CPU {7F155EFB-152F-4798-9984-99102B21D2F8}.Release|Any CPU.Build.0 = Release|Any CPU + {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}.Release|Any CPU.Build.0 = Release|Any CPU {A8453835-4EE8-4FD4-9766-9C0DCB54CDB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {A8453835-4EE8-4FD4-9766-9C0DCB54CDB3}.Debug|Any CPU.Build.0 = Debug|Any CPU {A8453835-4EE8-4FD4-9766-9C0DCB54CDB3}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -90,6 +88,10 @@ Global {561E0BFB-7817-41FE-BAF2-D78817679AC1}.Debug|Any CPU.Build.0 = Debug|Any CPU {561E0BFB-7817-41FE-BAF2-D78817679AC1}.Release|Any CPU.ActiveCfg = Release|Any CPU {561E0BFB-7817-41FE-BAF2-D78817679AC1}.Release|Any CPU.Build.0 = Release|Any CPU + {9689135B-44BA-4D55-8663-7C669BAFE066}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9689135B-44BA-4D55-8663-7C669BAFE066}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9689135B-44BA-4D55-8663-7C669BAFE066}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9689135B-44BA-4D55-8663-7C669BAFE066}.Release|Any CPU.Build.0 = Release|Any CPU {D1B321C9-3004-4645-A78D-A85C152062FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D1B321C9-3004-4645-A78D-A85C152062FA}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1B321C9-3004-4645-A78D-A85C152062FA}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -98,34 +100,25 @@ Global {65E51735-73CE-4E9B-AA65-4BF5E4C8A705}.Debug|Any CPU.Build.0 = Debug|Any CPU {65E51735-73CE-4E9B-AA65-4BF5E4C8A705}.Release|Any CPU.ActiveCfg = Release|Any CPU {65E51735-73CE-4E9B-AA65-4BF5E4C8A705}.Release|Any CPU.Build.0 = Release|Any CPU - {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0}.Release|Any CPU.Build.0 = Release|Any CPU - {9689135B-44BA-4D55-8663-7C669BAFE066}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9689135B-44BA-4D55-8663-7C669BAFE066}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9689135B-44BA-4D55-8663-7C669BAFE066}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9689135B-44BA-4D55-8663-7C669BAFE066}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {63F7116F-320A-4CD8-9B84-2C675412F70F} = {3E34ADB9-1F52-4C96-9A42-DE782DE1AAA3} {082C1F69-7932-473F-A700-49584371BE8C} = {3E34ADB9-1F52-4C96-9A42-DE782DE1AAA3} {6FE502D4-C43D-49C9-9E57-D1EE566FD1C3} = {3E34ADB9-1F52-4C96-9A42-DE782DE1AAA3} {CDD123E6-2622-4368-BAEE-8B95F05F1AB2} = {3E34ADB9-1F52-4C96-9A42-DE782DE1AAA3} {7F155EFB-152F-4798-9984-99102B21D2F8} = {3E34ADB9-1F52-4C96-9A42-DE782DE1AAA3} + {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0} = {3E34ADB9-1F52-4C96-9A42-DE782DE1AAA3} {4C48D9D5-1D7F-4616-A05D-256555C310FC} = {C95AF531-CF44-44AA-AC90-F4DF9F941674} {A8453835-4EE8-4FD4-9766-9C0DCB54CDB3} = {4C48D9D5-1D7F-4616-A05D-256555C310FC} {0C87A7D9-26EA-4821-AF3F-6D28B3006B24} = {C95AF531-CF44-44AA-AC90-F4DF9F941674} {5ECE2E7A-9AE8-49BF-902D-41A7756C3E78} = {C95AF531-CF44-44AA-AC90-F4DF9F941674} {DBF84F66-1436-4599-93AB-7C16A3A2C3A4} = {C95AF531-CF44-44AA-AC90-F4DF9F941674} {561E0BFB-7817-41FE-BAF2-D78817679AC1} = {C95AF531-CF44-44AA-AC90-F4DF9F941674} + {9689135B-44BA-4D55-8663-7C669BAFE066} = {C95AF531-CF44-44AA-AC90-F4DF9F941674} {D1B321C9-3004-4645-A78D-A85C152062FA} = {35C901ED-C234-4A91-9561-AD89B3BB788D} {65E51735-73CE-4E9B-AA65-4BF5E4C8A705} = {35C901ED-C234-4A91-9561-AD89B3BB788D} - {AAE2E9BC-4D0B-4495-8825-DF8C405DB4A0} = {3E34ADB9-1F52-4C96-9A42-DE782DE1AAA3} - {9689135B-44BA-4D55-8663-7C669BAFE066} = {C95AF531-CF44-44AA-AC90-F4DF9F941674} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {F08ED64E-2517-4B51-A4BE-D33D56CC7B39} diff --git a/samples/SKIT.FlurlHttpClient.Wechat.Api.Sample_Net5/Controllers/WechatNotifyController.cs b/samples/SKIT.FlurlHttpClient.Wechat.Api.Sample_Net5/Controllers/WechatNotifyController.cs index 3f562d46..4fdefc33 100644 --- a/samples/SKIT.FlurlHttpClient.Wechat.Api.Sample_Net5/Controllers/WechatNotifyController.cs +++ b/samples/SKIT.FlurlHttpClient.Wechat.Api.Sample_Net5/Controllers/WechatNotifyController.cs @@ -1,18 +1,13 @@ using System; -using System.Collections.Generic; using System.IO; -using System.Linq; using System.Text; using System.Threading.Tasks; -using System.Xml; -using System.Xml.Linq; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace SKIT.FlurlHttpClient.Wechat.Api.Sample_Net5.Controllers { - using SKIT.FlurlHttpClient.Wechat.Security; using SKIT.FlurlHttpClient.Wechat.Api.Events; [ApiController] diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs index e773659d..0e066050 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Extensions/WechatAdsClientExecuteImagesExtensions.cs @@ -38,7 +38,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads if (request.FileHash == null) { - request.FileHash = Security.MD5Utility.Hash(request.FileBytes ?? new byte[0]); + request.FileHash = Utilities.MD5Utility.Hash(request.FileBytes ?? new byte[0]); } string boundary = "--BOUNDARY--" + DateTimeOffset.Now.Ticks.ToString("x"); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Interceptors/WechatAdsAgencyTokenInterceptor.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Interceptors/WechatAdsAgencyTokenInterceptor.cs index 9eca9091..7c86c5d8 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Interceptors/WechatAdsAgencyTokenInterceptor.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Interceptors/WechatAdsAgencyTokenInterceptor.cs @@ -24,7 +24,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.Interceptors string timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString(); string nonce = Guid.NewGuid().ToString("N"); - string sign = Security.MD5Utility.Hash($"{_agencyId}{timestamp}{nonce}{_agencyApiKey}").ToLower(); + string sign = Utilities.MD5Utility.Hash($"{_agencyId}{timestamp}{nonce}{_agencyApiKey}").ToLower(); string token = Convert.ToBase64String(Encoding.UTF8.GetBytes($"{_agencyId},{timestamp},{nonce},{sign}")); flurlCall.Request.RemoveQueryParam("agency_token"); diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/SKIT.FlurlHttpClient.Wechat.Ads.csproj b/src/SKIT.FlurlHttpClient.Wechat.Ads/SKIT.FlurlHttpClient.Wechat.Ads.csproj index d0e2ef35..3efb47a9 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/SKIT.FlurlHttpClient.Wechat.Ads.csproj +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/SKIT.FlurlHttpClient.Wechat.Ads.csproj @@ -1,7 +1,7 @@ - net461; netstandard2.0; net5.0 + net461; netstandard2.0; net5.0; net6.0 8.0 enable true @@ -27,11 +27,7 @@ - - - - - + diff --git a/src/SKIT.FlurlHttpClient.Wechat/Security/MD5Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs similarity index 95% rename from src/SKIT.FlurlHttpClient.Wechat/Security/MD5Utility.cs rename to src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs index a881536c..a3444174 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Security/MD5Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs @@ -2,7 +2,7 @@ using System.Security.Cryptography; using System.Text; -namespace SKIT.FlurlHttpClient.Wechat.Security +namespace SKIT.FlurlHttpClient.Wechat.Ads.Utilities { /// /// MD5 算法工具类。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsClient.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsClient.cs index 1db59616..da301aca 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsClient.cs @@ -1,21 +1,18 @@ using System; -using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Net; using System.Net.Http; -using System.Text; using System.Threading; using System.Threading.Tasks; using Flurl.Http; -using Flurl.Http.Configuration; namespace SKIT.FlurlHttpClient.Wechat.Ads { /// /// 一个微信广告平台 API HTTP 客户端。 /// - public class WechatAdsClient : CommonClientBase, IWechatClient + public class WechatAdsClient : CommonClientBase, ICommonClient { /// /// 获取当前客户端使用的微信广告平台凭证。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsRequest.cs index 2ae7c0af..16ead6d9 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsRequest.cs @@ -3,7 +3,7 @@ /// /// 微信广告平台 API 请求的基类。 /// - public abstract class WechatAdsRequest : IWechatRequest + public abstract class WechatAdsRequest : ICommonRequest { /// /// 获取或设置请求超时时间(单位:毫秒)。如果不指定将使用构造 时的 参数,这在需要指定特定耗时请求(比如上传或下载文件)的超时时间时很有用。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsResponse.cs index 26a8e002..dc20eae4 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/WechatAdsResponse.cs @@ -6,7 +6,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads /// /// 微信广告平台 API 响应的基类。 /// - public abstract class WechatAdsResponse : IWechatResponse + public abstract class WechatAdsResponse : ICommonResponse { /// /// 获取原始的 HTTP 响应状态码。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientEventExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientEventExtensions.cs index 490beddb..1dd08e7f 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientEventExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientEventExtensions.cs @@ -270,7 +270,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (callbackSignature == null) throw new ArgumentNullException(nameof(callbackSignature)); ISet set = new SortedSet(StringComparer.Ordinal) { client.Credentials.PushToken!, callbackTimestamp, callbackNonce }; - string sign = Security.SHA1Utility.Hash(string.Concat(set)); + string sign = Utilities.SHA1Utility.Hash(string.Concat(set)); return string.Equals(sign, callbackSignature, StringComparison.InvariantCultureIgnoreCase); } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinExpressExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinExpressExtensions.cs index 09cf253d..62506c34 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinExpressExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinExpressExtensions.cs @@ -25,7 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api if (request.DeliverySignature == null) { string plainText = $"{request.ShopId}{request.ShopOrderId}{client.Credentials.ImmeDeliveryAppSecret}"; - request.DeliverySignature = Security.SHA1Utility.Hash(plainText).ToLower(); + request.DeliverySignature = Utilities.SHA1Utility.Hash(plainText).ToLower(); } return request; diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMidasExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMidasExtensions.cs index 6f7902ed..c447ce02 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMidasExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientExecuteCgibinMidasExtensions.cs @@ -47,7 +47,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api + $"&org_loc={reqLoc}" + $"&method={method.ToUpper()}" + $"&secret={client.Credentials.MidasAppKey}"; - request.Signature = Security.HMACSHA256Utility.Hash(client.Credentials.MidasAppKey ?? string.Empty, plainText).ToLower(); + request.Signature = Utilities.HMACSHA256Utility.Hash(client.Credentials.MidasAppKey ?? string.Empty, plainText).ToLower(); } return request; diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientParameterExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientParameterExtensions.cs index 0a429278..6f823fa4 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientParameterExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Extensions/WechatApiClientParameterExtensions.cs @@ -25,7 +25,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api string timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString(); string nonce = Guid.NewGuid().ToString("N"); - string sign = Security.SHA1Utility.Hash($"jsapi_ticket={jsapiTicket}&noncestr={nonce}×tamp={timestamp}&url={url.Split('#')[0]}").ToLower(); + string sign = Utilities.SHA1Utility.Hash($"jsapi_ticket={jsapiTicket}&noncestr={nonce}×tamp={timestamp}&url={url.Split('#')[0]}").ToLower(); return new ReadOnlyDictionary(new Dictionary() { @@ -58,7 +58,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api sortedParams.Add(client.Credentials.AppId); sortedParams.Add(nonce); sortedParams.Add(wxcardTicket); - string cardSign = Security.SHA1Utility.Hash(string.Join(string.Empty, sortedParams)).ToLower(); + string cardSign = Utilities.SHA1Utility.Hash(string.Join(string.Empty, sortedParams)).ToLower(); return new ReadOnlyDictionary(new Dictionary() { diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/SKIT.FlurlHttpClient.Wechat.Api.csproj b/src/SKIT.FlurlHttpClient.Wechat.Api/SKIT.FlurlHttpClient.Wechat.Api.csproj index 85649080..7fd89bda 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/SKIT.FlurlHttpClient.Wechat.Api.csproj +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/SKIT.FlurlHttpClient.Wechat.Api.csproj @@ -1,7 +1,7 @@  - net461; netstandard2.0; net5.0 + net461; netstandard2.0; net5.0; net6.0 8.0 enable true @@ -26,12 +26,8 @@ - - - - - - - + + + diff --git a/src/SKIT.FlurlHttpClient.Wechat/Security/HMACSHA256Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HMACSHA256Utility.cs similarity index 96% rename from src/SKIT.FlurlHttpClient.Wechat/Security/HMACSHA256Utility.cs rename to src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HMACSHA256Utility.cs index 0cded35d..9e947330 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Security/HMACSHA256Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/HMACSHA256Utility.cs @@ -2,7 +2,7 @@ using System.Security.Cryptography; using System.Text; -namespace SKIT.FlurlHttpClient.Wechat.Security +namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities { /// /// HMAC-SHA-256 算法工具类。 diff --git a/src/SKIT.FlurlHttpClient.Wechat/Security/SHA1Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/SHA1Utility.cs similarity index 95% rename from src/SKIT.FlurlHttpClient.Wechat/Security/SHA1Utility.cs rename to src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/SHA1Utility.cs index f2b26fa1..19f4a711 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Security/SHA1Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/SHA1Utility.cs @@ -2,7 +2,7 @@ using System.Security.Cryptography; using System.Text; -namespace SKIT.FlurlHttpClient.Wechat.Security +namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities { /// /// SHA-1 算法工具类。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/WxBizMsgCryptor.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/WxBizMsgCryptor.cs index cc5fa6a6..400b6fcf 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/WxBizMsgCryptor.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/Utilities/WxBizMsgCryptor.cs @@ -81,7 +81,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities if (ivBytes == null) throw new ArgumentNullException(nameof(ivBytes)); if (ciperBytes == null) throw new ArgumentNullException(nameof(ciperBytes)); - using RijndaelManaged aes = new RijndaelManaged(); + using var aes = Aes.Create(); aes.KeySize = 256; aes.BlockSize = 128; aes.Mode = CipherMode.CBC; @@ -109,7 +109,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities if (ivBytes == null) throw new ArgumentNullException(nameof(ivBytes)); if (plainBytes == null) throw new ArgumentNullException(nameof(plainBytes)); - using var aes = new RijndaelManaged(); + using var aes = Aes.Create(); aes.KeySize = AES_KEY_SIZE; aes.BlockSize = AES_BLOCK_SIZE; //aes.Padding = PaddingMode.PKCS7; @@ -238,7 +238,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities set.Add(sMsgEncrypt); string rawText = string.Join(string.Empty, set.ToArray()); - string signText = Security.SHA1Utility.Hash(rawText); + string signText = Utilities.SHA1Utility.Hash(rawText); return signText.ToLower(); } @@ -270,7 +270,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.Utilities try { XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.XmlResolver = null; + xmlDoc.XmlResolver = null!; xmlDoc.LoadXml(xml); XmlNode? xmlRoot = xmlDoc.FirstChild; diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiClient.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiClient.cs index b8877006..975ea0db 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiClient.cs @@ -1,24 +1,21 @@ using System; -using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Net; using System.Net.Http; -using System.Text; using System.Threading; using System.Threading.Tasks; using Flurl.Http; -using Flurl.Http.Configuration; namespace SKIT.FlurlHttpClient.Wechat.Api { /// /// 一个微信 API HTTP 客户端。 /// - public class WechatApiClient : CommonClientBase, IWechatClient + public class WechatApiClient : CommonClientBase, ICommonClient { /// - /// 获取当前客户端使用的微信公众平台凭证。 + /// 获取当前客户端使用的微信公众平台/开放平台凭证。 /// public Settings.Credentials Credentials { get; } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiRequest.cs index e832013d..6037beca 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiRequest.cs @@ -5,7 +5,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api /// /// 表示微信 API 请求的基类。 /// - public abstract class WechatApiRequest : IWechatRequest + public abstract class WechatApiRequest : ICommonRequest { /// /// 获取或设置请求超时时间(单位:毫秒)。如果不指定将使用构造 时的 参数,这在需要指定特定耗时请求(比如上传或下载文件)的超时时间时很有用。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiResponse.cs index 8771f886..09a80d14 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Api/WechatApiResponse.cs @@ -6,7 +6,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api /// /// 表示微信 API 响应的基类。 /// - public abstract class WechatApiResponse : IWechatResponse + public abstract class WechatApiResponse : ICommonResponse { /// /// 获取原始的 HTTP 响应状态码。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/SKIT.FlurlHttpClient.Wechat.OpenAI.csproj b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/SKIT.FlurlHttpClient.Wechat.OpenAI.csproj index d09aca20..ba8a076f 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/SKIT.FlurlHttpClient.Wechat.OpenAI.csproj +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/SKIT.FlurlHttpClient.Wechat.OpenAI.csproj @@ -1,7 +1,7 @@ - net461; netstandard2.0; net5.0 + net461; netstandard2.0; net5.0; net6.0 8.0 enable true @@ -28,11 +28,7 @@ - - - - - - + + diff --git a/src/SKIT.FlurlHttpClient.Wechat/Security/HMACSHA1Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/SHA1Utility.cs similarity index 51% rename from src/SKIT.FlurlHttpClient.Wechat/Security/HMACSHA1Utility.cs rename to src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/SHA1Utility.cs index 1a451284..f2e1ae31 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Security/HMACSHA1Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/SHA1Utility.cs @@ -2,43 +2,38 @@ using System.Security.Cryptography; using System.Text; -namespace SKIT.FlurlHttpClient.Wechat.Security +namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities { /// - /// HMAC-SHA-1 算法工具类。 + /// SHA-1 算法工具类。 /// - public static class HMACSHA1Utility + public static class SHA1Utility { /// /// 获取信息摘要。 /// - /// 密钥字节数组。 /// 信息字节数组。 /// 信息摘要。 - public static string Hash(byte[] secretBytes, byte[] bytes) + public static string Hash(byte[] bytes) { - if (secretBytes == null) throw new ArgumentNullException(nameof(secretBytes)); if (bytes == null) throw new ArgumentNullException(nameof(bytes)); - using HMAC hmac = new HMACSHA1(secretBytes); - byte[] hashBytes = hmac.ComputeHash(bytes); + using SHA1 sha = SHA1.Create(); + byte[] hashBytes = sha.ComputeHash(bytes); return BitConverter.ToString(hashBytes).Replace("-", ""); } /// /// 获取信息摘要。 /// - /// 密钥。 /// 文本信息。 /// 信息摘要。 - public static string Hash(string secret, string message) + public static string Hash(string message) { - if (secret == null) throw new ArgumentNullException(nameof(secret)); if (message == null) throw new ArgumentNullException(nameof(message)); - byte[] secretBytes = Encoding.UTF8.GetBytes(secret); byte[] bytes = Encoding.UTF8.GetBytes(message); - return Hash(secretBytes, bytes); + return Hash(bytes); } } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/WxBizMsgCryptor.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/WxBizMsgCryptor.cs index 7d324384..a51eac06 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/WxBizMsgCryptor.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/Utilities/WxBizMsgCryptor.cs @@ -80,7 +80,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities if (ivBytes == null) throw new ArgumentNullException(nameof(ivBytes)); if (ciperBytes == null) throw new ArgumentNullException(nameof(ciperBytes)); - using RijndaelManaged aes = new RijndaelManaged(); + using var aes = Aes.Create(); aes.KeySize = 256; aes.BlockSize = 128; aes.Mode = CipherMode.CBC; @@ -108,7 +108,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities if (ivBytes == null) throw new ArgumentNullException(nameof(ivBytes)); if (plainBytes == null) throw new ArgumentNullException(nameof(plainBytes)); - using var aes = new RijndaelManaged(); + using var aes = Aes.Create(); aes.KeySize = AES_KEY_SIZE; aes.BlockSize = AES_BLOCK_SIZE; //aes.Padding = PaddingMode.PKCS7; @@ -237,7 +237,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities set.Add(sMsgEncrypt); string rawText = string.Join(string.Empty, set.ToArray()); - string signText = Security.SHA1Utility.Hash(rawText); + string signText = Utilities.SHA1Utility.Hash(rawText); return signText.ToLower(); } @@ -269,7 +269,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI.Utilities try { XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.XmlResolver = null; + xmlDoc.XmlResolver = null!; xmlDoc.LoadXml(xml); XmlNode? xmlRoot = xmlDoc.FirstChild; diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformClient.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformClient.cs index 3647f1c4..70031aef 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformClient.cs @@ -12,7 +12,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI /// /// 一个微信智能对话平台接入 API HTTP 客户端。 /// - public class WechatOpenAIPlatformClient : CommonClientBase, IWechatClient + public class WechatOpenAIPlatformClient : CommonClientBase, ICommonClient { /// /// 获取当前客户端使用的微信智能对话平台凭证。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformRequest.cs index 2e1be01c..e6d071d3 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformRequest.cs @@ -5,7 +5,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI /// /// 表示微信智能对话平台接入 API 请求的基类。 /// - public abstract class WechatOpenAIPlatformRequest : IWechatRequest + public abstract class WechatOpenAIPlatformRequest : ICommonRequest { public static class Serialization { diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformResponse.cs index bc623e57..48ae0008 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIPlatformResponse.cs @@ -6,7 +6,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI /// /// 表示微信智能对话平台接入 API 响应的基类。 /// - public abstract class WechatOpenAIPlatformResponse : IWechatResponse + public abstract class WechatOpenAIPlatformResponse : ICommonResponse { /// /// 获取原始的 HTTP 响应状态码。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyClient.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyClient.cs index 1d6f47e4..bd009dcd 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyClient.cs @@ -12,7 +12,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI /// /// 一个微信智能对话第三方接入 API HTTP 客户端。 /// - public class WechatOpenAIThirdPartyClient : CommonClientBase, IWechatClient + public class WechatOpenAIThirdPartyClient : CommonClientBase, ICommonClient { /// /// 获取当前客户端使用的微信智能对话平台凭证。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyRequest.cs index 880e99f7..46ed935a 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyRequest.cs @@ -5,7 +5,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI /// /// 表示微信智能对话第三方接入 API 请求的基类。 /// - public abstract class WechatOpenAIThirdPartyRequest : IWechatRequest + public abstract class WechatOpenAIThirdPartyRequest : ICommonRequest { /// /// 获取或设置请求超时时间(单位:毫秒)。如果不指定将使用构造 时的 参数,这在需要指定特定耗时请求(比如上传或下载文件)的超时时间时很有用。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyResponse.cs index a0493f3f..d61d3c1e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.OpenAI/WechatOpenAIThirdPartyResponse.cs @@ -6,7 +6,7 @@ namespace SKIT.FlurlHttpClient.Wechat.OpenAI /// /// 表示微信智能对话第三方接入 API 响应的基类。 /// - public abstract class WechatOpenAIThirdPartyResponse : IWechatResponse + public abstract class WechatOpenAIThirdPartyResponse : ICommonResponse { /// /// 获取原始的 HTTP 响应状态码。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBankExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBankExtensions.cs index 2a3cde0d..8d612d0e 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBankExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingBankExtensions.cs @@ -34,7 +34,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".txt"; if (request.FileHash == null) - request.FileHash = Security.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "text/plain"; diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs index 65801fb0..0d01b784 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMarketingMediaExtensions.cs @@ -34,7 +34,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".png"; if (request.FileHash == null) - request.FileHash = Security.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "image/png"; diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs index 8c779fd4..8154fdbe 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantMediaExtensions.cs @@ -34,7 +34,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".png"; if (request.FileHash == null) - request.FileHash = Security.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "image/png"; @@ -73,7 +73,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".mp4"; if (request.FileHash == null) - request.FileHash = Security.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForVideo(request.FileName!) ?? "video/mp4"; diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs index 32d63792..12affeaf 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Extensions/WechatTenpayClientExecuteMerchantServiceExtensions.cs @@ -237,7 +237,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 request.FileName = Guid.NewGuid().ToString("N").ToLower() + ".png"; if (request.FileHash == null) - request.FileHash = Security.SHA256Utility.Hash(request.FileBytes).ToLower(); + request.FileHash = Utilities.SHA256Utility.Hash(request.FileBytes).ToLower(); if (request.FileContentType == null) request.FileContentType = Utilities.FileNameToContentTypeMapper.GetContentTypeForImage(request.FileName!) ?? "image/png"; diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj index 34996667..9cff7933 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/SKIT.FlurlHttpClient.Wechat.TenpayV3.csproj @@ -1,7 +1,7 @@ - net461; netstandard2.0; net5.0 + net461; netstandard2.0; net5.0; net6.0 8.0 enable true @@ -27,12 +27,8 @@ - - - - - + \ No newline at end of file diff --git a/src/SKIT.FlurlHttpClient.Wechat/Security/SHA256Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Utilities/SHA256Utility.cs similarity index 95% rename from src/SKIT.FlurlHttpClient.Wechat/Security/SHA256Utility.cs rename to src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Utilities/SHA256Utility.cs index 17272abb..f8073fe3 100644 --- a/src/SKIT.FlurlHttpClient.Wechat/Security/SHA256Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/Utilities/SHA256Utility.cs @@ -2,7 +2,7 @@ using System.Security.Cryptography; using System.Text; -namespace SKIT.FlurlHttpClient.Wechat.Security +namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.Utilities { /// /// SHA-256 算法工具类。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs index 53976d82..9dfe3224 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayClient.cs @@ -1,23 +1,19 @@ using System; -using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; -using System.Text; using System.Threading; using System.Threading.Tasks; -using Flurl; using Flurl.Http; -using Flurl.Http.Configuration; namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 { /// /// 一个微信支付 API HTTP 客户端。 /// - public class WechatTenpayClient : CommonClientBase, IWechatClient + public class WechatTenpayClient : CommonClientBase, ICommonClient { /// /// 获取当前客户端使用的微信商户平台凭证。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayRequest.cs index 0e909723..52dbda8c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayRequest.cs @@ -5,7 +5,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 表示微信支付 API 请求的基类。 /// - public abstract class WechatTenpayRequest : IWechatRequest + public abstract class WechatTenpayRequest : ICommonRequest { /// /// 获取或设置请求超时时间(单位:毫秒)。如果不指定将使用构造 时的 参数,这在需要指定特定耗时请求(比如上传或下载文件)的超时时间时很有用。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayResponse.cs index ade78f67..f8a08d30 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.TenpayV3/WechatTenpayResponse.cs @@ -6,7 +6,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3 /// /// 表示微信支付 API 响应的基类。 /// - public abstract class WechatTenpayResponse : IWechatResponse + public abstract class WechatTenpayResponse : ICommonResponse { /// /// 获取原始的 HTTP 响应状态码。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientParameterExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientParameterExtensions.cs index 97d229a0..9d96b6fe 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientParameterExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientParameterExtensions.cs @@ -35,7 +35,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work string timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString(); string nonce = Guid.NewGuid().ToString("N"); - string sign = Security.SHA1Utility.Hash($"jsapi_ticket={jsapiTicket}&noncestr={nonce}×tamp={timestamp}&url={url.Split('#')[0]}").ToLower(); + string sign = Utilities.SHA1Utility.Hash($"jsapi_ticket={jsapiTicket}&noncestr={nonce}×tamp={timestamp}&url={url.Split('#')[0]}").ToLower(); return new ReadOnlyDictionary(new Dictionary() { @@ -64,7 +64,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work string timestamp = DateTimeOffset.Now.ToLocalTime().ToUnixTimeSeconds().ToString(); string nonce = Guid.NewGuid().ToString("N"); - string sign = Security.SHA1Utility.Hash($"jsapi_ticket={jsapiTicket}&noncestr={nonce}×tamp={timestamp}&url={url.Split('#')[0]}").ToLower(); + string sign = Utilities.SHA1Utility.Hash($"jsapi_ticket={jsapiTicket}&noncestr={nonce}×tamp={timestamp}&url={url.Split('#')[0]}").ToLower(); return new ReadOnlyDictionary(new Dictionary() { diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/SKIT.FlurlHttpClient.Wechat.Work.csproj b/src/SKIT.FlurlHttpClient.Wechat.Work/SKIT.FlurlHttpClient.Wechat.Work.csproj index 10c118b9..191826d3 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/SKIT.FlurlHttpClient.Wechat.Work.csproj +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/SKIT.FlurlHttpClient.Wechat.Work.csproj @@ -1,7 +1,7 @@ - net461; netstandard2.0; net5.0 + net461; netstandard2.0; net5.0; net6.0 8.0 enable true @@ -27,11 +27,7 @@ - - - - - + \ No newline at end of file diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/SHA1Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/SHA1Utility.cs new file mode 100644 index 00000000..8fc8c6fd --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/SHA1Utility.cs @@ -0,0 +1,39 @@ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities +{ + /// + /// SHA-1 算法工具类。 + /// + public static class SHA1Utility + { + /// + /// 获取信息摘要。 + /// + /// 信息字节数组。 + /// 信息摘要。 + public static string Hash(byte[] bytes) + { + if (bytes == null) throw new ArgumentNullException(nameof(bytes)); + + using SHA1 sha = SHA1.Create(); + byte[] hashBytes = sha.ComputeHash(bytes); + return BitConverter.ToString(hashBytes).Replace("-", ""); + } + + /// + /// 获取信息摘要。 + /// + /// 文本信息。 + /// 信息摘要。 + public static string Hash(string message) + { + if (message == null) throw new ArgumentNullException(nameof(message)); + + byte[] bytes = Encoding.UTF8.GetBytes(message); + return Hash(bytes); + } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/WxBizMsgCryptor.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/WxBizMsgCryptor.cs index 7f649a43..5f3ab841 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/WxBizMsgCryptor.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/WxBizMsgCryptor.cs @@ -81,7 +81,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities if (ivBytes == null) throw new ArgumentNullException(nameof(ivBytes)); if (cipherBytes == null) throw new ArgumentNullException(nameof(cipherBytes)); - using RijndaelManaged aes = new RijndaelManaged(); + using var aes = Aes.Create(); aes.KeySize = 256; aes.BlockSize = 128; aes.Mode = CipherMode.CBC; @@ -109,7 +109,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities if (ivBytes == null) throw new ArgumentNullException(nameof(ivBytes)); if (plainBytes == null) throw new ArgumentNullException(nameof(plainBytes)); - using var aes = new RijndaelManaged(); + using var aes = Aes.Create(); aes.KeySize = AES_KEY_SIZE; aes.BlockSize = AES_BLOCK_SIZE; //aes.Padding = PaddingMode.PKCS7; @@ -238,7 +238,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities set.Add(sMsgEncrypt); string rawText = string.Join(string.Empty, set.ToArray()); - string signText = Security.SHA1Utility.Hash(rawText); + string signText = Utilities.SHA1Utility.Hash(rawText); return signText.ToLower(); } @@ -273,7 +273,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities try { XmlDocument xmlDoc = new XmlDocument(); - xmlDoc.XmlResolver = null; + xmlDoc.XmlResolver = null!; xmlDoc.LoadXml(xml); XmlNode? xmlRoot = xmlDoc.FirstChild; diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkClient.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkClient.cs index c165f02b..4600bd81 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkClient.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkClient.cs @@ -1,21 +1,18 @@ using System; -using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Net; using System.Net.Http; -using System.Text; using System.Threading; using System.Threading.Tasks; using Flurl.Http; -using Flurl.Http.Configuration; namespace SKIT.FlurlHttpClient.Wechat.Work { /// /// 一个企业微信 API HTTP 客户端。 /// - public class WechatWorkClient : CommonClientBase, IWechatClient + public class WechatWorkClient : CommonClientBase, ICommonClient { /// /// 获取当前客户端使用的企业微信凭证。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkRequest.cs index 0d7b23a0..b293eb78 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkRequest.cs @@ -5,7 +5,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work /// /// 表示企业微信 API 请求的基类。 /// - public abstract class WechatWorkRequest : IWechatRequest + public abstract class WechatWorkRequest : ICommonRequest { /// /// 获取或设置请求超时时间(单位:毫秒)。如果不指定将使用构造 时的 参数,这在需要指定特定耗时请求(比如上传或下载文件)的超时时间时很有用。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkResponse.cs index 8d3cfcf8..10c57e9c 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/WechatWorkResponse.cs @@ -6,7 +6,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work /// /// 表示企业微信 API 响应的基类。 /// - public abstract class WechatWorkResponse : IWechatResponse + public abstract class WechatWorkResponse : ICommonResponse { /// /// 获取原始的 HTTP 响应状态码。 diff --git a/src/SKIT.FlurlHttpClient.Wechat/IWechatClient.cs b/src/SKIT.FlurlHttpClient.Wechat/IWechatClient.cs deleted file mode 100644 index 379b4540..00000000 --- a/src/SKIT.FlurlHttpClient.Wechat/IWechatClient.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System; -using System.Net.Http; -using Flurl.Http; -using Flurl.Http.Configuration; - -namespace SKIT.FlurlHttpClient.Wechat -{ - /// - /// SKIT.FlurlHttpClient.Wechat 客户端接口。 - /// - public interface IWechatClient : ICommonClient - { - } -} diff --git a/src/SKIT.FlurlHttpClient.Wechat/IWechatRequest.cs b/src/SKIT.FlurlHttpClient.Wechat/IWechatRequest.cs deleted file mode 100644 index de02e4c2..00000000 --- a/src/SKIT.FlurlHttpClient.Wechat/IWechatRequest.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace SKIT.FlurlHttpClient.Wechat -{ - /// - /// SKIT.FlurlHttpClient.Wechat 请求接口。 - /// - public interface IWechatRequest : ICommonRequest - { - } -} diff --git a/src/SKIT.FlurlHttpClient.Wechat/IWechatResponse.cs b/src/SKIT.FlurlHttpClient.Wechat/IWechatResponse.cs deleted file mode 100644 index 40a883e3..00000000 --- a/src/SKIT.FlurlHttpClient.Wechat/IWechatResponse.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace SKIT.FlurlHttpClient.Wechat -{ - /// - /// SKIT.FlurlHttpClient.Wechat 响应接口。 - /// - public interface IWechatResponse : ICommonResponse - { - } -} diff --git a/src/SKIT.FlurlHttpClient.Wechat/SKIT.FlurlHttpClient.Wechat.csproj b/src/SKIT.FlurlHttpClient.Wechat/SKIT.FlurlHttpClient.Wechat.csproj deleted file mode 100644 index ea82df5b..00000000 --- a/src/SKIT.FlurlHttpClient.Wechat/SKIT.FlurlHttpClient.Wechat.csproj +++ /dev/null @@ -1,31 +0,0 @@ - - - - net461; netstandard2.0; net5.0 - 8.0 - enable - true - - - - SKIT.FlurlHttpClient.Wechat - MIT - https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat - Flurl.Http Wechat Weixin MicroMessage 微信 - 1.1.0 - SKIT.FlurlClient.Wechat(含 SKIT.FlurlHttpClient.Wechat.Api、SKIT.FlurlHttpClient.Wechat.TenpayV3、SKIT.FlurlHttpClient.Wechat.Work、SKIT.FlurlHttpClient.Wechat.Ads 等模块)的核心库,具体用法请参阅开发文档。 - Fu Diwei - git - https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git - true - true - snupkg - - - - - - - - - diff --git a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests.csproj b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests.csproj index 3d55032e..7ccde80f 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests.csproj +++ b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + netcoreapp3.1; net6.0 8.0 diff --git a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsSecurityTests.cs b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsSecurityTests.cs index aee4328b..c2ed584c 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsSecurityTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsSecurityTests.cs @@ -15,7 +15,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.UnitTests { string rawData = "spidbff89d5138160943040012345678901234567890uFolxxiZbrZ/PRbyen5uK5D1kgIB2yHyDsfDGxxgeG"; - string actualHash = Security.MD5Utility.Hash(rawData); + string actualHash = Utilities.MD5Utility.Hash(rawData); string expectedHash = "32c03e8fcdb08e653e42805e302f70ed"; Assert.Equal(expectedHash, actualHash, ignoreCase: true); diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/SKIT.FlurlHttpClient.Wechat.Api.UnitTests.csproj b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/SKIT.FlurlHttpClient.Wechat.Api.UnitTests.csproj index 404e97dd..12dc7860 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/SKIT.FlurlHttpClient.Wechat.Api.UnitTests.csproj +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/SKIT.FlurlHttpClient.Wechat.Api.UnitTests.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + netcoreapp3.1; net6.0 8.0 diff --git a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/WechatApiSecurityTests.cs b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/WechatApiSecurityTests.cs index 439a77e5..b9cd4228 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/WechatApiSecurityTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.Api.UnitTests/WechatApiSecurityTests.cs @@ -10,7 +10,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.UnitTests { string rawData = "jsapi_ticket=HoagFKDcsGMVCIY2vOjf9nGrZ3eaM0qXs5ROFN_3k_HrGc0VocemA6wMXkvrL-Ei4IitXxwKF62CJWR8mWXZ3Q&noncestr=e7b435f73835402da44f16640ddc8696×tamp=1621348162&url=https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign"; - string actualHash = Security.SHA1Utility.Hash(rawData); + string actualHash = Utilities.SHA1Utility.Hash(rawData); string expectedHash = "b214ea1f8ae019c207f8c6ffb843c8474cbab28c"; Assert.Equal(expectedHash, actualHash, ignoreCase: true); @@ -22,7 +22,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Api.UnitTests string secret = "zNLgAGgqsEWJOg1nFVaO5r7fAlIQxr1u"; string rawData = "appid=wx1234567&offer_id=12345678&openid=odkx20ENSNa2w5y3g_qOkOvBNM1g&pf=android&ts=1507530737&zone_id=1&org_loc=/cgi-bin/midas/getbalance&method=POST&secret=zNLgAGgqsEWJOg1nFVaO5r7fAlIQxr1u"; - string actualHash = Security.HMACSHA256Utility.Hash(secret, rawData); + string actualHash = Utilities.HMACSHA256Utility.Hash(secret, rawData); string expectedHash = "1ad64e8dcb2ec1dc486b7fdf01f4a15159fc623dc3422470e51cf6870734726b"; Assert.Equal(expectedHash, actualHash, ignoreCase: true); diff --git a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests.csproj b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests.csproj index 72d255b9..1a0ffda4 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests.csproj +++ b/test/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests/SKIT.FlurlHttpClient.Wechat.OpenAI.UnitTests.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + netcoreapp3.1; net6.0 8.0 diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests.csproj b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests.csproj index 947f5ee2..c675a2a7 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests.csproj +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + netcoreapp3.1; net6.0 8.0 diff --git a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/WechatTenpaySecurityTests.cs b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/WechatTenpaySecurityTests.cs index 544ce4fd..9449778f 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/WechatTenpaySecurityTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests/WechatTenpaySecurityTests.cs @@ -90,7 +90,7 @@ namespace SKIT.FlurlHttpClient.Wechat.TenpayV3.UnitTests { string rawData = "This is raw data string."; - string actualHash = Security.SHA256Utility.Hash(rawData); + string actualHash = Utilities.SHA256Utility.Hash(rawData); string expectedHash = "5bd1e86d96a5ec138242ee3c743ea004bc8e215ef8ab72178133a6460034f216"; Assert.Equal(expectedHash, actualHash, ignoreCase: true); diff --git a/test/SKIT.FlurlHttpClient.Wechat.TestTools/CodeStyleUtil.cs b/test/SKIT.FlurlHttpClient.Wechat.TestTools/CodeStyleUtil.cs index c02a3569..170953c8 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TestTools/CodeStyleUtil.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.TestTools/CodeStyleUtil.cs @@ -85,9 +85,9 @@ namespace SKIT.FlurlHttpClient.Wechat if (name.EndsWith("Request")) { - if (!typeof(IWechatRequest).IsAssignableFrom(modelType)) + if (!typeof(ICommonRequest).IsAssignableFrom(modelType)) { - lstError.Add(new Exception($"`{name}` 类需实现自 `IWechatRequest`。")); + lstError.Add(new Exception($"`{name}` 类需实现自 `ICommonRequest`。")); continue; } @@ -100,9 +100,9 @@ namespace SKIT.FlurlHttpClient.Wechat if (name.EndsWith("Response")) { - if (!typeof(IWechatResponse).IsAssignableFrom(modelType)) + if (!typeof(ICommonResponse).IsAssignableFrom(modelType)) { - lstError.Add(new Exception($"`{name}` 类需实现自 `IWechatResponse`。")); + lstError.Add(new Exception($"`{name}` 类需实现自 `ICommonResponse`。")); continue; } @@ -252,7 +252,7 @@ namespace SKIT.FlurlHttpClient.Wechat .Where(e => e.IsPublic && e.IsStatic && - typeof(IWechatClient).IsAssignableFrom(e.GetParameters().FirstOrDefault().ParameterType) + typeof(ICommonClient).IsAssignableFrom(e.GetParameters().FirstOrDefault().ParameterType) ) .ToArray(); @@ -267,10 +267,10 @@ namespace SKIT.FlurlHttpClient.Wechat continue; } - // 第二个参数必为 IWechatRequest 子类 - if (!typeof(IWechatRequest).IsAssignableFrom(lstParamInfo[1].ParameterType)) + // 第二个参数必为 ICommonRequest 子类 + if (!typeof(ICommonRequest).IsAssignableFrom(lstParamInfo[1].ParameterType)) { - lstError.Add(new Exception($"`{extType.Name}.{methodInfo.Name}` 方法第 1 个入参需实现自 `IWechatRequest`。")); + lstError.Add(new Exception($"`{extType.Name}.{methodInfo.Name}` 方法第 1 个入参需实现自 `ICommonRequest`。")); continue; } diff --git a/test/SKIT.FlurlHttpClient.Wechat.TestTools/SKIT.FlurlHttpClient.Wechat.TestTools.csproj b/test/SKIT.FlurlHttpClient.Wechat.TestTools/SKIT.FlurlHttpClient.Wechat.TestTools.csproj index ffa32df8..44da6d0e 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TestTools/SKIT.FlurlHttpClient.Wechat.TestTools.csproj +++ b/test/SKIT.FlurlHttpClient.Wechat.TestTools/SKIT.FlurlHttpClient.Wechat.TestTools.csproj @@ -1,12 +1,12 @@  - netcoreapp3.1 + netcoreapp3.1; net6.0 8.0 - - - - + + + + diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/SKIT.FlurlHttpClient.Wechat.Work.UnitTests.csproj b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/SKIT.FlurlHttpClient.Wechat.Work.UnitTests.csproj index e3dc0788..83a6c3f2 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/SKIT.FlurlHttpClient.Wechat.Work.UnitTests.csproj +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/SKIT.FlurlHttpClient.Wechat.Work.UnitTests.csproj @@ -1,7 +1,7 @@  - netcoreapp3.1 + netcoreapp3.1; net6.0 8.0