diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/README.md b/src/SKIT.FlurlHttpClient.Wechat.Ads/README.md new file mode 100644 index 00000000..42fba951 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/README.md @@ -0,0 +1,31 @@ +## SKIT.FlurlHttpClient.Wechat.TenpayV2 + +[![GitHub Stars](https://img.shields.io/github/stars/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat?logo=github&label=Stars)](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat) +[![GitHub Forks](https://img.shields.io/github/forks/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat?logo=github&label=Forks)](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat) +[![NuGet Download](https://img.shields.io/nuget/dt/SKIT.FlurlHttpClient.Wechat.TenpayV2.svg?sanitize=true&label=Downloads)](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV2) +[![License](https://img.shields.io/github/license/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat?label=License)](https://mit-license.org/) + +基于 `Flurl.Http` 的微信商户平台 API v2 版客户端。 + +**注意**:本库仅仅包含微信支付未提供 v3 版 API 的部分功能,如需微信支付 v3 版 API 客户端,欢迎使用 [`SKIT.FlurlHttpClient.Wechat.TenpayV3`](https://www.nuget.org/packages/SKIT.FlurlHttpClient.Wechat.TenpayV3)。 + +--- + +### 【功能特性】 + +- 基于微信支付 v2 版 API 封装。 +- 支持直连商户、服务商两种模式。 +- 请求时自动生成签名,无需开发者手动干预。 +- 提供了微信支付所需的 MD5、HMAC-SHA-256 等算法工具类。 + +--- + +### 【开发文档】 + +[点此查看](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat)。 + +--- + +### 【更新日志】 + +[点此查看](https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat/blob/main/CHANGELOG.md)。 \ No newline at end of file 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 9d322380..13c14202 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/SKIT.FlurlHttpClient.Wechat.Ads.csproj +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/SKIT.FlurlHttpClient.Wechat.Ads.csproj @@ -9,6 +9,8 @@ SKIT.FlurlHttpClient.Wechat.Ads + LOGO.png + README.md MIT https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat Flurl.Http Wechat Weixin MicroMessage WechatAds WechatAdvertisting 微信 广告平台 微信广告平台 腾讯广告平台 广点通 微信广点通 腾讯广点通 @@ -17,17 +19,28 @@ Fu Diwei git https://github.com/fudiwei/DotNetCore.SKIT.FlurlHttpClient.Wechat.git - true - true - snupkg + + true + true + true + true + true + snupkg + + + + + + + - + diff --git a/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs b/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs index a3444174..bcc31109 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Ads/Utilities/MD5Utility.cs @@ -10,7 +10,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.Utilities public static class MD5Utility { /// - /// 获取信息摘要。 + /// 获取 MD5 信息摘要。 /// /// 信息字节数组。 /// 信息摘要。 @@ -24,7 +24,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.Utilities } /// - /// 获取信息摘要。 + /// 获取 MD5 信息摘要。 /// /// 文本信息。 /// 信息摘要。 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 6a6f3027..7e11db16 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,8 +1,11 @@  - netcoreapp3.1; net6.0 - 9.0 + net472; netcoreapp3.1; net6.0 + latest + enable + true + false diff --git a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestCase_CodeReviewAnalyzer.cs b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestCase_CodeReviewAnalyzer.cs new file mode 100644 index 00000000..67eb5b8b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestCase_CodeReviewAnalyzer.cs @@ -0,0 +1,57 @@ +using System.IO; +using System.Reflection; +using Xunit; + +namespace SKIT.FlurlHttpClient.Wechat.Ads.UnitTests +{ + public class TestCase_CodeReviewAnalyzer + { + private Assembly SourceAssembly { get; } = Assembly.Load("SKIT.FlurlHttpClient.Wechat.Ads"); + + [Fact(DisplayName = "代码评审:分析 API 模型命名")] + public void TestApiModelsNaming() + { + CodeStyleUtil.VerifyApiModelsNaming(SourceAssembly, out var ex); + + if (ex != null) + throw ex; + + Assert.Null(ex); + } + + [Fact(DisplayName = "代码评审:分析 API 模型定义")] + public void TestApiModelsDefinition() + { + string workdir = Path.Combine(TestConfigs.ProjectTestDirectory, "ModelSamples"); + CodeStyleUtil.VerifyApiModelsDefinition(SourceAssembly, workdir, out var ex); + + if (ex != null) + throw ex; + + Assert.Null(ex); + } + + [Fact(DisplayName = "代码评审:分析 API 接口命名")] + public void TestApiExtensionsNaming() + { + CodeStyleUtil.VerifyApiExtensionsNaming(SourceAssembly, out var ex); + + if (ex != null) + throw ex; + + Assert.Null(ex); + } + + [Fact(DisplayName = "代码评审:分析代码规范")] + public void TestCodeStyle() + { + string workdir = Path.Combine(TestConfigs.ProjectSourceDirectory); + CodeStyleUtil.VerifySourceCodeStyle(workdir, out var ex); + + if (ex != null) + throw ex; + + Assert.Null(ex); + } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsSecurityTests.cs b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestCase_HashUtilityTests.cs similarity index 59% rename from test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsSecurityTests.cs rename to test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestCase_HashUtilityTests.cs index c2ed584c..ea2b0c88 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsSecurityTests.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestCase_HashUtilityTests.cs @@ -1,17 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Xunit; +using Xunit; namespace SKIT.FlurlHttpClient.Wechat.Ads.UnitTests { - public class WechatAdsSecurityTests + public class TestCase_HashUtilityTests { - [Fact(DisplayName = "信息摘要(MD5)")] - public void Md5HashTest() + [Fact(DisplayName = "测试用例:MD5 信息摘要")] + public void TestMD5Hash() { string rawData = "spidbff89d5138160943040012345678901234567890uFolxxiZbrZ/PRbyen5uK5D1kgIB2yHyDsfDGxxgeG"; diff --git a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestClients.cs b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestClients.cs index ac2e757f..970b4371 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestClients.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestClients.cs @@ -1,6 +1,4 @@ -using System; - -namespace SKIT.FlurlHttpClient.Wechat.Ads.UnitTests +namespace SKIT.FlurlHttpClient.Wechat.Ads.UnitTests { class TestClients { diff --git a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestConfigs.cs b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestConfigs.cs index eb5dd41c..508e1764 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestConfigs.cs +++ b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/TestConfigs.cs @@ -8,8 +8,9 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.UnitTests { static TestConfigs() { - // NOTICE: 请在项目根目录下按照 appsettings.json 的格式新建 appsettings.local.json 填入测试参数。 - // WARN: 敏感信息请不要提交到 git! + // NOTICE: 请在项目根目录下按照 appsettings.json 的格式新建 appsettings.local.json 填入测试参数。 + // WARNING: 请在 DEBUG 模式下运行测试用例。 + // WARNING: 敏感信息请不要提交到 git! try { @@ -17,13 +18,13 @@ namespace SKIT.FlurlHttpClient.Wechat.Ads.UnitTests using var jdoc = JsonDocument.Parse(stream); var config = jdoc.RootElement.GetProperty("TestConfig"); - WechatAgencyId = config.GetProperty("AgencyId").GetString(); - WechatAgencyAppId = config.GetProperty("AgencyAppId").GetString(); - WechatAgencyApiKey = config.GetProperty("AgencyApiKey").GetString(); - WechatAccessToken = config.GetProperty("AccessToken").GetString(); + WechatAgencyId = config.GetProperty("AgencyId").GetString()!; + WechatAgencyAppId = config.GetProperty("AgencyAppId").GetString()!; + WechatAgencyApiKey = config.GetProperty("AgencyApiKey").GetString()!; + WechatAccessToken = config.GetProperty("AccessToken").GetString()!; - ProjectSourceDirectory = jdoc.RootElement.GetProperty("ProjectSourceDirectory").GetString(); - ProjectTestDirectory = jdoc.RootElement.GetProperty("ProjectTestDirectory").GetString(); + ProjectSourceDirectory = jdoc.RootElement.GetProperty("ProjectSourceDirectory").GetString()!; + ProjectTestDirectory = jdoc.RootElement.GetProperty("ProjectTestDirectory").GetString()!; } catch (Exception ex) { diff --git a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsDeclarationTests.cs b/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsDeclarationTests.cs deleted file mode 100644 index bdc22400..00000000 --- a/test/SKIT.FlurlHttpClient.Wechat.Ads.UnitTests/WechatAdsDeclarationTests.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Threading; -using System.Threading.Tasks; -using Xunit; - -namespace SKIT.FlurlHttpClient.Wechat.Ads.UnitTests -{ - public class WechatAdsDeclarationTests - { - private static readonly Assembly _assembly = Assembly.Load("SKIT.FlurlHttpClient.Wechat.Ads"); - - [Fact(DisplayName = "验证 API 模型命名")] - public void ApiModelsNamingTest() - { - CodeStyleUtil.VerifyApiModelsNaming(_assembly, out var ex); - - if (ex != null) - throw ex; - - Assert.Null(ex); - } - - [Fact(DisplayName = "验证 API 模型定义")] - public void ApiModelsDefinitionTest() - { - string workdir = Path.Combine(TestConfigs.ProjectTestDirectory, "ModelSamples"); - CodeStyleUtil.VerifyApiModelsDefinition(_assembly, workdir, out var ex); - - if (ex != null) - throw ex; - - Assert.Null(ex); - } - - [Fact(DisplayName = "验证 API 接口命名")] - public void ApiExtensionsNamingTest() - { - CodeStyleUtil.VerifyApiExtensionsNaming(_assembly, out var ex); - - if (ex != null) - throw ex; - - Assert.Null(ex); - } - - [Fact(DisplayName = "验证代码规范")] - public void CodeStyleTest() - { - string workdir = Path.Combine(TestConfigs.ProjectSourceDirectory); - CodeStyleUtil.VerifySourceCodeStyle(workdir, out var ex); - - if (ex != null) - throw ex; - - Assert.Null(ex); - } - } -} 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 9117e429..e2262421 100644 --- a/test/SKIT.FlurlHttpClient.Wechat.TestTools/SKIT.FlurlHttpClient.Wechat.TestTools.csproj +++ b/test/SKIT.FlurlHttpClient.Wechat.TestTools/SKIT.FlurlHttpClient.Wechat.TestTools.csproj @@ -7,7 +7,7 @@ - +