From 3a2b53c31879252e392b294c573fa3f1a9d799e0 Mon Sep 17 00:00:00 2001 From: gdlcf88 Date: Fri, 17 Apr 2020 19:33:42 +0800 Subject: [PATCH] Completed entities design --- .../BasketItems/BasketItem.cs | 19 ++ .../Orders/OrderStatus.cs | 13 + .../EShopOrdersDomainModule.cs | 6 +- .../EasyAbp.EShop.Orders.Domain.csproj | 1 + .../Orders/Order.cs | 41 +++ .../Orders/OrderLine.cs | 32 +++ .../.gitattributes | 1 + .../.gitignore | 258 ++++++++++++++++++ .../EasyAbp.EShop.Payment.WeChatPay.sln | 167 ++++++++++++ ...bp.EShop.Payment.WeChatPay.sln.DotSettings | 23 ++ .../common.props | 12 + .../docker-compose.migrations.yml | 13 + .../docker-compose.override.yml | 29 ++ .../docker-compose.yml | 25 ++ .../WeChatPayPermissionDefinitionProvider.cs | 19 ++ .../Authorization/WeChatPayPermissions.cs | 14 + ...mentWeChatPayApplicationContractsModule.cs | 23 ++ ...ent.WeChatPay.Application.Contracts.csproj | 16 ++ .../EShopPaymentWeChatPayApplicationModule.cs | 25 ++ ...EShop.Payment.WeChatPay.Application.csproj | 17 ++ .../WeChatPayAppService.cs | 14 + .../WeChatPayApplicationAutoMapperProfile.cs | 14 + ...EShopPaymentWeChatPayDomainSharedModule.cs | 37 +++ ...hop.Payment.WeChatPay.Domain.Shared.csproj | 19 ++ .../Localization/WeChatPay/cs.json | 6 + .../Localization/WeChatPay/en.json | 6 + .../Localization/WeChatPay/pl.json | 6 + .../Localization/WeChatPay/pt-BR.json | 6 + .../Localization/WeChatPay/sl.json | 6 + .../Localization/WeChatPay/tr.json | 6 + .../Localization/WeChatPay/vi.json | 6 + .../Localization/WeChatPay/zh-Hans.json | 6 + .../Localization/WeChatPay/zh-Hant.json | 6 + .../Localization/WeChatPayResource.cs | 10 + .../WeChatPayErrorCodes.cs | 7 + .../EShopPaymentWeChatPayDomainModule.cs | 12 + ...yAbp.EShop.Payment.WeChatPay.Domain.csproj | 16 ++ .../WeChatPaySettingDefinitionProvider.cs | 14 + .../Settings/WeChatPaySettings.cs | 11 + .../WeChatPayDbProperties.cs | 11 + ...yment.WeChatPay.EntityFrameworkCore.csproj | 15 + ...ymentWeChatPayEntityFrameworkCoreModule.cs | 23 ++ .../IWeChatPayDbContext.cs | 13 + .../EntityFrameworkCore/WeChatPayDbContext.cs | 27 ++ ...ChatPayDbContextModelCreatingExtensions.cs | 43 +++ ...ChatPayModelBuilderConfigurationOptions.cs | 18 ++ ...ShopPaymentWeChatPayHttpApiClientModule.cs | 22 ++ ...op.Payment.WeChatPay.HttpApi.Client.csproj | 15 + .../EShopPaymentWeChatPayHttpApiModule.cs | 33 +++ ...Abp.EShop.Payment.WeChatPay.HttpApi.csproj | 15 + .../WeChatPayController.cs | 13 + ...Abp.EShop.Payment.WeChatPay.MongoDB.csproj | 15 + .../EShopPaymentWeChatPayMongoDbModule.cs | 23 ++ .../MongoDB/IWeChatPayMongoDbContext.cs | 13 + .../MongoDB/WeChatPayMongoDbContext.cs | 20 ++ .../WeChatPayMongoDbContextExtensions.cs | 22 ++ ...ayMongoModelBuilderConfigurationOptions.cs | 14 + .../EShopPaymentWeChatPayWebModule.cs | 57 ++++ ...EasyAbp.EShop.Payment.WeChatPay.Web.csproj | 42 +++ .../Pages/WeChatPay/Index.cshtml | 7 + .../Pages/WeChatPay/Index.cshtml.cs | 9 + .../Pages/WeChatPay/_ViewImports.cshtml | 4 + .../Pages/WeChatPayPage.cs | 16 ++ .../Pages/WeChatPayPageModel.cs | 16 ++ .../Properties/launchSettings.json | 27 ++ .../WeChatPayMenuContributor.cs | 23 ++ .../WeChatPayWebAutoMapperProfile.cs | 14 + ...opPaymentWeChatPayApplicationTestModule.cs | 13 + ...Payment.WeChatPay.Application.Tests.csproj | 16 ++ .../WeChatPayApplicationTestBase.cs | 10 + .../EShopPaymentWeChatPayDomainTestModule.cs | 17 ++ ...Shop.Payment.WeChatPay.Domain.Tests.csproj | 15 + .../WeChatPayDomainTestBase.cs | 10 + ...WeChatPay.EntityFrameworkCore.Tests.csproj | 19 ++ ...tWeChatPayEntityFrameworkCoreTestModule.cs | 41 +++ .../WeChatPayEntityFrameworkCoreTestBase.cs | 10 + .../ClientDemoService.cs | 146 ++++++++++ .../ConsoleTestAppHostedService.cs | 26 ++ ...pPaymentWeChatPayConsoleApiClientModule.cs | 14 + ...atPay.HttpApi.Client.ConsoleTestApp.csproj | 26 ++ .../Program.cs | 21 ++ .../appsettings.json | 21 ++ ...hop.Payment.WeChatPay.MongoDB.Tests.csproj | 17 ++ .../EShopPaymentWeChatPayMongoDbTestModule.cs | 29 ++ .../MongoDB/WeChatPayMongoDbTestBase.cs | 10 + .../EShopPaymentWeChatPayTestBaseModule.cs | 42 +++ ...bp.EShop.Payment.WeChatPay.TestBase.csproj | 23 ++ .../Security/FakeCurrentPrincipalAccessor.cs | 39 +++ .../WeChatPayDataSeedContributor.cs | 27 ++ .../WeChatPayTestBase.cs | 60 ++++ .../EasyAbp.EShop.Payment.Abstractions.csproj | 10 + .../EShop/Payment/IPaymentServiceProvider.cs | 7 + .../FodyWeavers.xml | 3 + .../FodyWeavers.xsd | 30 ++ .../EShopPaymentDomainModule.cs | 6 +- .../EasyAbp.EShop.Payment.Domain.csproj | 2 + .../FreePaymentServiceProvider.cs | 7 + .../PaymentRecordOrders/PaymentRecordOrder.cs | 24 ++ .../PaymentRecords/PaymentRecord.cs | 27 ++ .../RefundRecords/RefundRecord.cs | 31 +++ .../Products/InventoryStrategy.cs | 5 +- samples/EasyMall/aspnet-core/EasyMall.sln | 124 +++++++++ 102 files changed, 2455 insertions(+), 5 deletions(-) create mode 100644 modules/EasyAbp.EShop.Baskets/src/EasyAbp.EShop.Baskets.Domain/BasketItems/BasketItem.cs create mode 100644 modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/Orders/OrderStatus.cs create mode 100644 modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/Orders/Order.cs create mode 100644 modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/Orders/OrderLine.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/.gitattributes create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/.gitignore create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/EasyAbp.EShop.Payment.WeChatPay.sln create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/EasyAbp.EShop.Payment.WeChatPay.sln.DotSettings create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/common.props create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.migrations.yml create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.override.yml create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.yml create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/Authorization/WeChatPayPermissionDefinitionProvider.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/Authorization/WeChatPayPermissions.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/EShopPaymentWeChatPayApplicationContractsModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/EShopPaymentWeChatPayApplicationModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/EasyAbp.EShop.Payment.WeChatPay.Application.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/WeChatPayAppService.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/WeChatPayApplicationAutoMapperProfile.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/EShopPaymentWeChatPayDomainSharedModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/cs.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/en.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/pl.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/pt-BR.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/sl.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/tr.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/vi.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/zh-Hans.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/zh-Hant.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPayResource.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/WeChatPayErrorCodes.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/EShopPaymentWeChatPayDomainModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/EasyAbp.EShop.Payment.WeChatPay.Domain.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/Settings/WeChatPaySettingDefinitionProvider.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/Settings/WeChatPaySettings.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/WeChatPayDbProperties.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/EShopPaymentWeChatPayEntityFrameworkCoreModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/IWeChatPayDbContext.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayDbContext.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayDbContextModelCreatingExtensions.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayModelBuilderConfigurationOptions.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client/EShopPaymentWeChatPayHttpApiClientModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/EShopPaymentWeChatPayHttpApiModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/EasyAbp.EShop.Payment.WeChatPay.HttpApi.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/WeChatPayController.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/EasyAbp.EShop.Payment.WeChatPay.MongoDB.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/EShopPaymentWeChatPayMongoDbModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/IWeChatPayMongoDbContext.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoDbContext.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoDbContextExtensions.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoModelBuilderConfigurationOptions.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/EShopPaymentWeChatPayWebModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/EasyAbp.EShop.Payment.WeChatPay.Web.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/Index.cshtml create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/Index.cshtml.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/_ViewImports.cshtml create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPayPage.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPayPageModel.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Properties/launchSettings.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/WeChatPayMenuContributor.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/WeChatPayWebAutoMapperProfile.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/EShopPaymentWeChatPayApplicationTestModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/EasyAbp.EShop.Payment.WeChatPay.Application.Tests.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/WeChatPayApplicationTestBase.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/EShopPaymentWeChatPayDomainTestModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/WeChatPayDomainTestBase.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopPaymentWeChatPayEntityFrameworkCoreTestModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EntityFrameworkCore/WeChatPayEntityFrameworkCoreTestBase.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/EShopPaymentWeChatPayConsoleApiClientModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/Program.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/appsettings.json create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/MongoDB/EShopPaymentWeChatPayMongoDbTestModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/MongoDB/WeChatPayMongoDbTestBase.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/EShopPaymentWeChatPayTestBaseModule.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/EasyAbp.EShop.Payment.WeChatPay.TestBase.csproj create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/Security/FakeCurrentPrincipalAccessor.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/WeChatPayDataSeedContributor.cs create mode 100644 modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/WeChatPayTestBase.cs create mode 100644 modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/EasyAbp.EShop.Payment.Abstractions.csproj create mode 100644 modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/EasyAbp/EShop/Payment/IPaymentServiceProvider.cs create mode 100644 modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/FodyWeavers.xml create mode 100644 modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/FodyWeavers.xsd create mode 100644 modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/FreePaymentServiceProvider.cs create mode 100644 modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/PaymentRecordOrders/PaymentRecordOrder.cs create mode 100644 modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/PaymentRecords/PaymentRecord.cs create mode 100644 modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/RefundRecords/RefundRecord.cs diff --git a/modules/EasyAbp.EShop.Baskets/src/EasyAbp.EShop.Baskets.Domain/BasketItems/BasketItem.cs b/modules/EasyAbp.EShop.Baskets/src/EasyAbp.EShop.Baskets.Domain/BasketItems/BasketItem.cs new file mode 100644 index 00000000..4e474000 --- /dev/null +++ b/modules/EasyAbp.EShop.Baskets/src/EasyAbp.EShop.Baskets.Domain/BasketItems/BasketItem.cs @@ -0,0 +1,19 @@ +using System; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace EasyAbp.EShop.Baskets.BasketItems +{ + public class BasketItem : CreationAuditedAggregateRoot, IMultiTenant + { + public virtual Guid? TenantId { get; protected set; } + + public virtual Guid UserId { get; protected set; } + + public virtual Guid ProductId { get; protected set; } + + public virtual Guid ProductSkuId { get; protected set; } + + public virtual int Quantity { get; protected set; } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/Orders/OrderStatus.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/Orders/OrderStatus.cs new file mode 100644 index 00000000..d70ff88a --- /dev/null +++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain.Shared/Orders/OrderStatus.cs @@ -0,0 +1,13 @@ +using System; + +namespace EasyAbp.EShop.Orders.Orders +{ + [Flags] + public enum OrderStatus + { + Pending = 1, + Processing = 2, + Completed = 4, + Cancelled = 8 + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EShopOrdersDomainModule.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EShopOrdersDomainModule.cs index c40b4527..3579589b 100644 --- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EShopOrdersDomainModule.cs +++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EShopOrdersDomainModule.cs @@ -1,9 +1,11 @@ -using Volo.Abp.Modularity; +using EasyAbp.EShop.Stores; +using Volo.Abp.Modularity; namespace EasyAbp.EShop.Orders { [DependsOn( - typeof(EShopOrdersDomainSharedModule) + typeof(EShopOrdersDomainSharedModule), + typeof(EShopStoresDomainSharedModule) )] public class EShopOrdersDomainModule : AbpModule { diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp.EShop.Orders.Domain.csproj b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp.EShop.Orders.Domain.csproj index c0850e5b..ed6b28f2 100644 --- a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp.EShop.Orders.Domain.csproj +++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/EasyAbp.EShop.Orders.Domain.csproj @@ -9,6 +9,7 @@ + diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/Orders/Order.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/Orders/Order.cs new file mode 100644 index 00000000..2db9d985 --- /dev/null +++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/Orders/Order.cs @@ -0,0 +1,41 @@ +using System; +using EasyAbp.EShop.Stores.Stores; +using JetBrains.Annotations; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace EasyAbp.EShop.Orders.Orders +{ + public class Order : FullAuditedAggregateRoot, IMultiTenant, IMultiStore + { + public virtual Guid? TenantId { get; protected set; } + + public virtual Guid? StoreId { get; protected set; } + + public virtual Guid CustomerUserId { get; protected set; } + + public virtual OrderStatus OrderStatus { get; protected set; } + + public virtual bool NeedShipping { get; protected set; } + + public virtual Guid? ShippingAddressId { get; protected set; } + + public virtual Guid? ShippingMethodId { get; protected set; } + + public virtual decimal Freight { get; protected set; } + + public virtual decimal ProductTotalPrice { get; protected set; } + + public virtual decimal TotalDiscount { get; protected set; } + + public virtual decimal TotalPrice { get; protected set; } + + public virtual decimal RefundedAmount { get; protected set; } + + [CanBeNull] + public virtual string CustomerRemark { get; protected set; } + + [CanBeNull] + public virtual string StaffRemark { get; protected set; } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/Orders/OrderLine.cs b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/Orders/OrderLine.cs new file mode 100644 index 00000000..d10e39b0 --- /dev/null +++ b/modules/EasyAbp.EShop.Orders/src/EasyAbp.EShop.Orders.Domain/Orders/OrderLine.cs @@ -0,0 +1,32 @@ +using System; +using JetBrains.Annotations; +using Volo.Abp.Domain.Entities.Auditing; + +namespace EasyAbp.EShop.Orders.Orders +{ + public class OrderLine : FullAuditedEntity + { + public virtual Guid OrderId { get; protected set; } + + public virtual Guid ProductId { get; protected set; } + + public virtual Guid ProductSkuId { get; protected set; } + + [NotNull] + public virtual string ProductName { get; protected set; } + + [CanBeNull] + public virtual string SkuDescription { get; protected set; } + + [CanBeNull] + public virtual string MediaResources { get; protected set; } + + public virtual decimal UnitPrice { get; protected set; } + + public virtual decimal TotalPrice { get; protected set; } + + public virtual decimal TotalDiscount { get; protected set; } + + public virtual int Quantity { get; protected set; } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/.gitattributes b/modules/EasyAbp.EShop.Payment.WeChatPay/.gitattributes new file mode 100644 index 00000000..c941e526 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/.gitattributes @@ -0,0 +1 @@ +**/wwwroot/libs/** linguist-vendored diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/.gitignore b/modules/EasyAbp.EShop.Payment.WeChatPay/.gitignore new file mode 100644 index 00000000..c7d0b041 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/.gitignore @@ -0,0 +1,258 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# WeChatPay +host/EasyAbp.EShop.Payment.WeChatPay.IdentityServer/Logs/logs.txt +host/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Host/Logs/logs.txt +host/EasyAbp.EShop.Payment.WeChatPay.Web.Host/Logs/logs.txt +host/EasyAbp.EShop.Payment.WeChatPay.Web.Unified/Logs/logs.txt diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/EasyAbp.EShop.Payment.WeChatPay.sln b/modules/EasyAbp.EShop.Payment.WeChatPay/EasyAbp.EShop.Payment.WeChatPay.sln new file mode 100644 index 00000000..435dd209 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/EasyAbp.EShop.Payment.WeChatPay.sln @@ -0,0 +1,167 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29001.49 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Domain.Shared", "src\EasyAbp.EShop.Payment.WeChatPay.Domain.Shared\EasyAbp.EShop.Payment.WeChatPay.Domain.Shared.csproj", "{D64C1577-4929-4B60-939E-96DE1534891A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Domain", "src\EasyAbp.EShop.Payment.WeChatPay.Domain\EasyAbp.EShop.Payment.WeChatPay.Domain.csproj", "{F2840BC7-0188-4606-9126-DADD0F5ABF7A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Application.Contracts", "src\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts.csproj", "{BD65D04F-08D5-40C1-8C24-77CA0BACB877}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Application", "src\EasyAbp.EShop.Payment.WeChatPay.Application\EasyAbp.EShop.Payment.WeChatPay.Application.csproj", "{78040F9E-3501-4A40-82DF-00A597710F35}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{649A3FFA-182F-4E56-9717-E6A9A2BEC545}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{E400416D-2895-4512-9D17-90681EEC7E0A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore", "src\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.csproj", "{0CE86223-D31D-4315-A1F5-87BA3EE1B844}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.MongoDB", "src\EasyAbp.EShop.Payment.WeChatPay.MongoDB\EasyAbp.EShop.Payment.WeChatPay.MongoDB.csproj", "{F1C58097-4C08-4D88-8976-6B3389391481}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.HttpApi", "src\EasyAbp.EShop.Payment.WeChatPay.HttpApi\EasyAbp.EShop.Payment.WeChatPay.HttpApi.csproj", "{077AA5F8-8B61-420C-A6B5-0150A66FDB34}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client", "src\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.csproj", "{36E2735F-CEAB-44C8-A6D1-2CDAFF399751}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.TestBase", "test\EasyAbp.EShop.Payment.WeChatPay.TestBase\EasyAbp.EShop.Payment.WeChatPay.TestBase.csproj", "{C5BB573D-3030-4BCB-88B7-F6A85C32766C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests", "test\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests.csproj", "{527F645C-C1FC-406E-8479-81386C8ECF13}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests", "test\EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests\EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests.csproj", "{D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Domain.Tests", "test\EasyAbp.EShop.Payment.WeChatPay.Domain.Tests\EasyAbp.EShop.Payment.WeChatPay.Domain.Tests.csproj", "{E60895E5-79C4-447D-88B7-85CB5BA336A4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Application.Tests", "test\EasyAbp.EShop.Payment.WeChatPay.Application.Tests\EasyAbp.EShop.Payment.WeChatPay.Application.Tests.csproj", "{90CB5DC4-C040-45C7-8900-9688B26405BC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.HttpApi.Host", "host\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Host\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Host.csproj", "{37B135B0-DAFE-4616-B25C-1BDF32FC44A2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Web", "src\EasyAbp.EShop.Payment.WeChatPay.Web\EasyAbp.EShop.Payment.WeChatPay.Web.csproj", "{3B7B6317-1B85-4164-8E11-75574F80AE17}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp", "test\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp.csproj", "{1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Web.Host", "host\EasyAbp.EShop.Payment.WeChatPay.Web.Host\EasyAbp.EShop.Payment.WeChatPay.Web.Host.csproj", "{73513786-B6C6-4A21-89C5-0FBDD0A46107}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.IdentityServer", "host\EasyAbp.EShop.Payment.WeChatPay.IdentityServer\EasyAbp.EShop.Payment.WeChatPay.IdentityServer.csproj", "{690203F4-3CD5-4569-88D9-EE831EEA5F5F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Host.Shared", "host\EasyAbp.EShop.Payment.WeChatPay.Host.Shared\EasyAbp.EShop.Payment.WeChatPay.Host.Shared.csproj", "{F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EasyAbp.EShop.Payment.WeChatPay.Web.Unified", "host\EasyAbp.EShop.Payment.WeChatPay.Web.Unified\EasyAbp.EShop.Payment.WeChatPay.Web.Unified.csproj", "{3D872C41-E226-45C8-89C1-9D3DBD7C73F2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D64C1577-4929-4B60-939E-96DE1534891A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D64C1577-4929-4B60-939E-96DE1534891A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D64C1577-4929-4B60-939E-96DE1534891A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D64C1577-4929-4B60-939E-96DE1534891A}.Release|Any CPU.Build.0 = Release|Any CPU + {F2840BC7-0188-4606-9126-DADD0F5ABF7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2840BC7-0188-4606-9126-DADD0F5ABF7A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2840BC7-0188-4606-9126-DADD0F5ABF7A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2840BC7-0188-4606-9126-DADD0F5ABF7A}.Release|Any CPU.Build.0 = Release|Any CPU + {BD65D04F-08D5-40C1-8C24-77CA0BACB877}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BD65D04F-08D5-40C1-8C24-77CA0BACB877}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BD65D04F-08D5-40C1-8C24-77CA0BACB877}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BD65D04F-08D5-40C1-8C24-77CA0BACB877}.Release|Any CPU.Build.0 = Release|Any CPU + {78040F9E-3501-4A40-82DF-00A597710F35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {78040F9E-3501-4A40-82DF-00A597710F35}.Debug|Any CPU.Build.0 = Debug|Any CPU + {78040F9E-3501-4A40-82DF-00A597710F35}.Release|Any CPU.ActiveCfg = Release|Any CPU + {78040F9E-3501-4A40-82DF-00A597710F35}.Release|Any CPU.Build.0 = Release|Any CPU + {0CE86223-D31D-4315-A1F5-87BA3EE1B844}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0CE86223-D31D-4315-A1F5-87BA3EE1B844}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0CE86223-D31D-4315-A1F5-87BA3EE1B844}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0CE86223-D31D-4315-A1F5-87BA3EE1B844}.Release|Any CPU.Build.0 = Release|Any CPU + {F1C58097-4C08-4D88-8976-6B3389391481}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1C58097-4C08-4D88-8976-6B3389391481}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1C58097-4C08-4D88-8976-6B3389391481}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1C58097-4C08-4D88-8976-6B3389391481}.Release|Any CPU.Build.0 = Release|Any CPU + {077AA5F8-8B61-420C-A6B5-0150A66FDB34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {077AA5F8-8B61-420C-A6B5-0150A66FDB34}.Debug|Any CPU.Build.0 = Debug|Any CPU + {077AA5F8-8B61-420C-A6B5-0150A66FDB34}.Release|Any CPU.ActiveCfg = Release|Any CPU + {077AA5F8-8B61-420C-A6B5-0150A66FDB34}.Release|Any CPU.Build.0 = Release|Any CPU + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751}.Release|Any CPU.Build.0 = Release|Any CPU + {C5BB573D-3030-4BCB-88B7-F6A85C32766C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5BB573D-3030-4BCB-88B7-F6A85C32766C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5BB573D-3030-4BCB-88B7-F6A85C32766C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5BB573D-3030-4BCB-88B7-F6A85C32766C}.Release|Any CPU.Build.0 = Release|Any CPU + {527F645C-C1FC-406E-8479-81386C8ECF13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {527F645C-C1FC-406E-8479-81386C8ECF13}.Debug|Any CPU.Build.0 = Debug|Any CPU + {527F645C-C1FC-406E-8479-81386C8ECF13}.Release|Any CPU.ActiveCfg = Release|Any CPU + {527F645C-C1FC-406E-8479-81386C8ECF13}.Release|Any CPU.Build.0 = Release|Any CPU + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6}.Release|Any CPU.Build.0 = Release|Any CPU + {E60895E5-79C4-447D-88B7-85CB5BA336A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E60895E5-79C4-447D-88B7-85CB5BA336A4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E60895E5-79C4-447D-88B7-85CB5BA336A4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E60895E5-79C4-447D-88B7-85CB5BA336A4}.Release|Any CPU.Build.0 = Release|Any CPU + {90CB5DC4-C040-45C7-8900-9688B26405BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90CB5DC4-C040-45C7-8900-9688B26405BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90CB5DC4-C040-45C7-8900-9688B26405BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90CB5DC4-C040-45C7-8900-9688B26405BC}.Release|Any CPU.Build.0 = Release|Any CPU + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2}.Release|Any CPU.Build.0 = Release|Any CPU + {3B7B6317-1B85-4164-8E11-75574F80AE17}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3B7B6317-1B85-4164-8E11-75574F80AE17}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3B7B6317-1B85-4164-8E11-75574F80AE17}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3B7B6317-1B85-4164-8E11-75574F80AE17}.Release|Any CPU.Build.0 = Release|Any CPU + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8}.Release|Any CPU.Build.0 = Release|Any CPU + {73513786-B6C6-4A21-89C5-0FBDD0A46107}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73513786-B6C6-4A21-89C5-0FBDD0A46107}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73513786-B6C6-4A21-89C5-0FBDD0A46107}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73513786-B6C6-4A21-89C5-0FBDD0A46107}.Release|Any CPU.Build.0 = Release|Any CPU + {690203F4-3CD5-4569-88D9-EE831EEA5F5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {690203F4-3CD5-4569-88D9-EE831EEA5F5F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {690203F4-3CD5-4569-88D9-EE831EEA5F5F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {690203F4-3CD5-4569-88D9-EE831EEA5F5F}.Release|Any CPU.Build.0 = Release|Any CPU + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB}.Release|Any CPU.Build.0 = Release|Any CPU + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {D64C1577-4929-4B60-939E-96DE1534891A} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {F2840BC7-0188-4606-9126-DADD0F5ABF7A} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {BD65D04F-08D5-40C1-8C24-77CA0BACB877} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {78040F9E-3501-4A40-82DF-00A597710F35} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {0CE86223-D31D-4315-A1F5-87BA3EE1B844} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {F1C58097-4C08-4D88-8976-6B3389391481} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {077AA5F8-8B61-420C-A6B5-0150A66FDB34} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {36E2735F-CEAB-44C8-A6D1-2CDAFF399751} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {C5BB573D-3030-4BCB-88B7-F6A85C32766C} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {527F645C-C1FC-406E-8479-81386C8ECF13} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {D0AD9179-125C-40B2-A8EE-CD4C1EE24BB6} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {E60895E5-79C4-447D-88B7-85CB5BA336A4} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {90CB5DC4-C040-45C7-8900-9688B26405BC} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {37B135B0-DAFE-4616-B25C-1BDF32FC44A2} = {E400416D-2895-4512-9D17-90681EEC7E0A} + {3B7B6317-1B85-4164-8E11-75574F80AE17} = {649A3FFA-182F-4E56-9717-E6A9A2BEC545} + {1EDCD6D4-DF3A-4E3B-ABB6-C0D0B373EAB8} = {CCD2960C-23CC-4AB4-B84D-60C7AAA52F4D} + {73513786-B6C6-4A21-89C5-0FBDD0A46107} = {E400416D-2895-4512-9D17-90681EEC7E0A} + {690203F4-3CD5-4569-88D9-EE831EEA5F5F} = {E400416D-2895-4512-9D17-90681EEC7E0A} + {F6AC8D4A-EDD7-4514-8E8A-5BCB019864DB} = {E400416D-2895-4512-9D17-90681EEC7E0A} + {3D872C41-E226-45C8-89C1-9D3DBD7C73F2} = {E400416D-2895-4512-9D17-90681EEC7E0A} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {4324B3B4-B60B-4E3C-91D8-59576B4E26DD} + EndGlobalSection +EndGlobal diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/EasyAbp.EShop.Payment.WeChatPay.sln.DotSettings b/modules/EasyAbp.EShop.Payment.WeChatPay/EasyAbp.EShop.Payment.WeChatPay.sln.DotSettings new file mode 100644 index 00000000..cb0b2c91 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/EasyAbp.EShop.Payment.WeChatPay.sln.DotSettings @@ -0,0 +1,23 @@ + + True + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + WARNING + Required + Required + Required + Required + False + True + False + False + True + False + False + SQL + \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/common.props b/modules/EasyAbp.EShop.Payment.WeChatPay/common.props new file mode 100644 index 00000000..4adb69f0 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/common.props @@ -0,0 +1,12 @@ + + + latest + 0.1.0 + $(NoWarn);CS1591 + + + + + + + \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.migrations.yml b/modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.migrations.yml new file mode 100644 index 00000000..326317a9 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.migrations.yml @@ -0,0 +1,13 @@ +version: '3.4' + +services: + migrations: + build: + context: ../../ + dockerfile: templates/service/database/Dockerfile + depends_on: + - sqlserver + environment: + - IdentityServer_DB=WeChatPay_Identity + - WeChatPay_DB=WeChatPay_ModuleDb + - SA_PASSWORD=yourStrong(!)Password diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.override.yml b/modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.override.yml new file mode 100644 index 00000000..85e84d52 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.override.yml @@ -0,0 +1,29 @@ +version: '3.4' + +services: + sqlserver: + environment: + - SA_PASSWORD=yourStrong(!)Password + - ACCEPT_EULA=Y + ports: + - "51599:1433" + + identity-server: + environment: + - ASPNETCORE_URLS=http://0.0.0.0:80 + - ConnectionStrings__Default=Server=sqlserver;Database=WeChatPay_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=WeChatPay_Cache;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + ports: + - "51600:80" + + we-chat-pay: + environment: + - ASPNETCORE_URLS=http://0.0.0.0:80 + - ConnectionStrings__Default=Server=sqlserver;Database=WeChatPay_ModuleDb;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpSettingManagement=Server=sqlserver;Database=WeChatPay_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpPermissionManagement=Server=sqlserver;Database=WeChatPay_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__AbpAuditLogging=Server=sqlserver;Database=WeChatPay_Identity;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - ConnectionStrings__SqlServerCache=Server=sqlserver;Database=WeChatPay_Cache;Trusted_Connection=True;MultipleActiveResultSets=true;User=sa;Password=yourStrong(!)Password;Integrated Security=false + - AuthServer__Authority=http://identity-server + ports: + - "51601:80" \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.yml b/modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.yml new file mode 100644 index 00000000..f8dd529a --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/docker-compose.yml @@ -0,0 +1,25 @@ +version: '3.4' + +services: + sqlserver: + image: mcr.microsoft.com/mssql/server + volumes: + - dbdata:/var/opt/mssql + + identity-server: + build: + context: ../../ + dockerfile: templates/service/host/IdentityServerHost/Dockerfile + depends_on: + - sqlserver + + we-chat-pay: + build: + context: ../../ + dockerfile: templates/service/host/EasyAbp.EShop.Payment.WeChatPay.Host/Dockerfile + depends_on: + - sqlserver + - identity-server + +volumes: + dbdata: \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/Authorization/WeChatPayPermissionDefinitionProvider.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/Authorization/WeChatPayPermissionDefinitionProvider.cs new file mode 100644 index 00000000..214296cd --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/Authorization/WeChatPayPermissionDefinitionProvider.cs @@ -0,0 +1,19 @@ +using EasyAbp.EShop.Payment.WeChatPay.Localization; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Localization; + +namespace EasyAbp.EShop.Payment.WeChatPay.Authorization +{ + public class WeChatPayPermissionDefinitionProvider : PermissionDefinitionProvider + { + public override void Define(IPermissionDefinitionContext context) + { + //var moduleGroup = context.AddGroup(WeChatPayPermissions.GroupName, L("Permission:WeChatPay")); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/Authorization/WeChatPayPermissions.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/Authorization/WeChatPayPermissions.cs new file mode 100644 index 00000000..f5843a50 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/Authorization/WeChatPayPermissions.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Reflection; + +namespace EasyAbp.EShop.Payment.WeChatPay.Authorization +{ + public class WeChatPayPermissions + { + public const string GroupName = "WeChatPay"; + + public static string[] GetAll() + { + return ReflectionHelper.GetPublicConstantsRecursively(typeof(WeChatPayPermissions)); + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/EShopPaymentWeChatPayApplicationContractsModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/EShopPaymentWeChatPayApplicationContractsModule.cs new file mode 100644 index 00000000..3de15dc4 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/EShopPaymentWeChatPayApplicationContractsModule.cs @@ -0,0 +1,23 @@ +using Volo.Abp.Application; +using Volo.Abp.Modularity; +using Volo.Abp.VirtualFileSystem; +using Volo.Abp.Authorization; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + [DependsOn( + typeof(EShopPaymentWeChatPayDomainSharedModule), + typeof(AbpDddApplicationContractsModule), + typeof(AbpAuthorizationModule) + )] + public class EShopPaymentWeChatPayApplicationContractsModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.FileSets.AddEmbedded("EasyAbp.EShop.Payment.WeChatPay"); + }); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts.csproj new file mode 100644 index 00000000..33be6d6f --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts/EasyAbp.EShop.Payment.WeChatPay.Application.Contracts.csproj @@ -0,0 +1,16 @@ + + + + + + netstandard2.0 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/EShopPaymentWeChatPayApplicationModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/EShopPaymentWeChatPayApplicationModule.cs new file mode 100644 index 00000000..139f5974 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/EShopPaymentWeChatPayApplicationModule.cs @@ -0,0 +1,25 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AutoMapper; +using Volo.Abp.Modularity; +using Volo.Abp.Application; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + [DependsOn( + typeof(EShopPaymentWeChatPayDomainModule), + typeof(EShopPaymentWeChatPayApplicationContractsModule), + typeof(AbpDddApplicationModule), + typeof(AbpAutoMapperModule) + )] + public class EShopPaymentWeChatPayApplicationModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAutoMapperObjectMapper(); + Configure(options => + { + options.AddMaps(validate: true); + }); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/EasyAbp.EShop.Payment.WeChatPay.Application.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/EasyAbp.EShop.Payment.WeChatPay.Application.csproj new file mode 100644 index 00000000..edd66fc2 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/EasyAbp.EShop.Payment.WeChatPay.Application.csproj @@ -0,0 +1,17 @@ + + + + + + netstandard2.0 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/WeChatPayAppService.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/WeChatPayAppService.cs new file mode 100644 index 00000000..4dda92e5 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/WeChatPayAppService.cs @@ -0,0 +1,14 @@ +using EasyAbp.EShop.Payment.WeChatPay.Localization; +using Volo.Abp.Application.Services; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + public abstract class WeChatPayAppService : ApplicationService + { + protected WeChatPayAppService() + { + LocalizationResource = typeof(WeChatPayResource); + ObjectMapperContext = typeof(EShopPaymentWeChatPayApplicationModule); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/WeChatPayApplicationAutoMapperProfile.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/WeChatPayApplicationAutoMapperProfile.cs new file mode 100644 index 00000000..ac2c16d0 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Application/WeChatPayApplicationAutoMapperProfile.cs @@ -0,0 +1,14 @@ +using AutoMapper; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + public class WeChatPayApplicationAutoMapperProfile : Profile + { + public WeChatPayApplicationAutoMapperProfile() + { + /* You can configure your AutoMapper mapping configuration here. + * Alternatively, you can split your mapping configurations + * into multiple profile classes for a better organization. */ + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/EShopPaymentWeChatPayDomainSharedModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/EShopPaymentWeChatPayDomainSharedModule.cs new file mode 100644 index 00000000..2df0b714 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/EShopPaymentWeChatPayDomainSharedModule.cs @@ -0,0 +1,37 @@ +using Volo.Abp.Modularity; +using Volo.Abp.Localization; +using EasyAbp.EShop.Payment.WeChatPay.Localization; +using Volo.Abp.Localization.ExceptionHandling; +using Volo.Abp.Validation; +using Volo.Abp.Validation.Localization; +using Volo.Abp.VirtualFileSystem; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + [DependsOn( + typeof(AbpValidationModule) + )] + public class EShopPaymentWeChatPayDomainSharedModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.FileSets.AddEmbedded("EasyAbp.EShop.Payment.WeChatPay"); + }); + + Configure(options => + { + options.Resources + .Add("en") + .AddBaseTypes(typeof(AbpValidationResource)) + .AddVirtualJson("/Localization/WeChatPay"); + }); + + Configure(options => + { + options.MapCodeNamespace("WeChatPay", typeof(WeChatPayResource)); + }); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared.csproj new file mode 100644 index 00000000..42b5a210 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared.csproj @@ -0,0 +1,19 @@ + + + + + + netstandard2.0 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/cs.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/cs.json new file mode 100644 index 00000000..6a060a54 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/cs.json @@ -0,0 +1,6 @@ +{ + "culture": "cs", + "texts": { + + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/en.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/en.json new file mode 100644 index 00000000..171d9a12 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/en.json @@ -0,0 +1,6 @@ +{ + "culture": "en", + "texts": { + "ManageYourProfile": "Manage your profile" + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/pl.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/pl.json new file mode 100644 index 00000000..2ea227cb --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/pl.json @@ -0,0 +1,6 @@ +{ + "culture": "pl", + "texts": { + + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/pt-BR.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/pt-BR.json new file mode 100644 index 00000000..6d746df0 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/pt-BR.json @@ -0,0 +1,6 @@ +{ + "culture": "pt-BR", + "texts": { + + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/sl.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/sl.json new file mode 100644 index 00000000..687d4257 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/sl.json @@ -0,0 +1,6 @@ +{ + "culture": "sl", + "texts": { + "ManageYourProfile": "Upravljajte svojim profilom" + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/tr.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/tr.json new file mode 100644 index 00000000..2b481933 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/tr.json @@ -0,0 +1,6 @@ +{ + "culture": "tr", + "texts": { + "ManageYourProfile": "Profil ynetimi" + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/vi.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/vi.json new file mode 100644 index 00000000..d8eb5f3c --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/vi.json @@ -0,0 +1,6 @@ +{ + "culture": "vi", + "texts": { + + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/zh-Hans.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/zh-Hans.json new file mode 100644 index 00000000..99586f01 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/zh-Hans.json @@ -0,0 +1,6 @@ +{ + "culture": "zh-Hans", + "texts": { + "ManageYourProfile": "管理个人资料" + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/zh-Hant.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/zh-Hant.json new file mode 100644 index 00000000..ceea0555 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPay/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "culture": "zh-Hant", + "texts": { + "ManageYourProfile": "管理個人資料" + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPayResource.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPayResource.cs new file mode 100644 index 00000000..4cf65a26 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/Localization/WeChatPayResource.cs @@ -0,0 +1,10 @@ +using Volo.Abp.Localization; + +namespace EasyAbp.EShop.Payment.WeChatPay.Localization +{ + [LocalizationResourceName("WeChatPay")] + public class WeChatPayResource + { + + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/WeChatPayErrorCodes.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/WeChatPayErrorCodes.cs new file mode 100644 index 00000000..075cf051 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain.Shared/WeChatPayErrorCodes.cs @@ -0,0 +1,7 @@ +namespace EasyAbp.EShop.Payment.WeChatPay +{ + public static class WeChatPayErrorCodes + { + //Add your business exception error codes here... + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/EShopPaymentWeChatPayDomainModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/EShopPaymentWeChatPayDomainModule.cs new file mode 100644 index 00000000..a7ab4e2c --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/EShopPaymentWeChatPayDomainModule.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Modularity; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + [DependsOn( + typeof(EShopPaymentWeChatPayDomainSharedModule) + )] + public class EShopPaymentWeChatPayDomainModule : AbpModule + { + + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/EasyAbp.EShop.Payment.WeChatPay.Domain.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/EasyAbp.EShop.Payment.WeChatPay.Domain.csproj new file mode 100644 index 00000000..868bb854 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/EasyAbp.EShop.Payment.WeChatPay.Domain.csproj @@ -0,0 +1,16 @@ + + + + + + netstandard2.0 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/Settings/WeChatPaySettingDefinitionProvider.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/Settings/WeChatPaySettingDefinitionProvider.cs new file mode 100644 index 00000000..7b187103 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/Settings/WeChatPaySettingDefinitionProvider.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Settings; + +namespace EasyAbp.EShop.Payment.WeChatPay.Settings +{ + public class WeChatPaySettingDefinitionProvider : SettingDefinitionProvider + { + public override void Define(ISettingDefinitionContext context) + { + /* Define module settings here. + * Use names from WeChatPaySettings class. + */ + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/Settings/WeChatPaySettings.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/Settings/WeChatPaySettings.cs new file mode 100644 index 00000000..e4eb06df --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/Settings/WeChatPaySettings.cs @@ -0,0 +1,11 @@ +namespace EasyAbp.EShop.Payment.WeChatPay.Settings +{ + public static class WeChatPaySettings + { + public const string GroupName = "WeChatPay"; + + /* Add constants for setting names. Example: + * public const string MySettingName = GroupName + ".MySettingName"; + */ + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/WeChatPayDbProperties.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/WeChatPayDbProperties.cs new file mode 100644 index 00000000..6339eac8 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Domain/WeChatPayDbProperties.cs @@ -0,0 +1,11 @@ +namespace EasyAbp.EShop.Payment.WeChatPay +{ + public static class WeChatPayDbProperties + { + public static string DbTablePrefix { get; set; } = "WeChatPay"; + + public static string DbSchema { get; set; } = null; + + public const string ConnectionStringName = "WeChatPay"; + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.csproj new file mode 100644 index 00000000..4f32780e --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.csproj @@ -0,0 +1,15 @@ + + + + + + netstandard2.0 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/EShopPaymentWeChatPayEntityFrameworkCoreModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/EShopPaymentWeChatPayEntityFrameworkCoreModule.cs new file mode 100644 index 00000000..61c88f47 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/EShopPaymentWeChatPayEntityFrameworkCoreModule.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Modularity; + +namespace EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore +{ + [DependsOn( + typeof(EShopPaymentWeChatPayDomainModule), + typeof(AbpEntityFrameworkCoreModule) + )] + public class EShopPaymentWeChatPayEntityFrameworkCoreModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAbpDbContext(options => + { + /* Add custom repositories here. Example: + * options.AddRepository(); + */ + }); + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/IWeChatPayDbContext.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/IWeChatPayDbContext.cs new file mode 100644 index 00000000..082d2375 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/IWeChatPayDbContext.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Data; +using Volo.Abp.EntityFrameworkCore; + +namespace EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore +{ + [ConnectionStringName(WeChatPayDbProperties.ConnectionStringName)] + public interface IWeChatPayDbContext : IEfCoreDbContext + { + /* Add DbSet for each Aggregate Root here. Example: + * DbSet Questions { get; } + */ + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayDbContext.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayDbContext.cs new file mode 100644 index 00000000..49ad296a --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayDbContext.cs @@ -0,0 +1,27 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Data; +using Volo.Abp.EntityFrameworkCore; + +namespace EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore +{ + [ConnectionStringName(WeChatPayDbProperties.ConnectionStringName)] + public class WeChatPayDbContext : AbpDbContext, IWeChatPayDbContext + { + /* Add DbSet for each Aggregate Root here. Example: + * public DbSet Questions { get; set; } + */ + + public WeChatPayDbContext(DbContextOptions options) + : base(options) + { + + } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + + builder.ConfigureWeChatPay(); + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayDbContextModelCreatingExtensions.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayDbContextModelCreatingExtensions.cs new file mode 100644 index 00000000..609751d2 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayDbContextModelCreatingExtensions.cs @@ -0,0 +1,43 @@ +using System; +using Microsoft.EntityFrameworkCore; +using Volo.Abp; + +namespace EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore +{ + public static class WeChatPayDbContextModelCreatingExtensions + { + public static void ConfigureWeChatPay( + this ModelBuilder builder, + Action optionsAction = null) + { + Check.NotNull(builder, nameof(builder)); + + var options = new WeChatPayModelBuilderConfigurationOptions( + WeChatPayDbProperties.DbTablePrefix, + WeChatPayDbProperties.DbSchema + ); + + optionsAction?.Invoke(options); + + /* Configure all entities here. Example: + + builder.Entity(b => + { + //Configure table & schema name + b.ToTable(options.TablePrefix + "Questions", options.Schema); + + b.ConfigureByConvention(); + + //Properties + b.Property(q => q.Title).IsRequired().HasMaxLength(QuestionConsts.MaxTitleLength); + + //Relations + b.HasMany(question => question.Tags).WithOne().HasForeignKey(qt => qt.QuestionId); + + //Indexes + b.HasIndex(q => q.CreationTime); + }); + */ + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayModelBuilderConfigurationOptions.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayModelBuilderConfigurationOptions.cs new file mode 100644 index 00000000..ab788ac1 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore/EntityFrameworkCore/WeChatPayModelBuilderConfigurationOptions.cs @@ -0,0 +1,18 @@ +using JetBrains.Annotations; +using Volo.Abp.EntityFrameworkCore.Modeling; + +namespace EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore +{ + public class WeChatPayModelBuilderConfigurationOptions : AbpModelBuilderConfigurationOptions + { + public WeChatPayModelBuilderConfigurationOptions( + [NotNull] string tablePrefix = "", + [CanBeNull] string schema = null) + : base( + tablePrefix, + schema) + { + + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client/EShopPaymentWeChatPayHttpApiClientModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client/EShopPaymentWeChatPayHttpApiClientModule.cs new file mode 100644 index 00000000..89a6395f --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client/EShopPaymentWeChatPayHttpApiClientModule.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Http.Client; +using Volo.Abp.Modularity; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + [DependsOn( + typeof(EShopPaymentWeChatPayApplicationContractsModule), + typeof(AbpHttpClientModule))] + public class EShopPaymentWeChatPayHttpApiClientModule : AbpModule + { + public const string RemoteServiceName = "WeChatPay"; + + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddHttpClientProxies( + typeof(EShopPaymentWeChatPayApplicationContractsModule).Assembly, + RemoteServiceName + ); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.csproj new file mode 100644 index 00000000..bde444e4 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.csproj @@ -0,0 +1,15 @@ + + + + + + netcoreapp3.1 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/EShopPaymentWeChatPayHttpApiModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/EShopPaymentWeChatPayHttpApiModule.cs new file mode 100644 index 00000000..8e72c682 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/EShopPaymentWeChatPayHttpApiModule.cs @@ -0,0 +1,33 @@ +using Localization.Resources.AbpUi; +using EasyAbp.EShop.Payment.WeChatPay.Localization; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Localization; +using Volo.Abp.Modularity; +using Microsoft.Extensions.DependencyInjection; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + [DependsOn( + typeof(EShopPaymentWeChatPayApplicationContractsModule), + typeof(AbpAspNetCoreMvcModule))] + public class EShopPaymentWeChatPayHttpApiModule : AbpModule + { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(EShopPaymentWeChatPayHttpApiModule).Assembly); + }); + } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.Resources + .Get() + .AddBaseTypes(typeof(AbpUiResource)); + }); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/EasyAbp.EShop.Payment.WeChatPay.HttpApi.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/EasyAbp.EShop.Payment.WeChatPay.HttpApi.csproj new file mode 100644 index 00000000..61414e5c --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/EasyAbp.EShop.Payment.WeChatPay.HttpApi.csproj @@ -0,0 +1,15 @@ + + + + + + netcoreapp3.1 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/WeChatPayController.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/WeChatPayController.cs new file mode 100644 index 00000000..33dd3397 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.HttpApi/WeChatPayController.cs @@ -0,0 +1,13 @@ +using EasyAbp.EShop.Payment.WeChatPay.Localization; +using Volo.Abp.AspNetCore.Mvc; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + public abstract class WeChatPayController : AbpController + { + protected WeChatPayController() + { + LocalizationResource = typeof(WeChatPayResource); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/EasyAbp.EShop.Payment.WeChatPay.MongoDB.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/EasyAbp.EShop.Payment.WeChatPay.MongoDB.csproj new file mode 100644 index 00000000..799cc572 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/EasyAbp.EShop.Payment.WeChatPay.MongoDB.csproj @@ -0,0 +1,15 @@ + + + + + + netcoreapp3.1 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/EShopPaymentWeChatPayMongoDbModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/EShopPaymentWeChatPayMongoDbModule.cs new file mode 100644 index 00000000..f54994d7 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/EShopPaymentWeChatPayMongoDbModule.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Modularity; +using Volo.Abp.MongoDB; + +namespace EasyAbp.EShop.Payment.WeChatPay.MongoDB +{ + [DependsOn( + typeof(EShopPaymentWeChatPayDomainModule), + typeof(AbpMongoDbModule) + )] + public class EShopPaymentWeChatPayMongoDbModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddMongoDbContext(options => + { + /* Add custom repositories here. Example: + * options.AddRepository(); + */ + }); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/IWeChatPayMongoDbContext.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/IWeChatPayMongoDbContext.cs new file mode 100644 index 00000000..440c139b --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/IWeChatPayMongoDbContext.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Data; +using Volo.Abp.MongoDB; + +namespace EasyAbp.EShop.Payment.WeChatPay.MongoDB +{ + [ConnectionStringName(WeChatPayDbProperties.ConnectionStringName)] + public interface IWeChatPayMongoDbContext : IAbpMongoDbContext + { + /* Define mongo collections here. Example: + * IMongoCollection Questions { get; } + */ + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoDbContext.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoDbContext.cs new file mode 100644 index 00000000..52bcdb4c --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoDbContext.cs @@ -0,0 +1,20 @@ +using Volo.Abp.Data; +using Volo.Abp.MongoDB; + +namespace EasyAbp.EShop.Payment.WeChatPay.MongoDB +{ + [ConnectionStringName(WeChatPayDbProperties.ConnectionStringName)] + public class WeChatPayMongoDbContext : AbpMongoDbContext, IWeChatPayMongoDbContext + { + /* Add mongo collections here. Example: + * public IMongoCollection Questions => Collection(); + */ + + protected override void CreateModel(IMongoModelBuilder modelBuilder) + { + base.CreateModel(modelBuilder); + + modelBuilder.ConfigureWeChatPay(); + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoDbContextExtensions.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoDbContextExtensions.cs new file mode 100644 index 00000000..1b491539 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoDbContextExtensions.cs @@ -0,0 +1,22 @@ +using System; +using Volo.Abp; +using Volo.Abp.MongoDB; + +namespace EasyAbp.EShop.Payment.WeChatPay.MongoDB +{ + public static class WeChatPayMongoDbContextExtensions + { + public static void ConfigureWeChatPay( + this IMongoModelBuilder builder, + Action optionsAction = null) + { + Check.NotNull(builder, nameof(builder)); + + var options = new WeChatPayMongoModelBuilderConfigurationOptions( + WeChatPayDbProperties.DbTablePrefix + ); + + optionsAction?.Invoke(options); + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoModelBuilderConfigurationOptions.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoModelBuilderConfigurationOptions.cs new file mode 100644 index 00000000..ba61c075 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.MongoDB/MongoDB/WeChatPayMongoModelBuilderConfigurationOptions.cs @@ -0,0 +1,14 @@ +using JetBrains.Annotations; +using Volo.Abp.MongoDB; + +namespace EasyAbp.EShop.Payment.WeChatPay.MongoDB +{ + public class WeChatPayMongoModelBuilderConfigurationOptions : AbpMongoModelBuilderConfigurationOptions + { + public WeChatPayMongoModelBuilderConfigurationOptions( + [NotNull] string collectionPrefix = "") + : base(collectionPrefix) + { + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/EShopPaymentWeChatPayWebModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/EShopPaymentWeChatPayWebModule.cs new file mode 100644 index 00000000..8520d868 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/EShopPaymentWeChatPayWebModule.cs @@ -0,0 +1,57 @@ +using Microsoft.AspNetCore.Mvc.RazorPages; +using Microsoft.Extensions.DependencyInjection; +using EasyAbp.EShop.Payment.WeChatPay.Localization; +using Volo.Abp.AspNetCore.Mvc.Localization; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; +using Volo.Abp.AutoMapper; +using Volo.Abp.Modularity; +using Volo.Abp.UI.Navigation; +using Volo.Abp.VirtualFileSystem; + +namespace EasyAbp.EShop.Payment.WeChatPay.Web +{ + [DependsOn( + typeof(EShopPaymentWeChatPayHttpApiModule), + typeof(AbpAspNetCoreMvcUiThemeSharedModule), + typeof(AbpAutoMapperModule) + )] + public class EShopPaymentWeChatPayWebModule : AbpModule + { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + context.Services.PreConfigure(options => + { + options.AddAssemblyResource(typeof(WeChatPayResource), typeof(EShopPaymentWeChatPayWebModule).Assembly); + }); + + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(EShopPaymentWeChatPayWebModule).Assembly); + }); + } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.MenuContributors.Add(new WeChatPayMenuContributor()); + }); + + Configure(options => + { + options.FileSets.AddEmbedded("EasyAbp.EShop.Payment.WeChatPay.Web"); + }); + + context.Services.AddAutoMapperObjectMapper(); + Configure(options => + { + options.AddMaps(validate: true); + }); + + Configure(options => + { + //Configure authorization. + }); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/EasyAbp.EShop.Payment.WeChatPay.Web.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/EasyAbp.EShop.Payment.WeChatPay.Web.csproj new file mode 100644 index 00000000..52213943 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/EasyAbp.EShop.Payment.WeChatPay.Web.csproj @@ -0,0 +1,42 @@ + + + + + + netcoreapp3.1 + $(AssetTargetFallback);portable-net45+win8+wp8+wpa81; + true + Library + EasyAbp.EShop.Payment.WeChatPay.Web + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/Index.cshtml b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/Index.cshtml new file mode 100644 index 00000000..f46eb253 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/Index.cshtml @@ -0,0 +1,7 @@ +@page +@inherits EasyAbp.EShop.Payment.WeChatPay.Web.Pages.WeChatPayPage +@model EasyAbp.EShop.Payment.WeChatPay.Web.Pages.WeChatPay.IndexModel +@{ +} +

WeChatPay

+

A sample page for the WeChatPay module.

\ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/Index.cshtml.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/Index.cshtml.cs new file mode 100644 index 00000000..4435fa2d --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/Index.cshtml.cs @@ -0,0 +1,9 @@ +namespace EasyAbp.EShop.Payment.WeChatPay.Web.Pages.WeChatPay +{ + public class IndexModel : WeChatPayPageModel + { + public void OnGet() + { + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/_ViewImports.cshtml b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/_ViewImports.cshtml new file mode 100644 index 00000000..c1da1f5f --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPay/_ViewImports.cshtml @@ -0,0 +1,4 @@ +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap +@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPayPage.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPayPage.cs new file mode 100644 index 00000000..82abf6b6 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPayPage.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Mvc.Localization; +using Microsoft.AspNetCore.Mvc.Razor.Internal; +using EasyAbp.EShop.Payment.WeChatPay.Localization; +using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; + +namespace EasyAbp.EShop.Payment.WeChatPay.Web.Pages +{ + /* Inherit your UI Pages from this class. To do that, add this line to your Pages (.cshtml files under the Page folder): + * @inherits EasyAbp.EShop.Payment.WeChatPay.Web.Pages.WeChatPayPage + */ + public abstract class WeChatPayPage : AbpPage + { + [RazorInject] + public IHtmlLocalizer L { get; set; } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPayPageModel.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPayPageModel.cs new file mode 100644 index 00000000..b8717e43 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Pages/WeChatPayPageModel.cs @@ -0,0 +1,16 @@ +using EasyAbp.EShop.Payment.WeChatPay.Localization; +using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; + +namespace EasyAbp.EShop.Payment.WeChatPay.Web.Pages +{ + /* Inherit your PageModel classes from this class. + */ + public abstract class WeChatPayPageModel : AbpPageModel + { + protected WeChatPayPageModel() + { + LocalizationResourceType = typeof(WeChatPayResource); + ObjectMapperContext = typeof(EShopPaymentWeChatPayWebModule); + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Properties/launchSettings.json b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Properties/launchSettings.json new file mode 100644 index 00000000..cf5f79f6 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:56993/", + "sslPort": 0 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "EasyAbp.EShop.Payment.WeChatPay.Web": { + "commandName": "Project", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + }, + "applicationUrl": "http://localhost:56994/" + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/WeChatPayMenuContributor.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/WeChatPayMenuContributor.cs new file mode 100644 index 00000000..e93e5be9 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/WeChatPayMenuContributor.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using Volo.Abp.UI.Navigation; + +namespace EasyAbp.EShop.Payment.WeChatPay.Web +{ + public class WeChatPayMenuContributor : IMenuContributor + { + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.Main) + { + await ConfigureMainMenu(context); + } + } + + private Task ConfigureMainMenu(MenuConfigurationContext context) + { + //Add main menu items. + + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/WeChatPayWebAutoMapperProfile.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/WeChatPayWebAutoMapperProfile.cs new file mode 100644 index 00000000..2c9cde03 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/src/EasyAbp.EShop.Payment.WeChatPay.Web/WeChatPayWebAutoMapperProfile.cs @@ -0,0 +1,14 @@ +using AutoMapper; + +namespace EasyAbp.EShop.Payment.WeChatPay.Web +{ + public class WeChatPayWebAutoMapperProfile : Profile + { + public WeChatPayWebAutoMapperProfile() + { + /* You can configure your AutoMapper mapping configuration here. + * Alternatively, you can split your mapping configurations + * into multiple profile classes for a better organization. */ + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/EShopPaymentWeChatPayApplicationTestModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/EShopPaymentWeChatPayApplicationTestModule.cs new file mode 100644 index 00000000..35bcdd94 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/EShopPaymentWeChatPayApplicationTestModule.cs @@ -0,0 +1,13 @@ +using Volo.Abp.Modularity; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + [DependsOn( + typeof(EShopPaymentWeChatPayApplicationModule), + typeof(EShopPaymentWeChatPayDomainTestModule) + )] + public class EShopPaymentWeChatPayApplicationTestModule : AbpModule + { + + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/EasyAbp.EShop.Payment.WeChatPay.Application.Tests.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/EasyAbp.EShop.Payment.WeChatPay.Application.Tests.csproj new file mode 100644 index 00000000..ee0b1e10 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/EasyAbp.EShop.Payment.WeChatPay.Application.Tests.csproj @@ -0,0 +1,16 @@ + + + + + + netcoreapp3.1 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/WeChatPayApplicationTestBase.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/WeChatPayApplicationTestBase.cs new file mode 100644 index 00000000..85e51a5e --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Application.Tests/WeChatPayApplicationTestBase.cs @@ -0,0 +1,10 @@ +namespace EasyAbp.EShop.Payment.WeChatPay +{ + /* Inherit from this class for your application layer tests. + * See SampleAppService_Tests for example. + */ + public abstract class WeChatPayApplicationTestBase : WeChatPayTestBase + { + + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/EShopPaymentWeChatPayDomainTestModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/EShopPaymentWeChatPayDomainTestModule.cs new file mode 100644 index 00000000..b425ecb8 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/EShopPaymentWeChatPayDomainTestModule.cs @@ -0,0 +1,17 @@ +using EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore; +using Volo.Abp.Modularity; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + /* Domain tests are configured to use the EF Core provider. + * You can switch to MongoDB, however your domain tests should be + * database independent anyway. + */ + [DependsOn( + typeof(EShopPaymentWeChatPayEntityFrameworkCoreTestModule) + )] + public class EShopPaymentWeChatPayDomainTestModule : AbpModule + { + + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests.csproj new file mode 100644 index 00000000..6c452e43 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests.csproj @@ -0,0 +1,15 @@ + + + + + + netcoreapp3.1 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/WeChatPayDomainTestBase.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/WeChatPayDomainTestBase.cs new file mode 100644 index 00000000..49530f56 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.Domain.Tests/WeChatPayDomainTestBase.cs @@ -0,0 +1,10 @@ +namespace EasyAbp.EShop.Payment.WeChatPay +{ + /* Inherit from this class for your domain layer tests. + * See SampleManager_Tests for example. + */ + public abstract class WeChatPayDomainTestBase : WeChatPayTestBase + { + + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests.csproj new file mode 100644 index 00000000..47951161 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests.csproj @@ -0,0 +1,19 @@ + + + + + + netcoreapp3.1 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopPaymentWeChatPayEntityFrameworkCoreTestModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopPaymentWeChatPayEntityFrameworkCoreTestModule.cs new file mode 100644 index 00000000..db862973 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopPaymentWeChatPayEntityFrameworkCoreTestModule.cs @@ -0,0 +1,41 @@ +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Modularity; + +namespace EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore +{ + [DependsOn( + typeof(EShopPaymentWeChatPayTestBaseModule), + typeof(EShopPaymentWeChatPayEntityFrameworkCoreModule) + )] + public class EShopPaymentWeChatPayEntityFrameworkCoreTestModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + var sqliteConnection = CreateDatabaseAndGetConnection(); + + Configure(options => + { + options.Configure(abpDbContextConfigurationContext => + { + abpDbContextConfigurationContext.DbContextOptions.UseSqlite(sqliteConnection); + }); + }); + } + + private static SqliteConnection CreateDatabaseAndGetConnection() + { + var connection = new SqliteConnection("Data Source=:memory:"); + connection.Open(); + + new WeChatPayDbContext( + new DbContextOptionsBuilder().UseSqlite(connection).Options + ).GetService().CreateTables(); + + return connection; + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EntityFrameworkCore/WeChatPayEntityFrameworkCoreTestBase.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EntityFrameworkCore/WeChatPayEntityFrameworkCoreTestBase.cs new file mode 100644 index 00000000..ba160eeb --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests/EntityFrameworkCore/WeChatPayEntityFrameworkCoreTestBase.cs @@ -0,0 +1,10 @@ +namespace EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore +{ + /* This class can be used as a base class for EF Core integration tests, + * while SampleRepository_Tests uses a different approach. + */ + public abstract class WeChatPayEntityFrameworkCoreTestBase : WeChatPayTestBase + { + + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs new file mode 100644 index 00000000..c9778b66 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs @@ -0,0 +1,146 @@ +using System; +using System.Net.Http; +using System.Threading.Tasks; +using IdentityModel.Client; +using Microsoft.Extensions.Configuration; +using Volo.Abp.DependencyInjection; +using Volo.Abp.IdentityModel; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + public class ClientDemoService : ITransientDependency + { + private readonly IIdentityModelAuthenticationService _authenticationService; + private readonly IConfiguration _configuration; + + public ClientDemoService( + IIdentityModelAuthenticationService authenticationService, + IConfiguration configuration) + { + _authenticationService = authenticationService; + _configuration = configuration; + } + + public async Task RunAsync() + { + await TestWithDynamicProxiesAsync(); + await TestWithHttpClientAndIdentityModelAuthenticationServiceAsync(); + await TestAllManuallyAsync(); + } + + /* Shows how to perform an HTTP request to the API using ABP's dynamic c# proxy + * feature. It is just simple as calling a local service method. + * Authorization and HTTP request details are handled by the ABP framework. + */ + private async Task TestWithDynamicProxiesAsync() + { + Console.WriteLine(); + Console.WriteLine($"***** {nameof(TestWithDynamicProxiesAsync)} *****"); + } + + /* Shows how to use HttpClient to perform a request to the HTTP API. + * It uses ABP's IIdentityModelAuthenticationService to simplify obtaining access tokens. + */ + private async Task TestWithHttpClientAndIdentityModelAuthenticationServiceAsync() + { + Console.WriteLine(); + Console.WriteLine($"***** {nameof(TestWithHttpClientAndIdentityModelAuthenticationServiceAsync)} *****"); + + //Get access token using ABP's IIdentityModelAuthenticationService + + var accessToken = await _authenticationService.GetAccessTokenAsync( + new IdentityClientConfiguration( + _configuration["IdentityClients:Default:Authority"], + _configuration["IdentityClients:Default:Scope"], + _configuration["IdentityClients:Default:ClientId"], + _configuration["IdentityClients:Default:ClientSecret"], + _configuration["IdentityClients:Default:GrantType"], + _configuration["IdentityClients:Default:UserName"], + _configuration["IdentityClients:Default:UserPassword"] + ) + ); + + //Perform the actual HTTP request + + using (var httpClient = new HttpClient()) + { + httpClient.SetBearerToken(accessToken); + + var url = _configuration["RemoteServices:WeChatPay:BaseUrl"] + + "api/WeChatPay/sample/authorized"; + + var responseMessage = await httpClient.GetAsync(url); + if (responseMessage.IsSuccessStatusCode) + { + var responseString = await responseMessage.Content.ReadAsStringAsync(); + Console.WriteLine("Result: " + responseString); + } + else + { + throw new Exception("Remote server returns error code: " + responseMessage.StatusCode); + } + } + } + + /* Shows how to use HttpClient to perform a request to the HTTP API. + * It obtains access token using IdentityServer's API. See its documentation: + * https://identityserver4.readthedocs.io/en/latest/quickstarts/2_resource_owner_passwords.html + */ + private async Task TestAllManuallyAsync() + { + Console.WriteLine(); + Console.WriteLine($"***** {nameof(TestAllManuallyAsync)} *****"); + + //Obtain access token from the IDS4 server + + // discover endpoints from metadata + var client = new HttpClient(); + var disco = await client.GetDiscoveryDocumentAsync(_configuration["IdentityClients:Default:Authority"]); + if (disco.IsError) + { + Console.WriteLine(disco.Error); + return; + } + + // request token + var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest + { + Address = disco.TokenEndpoint, + ClientId = _configuration["IdentityClients:Default:ClientId"], + ClientSecret = _configuration["IdentityClients:Default:ClientSecret"], + UserName = _configuration["IdentityClients:Default:UserName"], + Password = _configuration["IdentityClients:Default:UserPassword"], + Scope = _configuration["IdentityClients:Default:Scope"] + }); + + if (tokenResponse.IsError) + { + Console.WriteLine(tokenResponse.Error); + return; + } + + Console.WriteLine(tokenResponse.Json); + + //Perform the actual HTTP request + + using (var httpClient = new HttpClient()) + { + httpClient.SetBearerToken(tokenResponse.AccessToken); + + var url = _configuration["RemoteServices:WeChatPay:BaseUrl"] + + "api/WeChatPay/sample/authorized"; + + var responseMessage = await httpClient.GetAsync(url); + if (responseMessage.IsSuccessStatusCode) + { + var responseString = await responseMessage.Content.ReadAsStringAsync(); + Console.WriteLine("Result: " + responseString); + } + else + { + throw new Exception("Remote server returns error code: " + responseMessage.StatusCode); + } + } + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs new file mode 100644 index 00000000..42ac926b --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.Hosting; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; + +namespace EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp +{ + public class ConsoleTestAppHostedService : IHostedService + { + public async Task StartAsync(CancellationToken cancellationToken) + { + using (var application = AbpApplicationFactory.Create()) + { + application.Initialize(); + + var demo = application.ServiceProvider.GetRequiredService(); + await demo.RunAsync(); + + application.Shutdown(); + } + } + + public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/EShopPaymentWeChatPayConsoleApiClientModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/EShopPaymentWeChatPayConsoleApiClientModule.cs new file mode 100644 index 00000000..d12509b0 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/EShopPaymentWeChatPayConsoleApiClientModule.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Http.Client.IdentityModel; +using Volo.Abp.Modularity; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + [DependsOn( + typeof(EShopPaymentWeChatPayHttpApiClientModule), + typeof(AbpHttpClientIdentityModelModule) + )] + public class EShopPaymentWeChatPayConsoleApiClientModule : AbpModule + { + + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp.csproj new file mode 100644 index 00000000..7731725c --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp.csproj @@ -0,0 +1,26 @@ + + + + Exe + netcoreapp3.1 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + + + + PreserveNewest + Always + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/Program.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/Program.cs new file mode 100644 index 00000000..5c7c94b2 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/Program.cs @@ -0,0 +1,21 @@ +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; + +namespace EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp +{ + class Program + { + static async Task Main(string[] args) + { + await CreateHostBuilder(args).RunConsoleAsync(); + } + + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureServices((hostContext, services) => + { + services.AddHostedService(); + }); + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/appsettings.json b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/appsettings.json new file mode 100644 index 00000000..088131bb --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp/appsettings.json @@ -0,0 +1,21 @@ +{ + "RemoteServices": { + "Default": { + "BaseUrl": "https://localhost:44343/" + }, + "WeChatPay": { + "BaseUrl": "https://localhost:44399/" + } + }, + "IdentityClients": { + "Default": { + "GrantType": "password", + "ClientId": "WeChatPay_ConsoleTestApp", + "ClientSecret": "1q2w3e*", + "UserName": "admin", + "UserPassword": "1q2w3E*", + "Authority": "https://localhost:44343/", + "Scope": "WeChatPay" + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests.csproj new file mode 100644 index 00000000..51c06698 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests.csproj @@ -0,0 +1,17 @@ + + + + + + netcoreapp3.1 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/MongoDB/EShopPaymentWeChatPayMongoDbTestModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/MongoDB/EShopPaymentWeChatPayMongoDbTestModule.cs new file mode 100644 index 00000000..275f44af --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/MongoDB/EShopPaymentWeChatPayMongoDbTestModule.cs @@ -0,0 +1,29 @@ +using System; +using Mongo2Go; +using Volo.Abp; +using Volo.Abp.Data; +using Volo.Abp.Modularity; + +namespace EasyAbp.EShop.Payment.WeChatPay.MongoDB +{ + [DependsOn( + typeof(EShopPaymentWeChatPayTestBaseModule), + typeof(EShopPaymentWeChatPayMongoDbModule) + )] + public class EShopPaymentWeChatPayMongoDbTestModule : AbpModule + { + private static readonly MongoDbRunner MongoDbRunner = MongoDbRunner.Start(); + + public override void ConfigureServices(ServiceConfigurationContext context) + { + var connectionString = MongoDbRunner.ConnectionString.EnsureEndsWith('/') + + "Db_" + + Guid.NewGuid().ToString("N"); + + Configure(options => + { + options.ConnectionStrings.Default = connectionString; + }); + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/MongoDB/WeChatPayMongoDbTestBase.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/MongoDB/WeChatPayMongoDbTestBase.cs new file mode 100644 index 00000000..3f957dcb --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests/MongoDB/WeChatPayMongoDbTestBase.cs @@ -0,0 +1,10 @@ +namespace EasyAbp.EShop.Payment.WeChatPay.MongoDB +{ + /* This class can be used as a base class for MongoDB integration tests, + * while SampleRepository_Tests uses a different approach. + */ + public abstract class WeChatPayMongoDbTestBase : WeChatPayTestBase + { + + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/EShopPaymentWeChatPayTestBaseModule.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/EShopPaymentWeChatPayTestBaseModule.cs new file mode 100644 index 00000000..728b71ab --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/EShopPaymentWeChatPayTestBaseModule.cs @@ -0,0 +1,42 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.Authorization; +using Volo.Abp.Autofac; +using Volo.Abp.Data; +using Volo.Abp.Modularity; +using Volo.Abp.Threading; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + [DependsOn( + typeof(AbpAutofacModule), + typeof(AbpTestBaseModule), + typeof(AbpAuthorizationModule), + typeof(EShopPaymentWeChatPayDomainModule) + )] + public class EShopPaymentWeChatPayTestBaseModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAlwaysAllowAuthorization(); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + SeedTestData(context); + } + + private static void SeedTestData(ApplicationInitializationContext context) + { + AsyncHelper.RunSync(async () => + { + using (var scope = context.ServiceProvider.CreateScope()) + { + await scope.ServiceProvider + .GetRequiredService() + .SeedAsync(); + } + }); + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/EasyAbp.EShop.Payment.WeChatPay.TestBase.csproj b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/EasyAbp.EShop.Payment.WeChatPay.TestBase.csproj new file mode 100644 index 00000000..ebc1d925 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/EasyAbp.EShop.Payment.WeChatPay.TestBase.csproj @@ -0,0 +1,23 @@ + + + + + + netcoreapp3.1 + EasyAbp.EShop.Payment.WeChatPay + + + + + + + + + + + + + + + + diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/Security/FakeCurrentPrincipalAccessor.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/Security/FakeCurrentPrincipalAccessor.cs new file mode 100644 index 00000000..b4eea536 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/Security/FakeCurrentPrincipalAccessor.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using System.Security.Claims; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Security.Claims; + +namespace EasyAbp.EShop.Payment.WeChatPay.Security +{ + [Dependency(ReplaceServices = true)] + public class FakeCurrentPrincipalAccessor : ICurrentPrincipalAccessor, ISingletonDependency + { + public ClaimsPrincipal Principal => GetPrincipal(); + private ClaimsPrincipal _principal; + + private ClaimsPrincipal GetPrincipal() + { + if (_principal == null) + { + lock (this) + { + if (_principal == null) + { + _principal = new ClaimsPrincipal( + new ClaimsIdentity( + new List + { + new Claim(AbpClaimTypes.UserId,"2e701e62-0953-4dd3-910b-dc6cc93ccb0d"), + new Claim(AbpClaimTypes.UserName,"admin"), + new Claim(AbpClaimTypes.Email,"admin@abp.io") + } + ) + ); + } + } + } + + return _principal; + } + } +} diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/WeChatPayDataSeedContributor.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/WeChatPayDataSeedContributor.cs new file mode 100644 index 00000000..1f511d1d --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/WeChatPayDataSeedContributor.cs @@ -0,0 +1,27 @@ +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + public class WeChatPayDataSeedContributor : IDataSeedContributor, ITransientDependency + { + private readonly IGuidGenerator _guidGenerator; + + public WeChatPayDataSeedContributor( + IGuidGenerator guidGenerator) + { + _guidGenerator = guidGenerator; + } + + public Task SeedAsync(DataSeedContext context) + { + /* Instead of returning the Task.CompletedTask, you can insert your test data + * at this point! + */ + + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/WeChatPayTestBase.cs b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/WeChatPayTestBase.cs new file mode 100644 index 00000000..abc3d1c0 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment.WeChatPay/test/EasyAbp.EShop.Payment.WeChatPay.TestBase/WeChatPayTestBase.cs @@ -0,0 +1,60 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp; +using Volo.Abp.Modularity; +using Volo.Abp.Uow; +using Volo.Abp.Testing; + +namespace EasyAbp.EShop.Payment.WeChatPay +{ + /* All test classes are derived from this class, directly or indirectly. */ + public abstract class WeChatPayTestBase : AbpIntegratedTest + where TStartupModule : IAbpModule + { + protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options) + { + options.UseAutofac(); + } + + protected virtual Task WithUnitOfWorkAsync(Func func) + { + return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); + } + + protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func action) + { + using (var scope = ServiceProvider.CreateScope()) + { + var uowManager = scope.ServiceProvider.GetRequiredService(); + + using (var uow = uowManager.Begin(options)) + { + await action(); + + await uow.CompleteAsync(); + } + } + } + + protected virtual Task WithUnitOfWorkAsync(Func> func) + { + return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func); + } + + protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func> func) + { + using (var scope = ServiceProvider.CreateScope()) + { + var uowManager = scope.ServiceProvider.GetRequiredService(); + + using (var uow = uowManager.Begin(options)) + { + var result = await func(); + await uow.CompleteAsync(); + return result; + } + } + } + } +} diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/EasyAbp.EShop.Payment.Abstractions.csproj b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/EasyAbp.EShop.Payment.Abstractions.csproj new file mode 100644 index 00000000..adfc58a8 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/EasyAbp.EShop.Payment.Abstractions.csproj @@ -0,0 +1,10 @@ + + + + + + netstandard2.0 + + + + diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/EasyAbp/EShop/Payment/IPaymentServiceProvider.cs b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/EasyAbp/EShop/Payment/IPaymentServiceProvider.cs new file mode 100644 index 00000000..a1818d59 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/EasyAbp/EShop/Payment/IPaymentServiceProvider.cs @@ -0,0 +1,7 @@ +namespace EasyAbp.EShop.Payment +{ + public interface IPaymentServiceProvider + { + + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/FodyWeavers.xml b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/FodyWeavers.xml new file mode 100644 index 00000000..be0de3a9 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/FodyWeavers.xsd b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/FodyWeavers.xsd new file mode 100644 index 00000000..3f3946e2 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Abstractions/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/EShopPaymentDomainModule.cs b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/EShopPaymentDomainModule.cs index f1daed8f..594bf1b3 100644 --- a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/EShopPaymentDomainModule.cs +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/EShopPaymentDomainModule.cs @@ -1,9 +1,11 @@ -using Volo.Abp.Modularity; +using EasyAbp.EShop.Stores; +using Volo.Abp.Modularity; namespace EasyAbp.EShop.Payment { [DependsOn( - typeof(EShopPaymentDomainSharedModule) + typeof(EShopPaymentDomainSharedModule), + typeof(EShopStoresDomainSharedModule) )] public class EShopPaymentDomainModule : AbpModule { diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/EasyAbp.EShop.Payment.Domain.csproj b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/EasyAbp.EShop.Payment.Domain.csproj index 11ad6191..4fb634a1 100644 --- a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/EasyAbp.EShop.Payment.Domain.csproj +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/EasyAbp.EShop.Payment.Domain.csproj @@ -9,6 +9,8 @@ + + diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/FreePaymentServiceProvider.cs b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/FreePaymentServiceProvider.cs new file mode 100644 index 00000000..c80fd4f5 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/FreePaymentServiceProvider.cs @@ -0,0 +1,7 @@ +namespace EasyAbp.EShop.Payment +{ + public class FreePaymentServiceProvider : IPaymentServiceProvider + { + + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/PaymentRecordOrders/PaymentRecordOrder.cs b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/PaymentRecordOrders/PaymentRecordOrder.cs new file mode 100644 index 00000000..b582556a --- /dev/null +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/PaymentRecordOrders/PaymentRecordOrder.cs @@ -0,0 +1,24 @@ +using System; +using EasyAbp.EShop.Stores.Stores; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace EasyAbp.EShop.Payment.PaymentRecordOrders +{ + public class PaymentRecordOrder : FullAuditedEntity, IMultiTenant, IMultiStore + { + public virtual Guid? TenantId { get; protected set; } + + public virtual Guid? StoreId { get; protected set; } + + public virtual Guid OrderId { get; protected set; } + + public virtual decimal OriginalPaymentAmount { get; protected set; } + + public virtual decimal PaymentDiscount { get; protected set; } + + public virtual decimal ActualPaymentAmount { get; protected set; } + + public virtual decimal RefundAmount { get; protected set; } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/PaymentRecords/PaymentRecord.cs b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/PaymentRecords/PaymentRecord.cs new file mode 100644 index 00000000..404d00b9 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/PaymentRecords/PaymentRecord.cs @@ -0,0 +1,27 @@ +using System; +using EasyAbp.EShop.Stores.Stores; +using JetBrains.Annotations; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace EasyAbp.EShop.Payment.PaymentRecords +{ + public class PaymentRecord : FullAuditedAggregateRoot, IMultiTenant + { + public virtual Guid? TenantId { get; protected set; } + + [NotNull] + public virtual string PaymentMethod { get; protected set; } + + [NotNull] + public virtual string ExternalTradingCode { get; protected set; } + + public virtual decimal OriginalPaymentAmount { get; protected set; } + + public virtual decimal PaymentDiscount { get; protected set; } + + public virtual decimal ActualPaymentAmount { get; protected set; } + + public virtual decimal RefundAmount { get; protected set; } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/RefundRecords/RefundRecord.cs b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/RefundRecords/RefundRecord.cs new file mode 100644 index 00000000..3df79a56 --- /dev/null +++ b/modules/EasyAbp.EShop.Payment/src/EasyAbp.EShop.Payment.Domain/RefundRecords/RefundRecord.cs @@ -0,0 +1,31 @@ +using System; +using EasyAbp.EShop.Stores.Stores; +using JetBrains.Annotations; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace EasyAbp.EShop.Payment.RefundRecords +{ + public class RefundRecord : FullAuditedAggregateRoot, IMultiTenant, IMultiStore + { + public virtual Guid? TenantId { get; protected set; } + + public virtual Guid? StoreId { get; protected set; } + + public virtual Guid OrderId { get; protected set; } + + [NotNull] + public virtual string RefundMethod { get; protected set; } + + [NotNull] + public virtual string ExternalTradingCode { get; protected set; } + + public virtual decimal RefundAmount { get; protected set; } + + [CanBeNull] + public virtual string CustomerRemark { get; protected set; } + + [CanBeNull] + public virtual string StaffRemark { get; protected set; } + } +} \ No newline at end of file diff --git a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/Products/InventoryStrategy.cs b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/Products/InventoryStrategy.cs index 950e8eac..301d6684 100644 --- a/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/Products/InventoryStrategy.cs +++ b/modules/EasyAbp.EShop.Products/src/EasyAbp.EShop.Products.Domain.Shared/Products/InventoryStrategy.cs @@ -1,5 +1,8 @@ -namespace EasyAbp.EShop.Products.Products +using System; + +namespace EasyAbp.EShop.Products.Products { + [Flags] public enum InventoryStrategy { NoNeed = 1, diff --git a/samples/EasyMall/aspnet-core/EasyMall.sln b/samples/EasyMall/aspnet-core/EasyMall.sln index a42d5f2c..ad24e329 100644 --- a/samples/EasyMall/aspnet-core/EasyMall.sln +++ b/samples/EasyMall/aspnet-core/EasyMall.sln @@ -221,6 +221,46 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Stores.MongoD EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Stores.TestBase", "..\..\..\modules\EasyAbp.EShop.Stores\test\EasyAbp.EShop.Stores.TestBase\EasyAbp.EShop.Stores.TestBase.csproj", "{F2A770E7-17A5-4009-9DE2-703940F34A3D}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.Abstractions", "..\..\..\modules\EasyAbp.EShop.Payment\src\EasyAbp.EShop.Payment.Abstractions\EasyAbp.EShop.Payment.Abstractions.csproj", "{4813F498-8331-4C1D-9E6F-47E9CFB803C1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "provider", "provider", "{7D80E979-D0C3-4D6A-8FF0-22733CAA37A3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WeChatPay", "WeChatPay", "{4FF7000A-2CD2-40B9-B2B0-A1EFD501A5B1}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{60986AC6-FDD9-4B57-942D-A006A83315CF}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{B14DE465-81BA-4242-AD2E-8BEE1F0F0D22}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.Application", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\src\EasyAbp.EShop.Payment.WeChatPay.Application\EasyAbp.EShop.Payment.WeChatPay.Application.csproj", "{B2C56EF7-AB4A-454B-BC77-0F2178BBD09F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.Application.Contracts", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\src\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts.csproj", "{4F07C29E-1CAF-42A6-BC8D-E6F7575D844B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.Domain", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\src\EasyAbp.EShop.Payment.WeChatPay.Domain\EasyAbp.EShop.Payment.WeChatPay.Domain.csproj", "{5193B2DC-6AE2-4279-8DC5-36B68BC89915}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.Domain.Shared", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\src\EasyAbp.EShop.Payment.WeChatPay.Domain.Shared\EasyAbp.EShop.Payment.WeChatPay.Domain.Shared.csproj", "{A44E43C4-2C52-4D76-BB77-A7080CBAC084}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\src\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.csproj", "{4659A828-333C-421E-B735-10D83CA2FD9F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.HttpApi", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\src\EasyAbp.EShop.Payment.WeChatPay.HttpApi\EasyAbp.EShop.Payment.WeChatPay.HttpApi.csproj", "{59151C03-351A-4D36-9F6B-F1733F64D83E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\src\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.csproj", "{09FDBA1B-06C4-4F34-9153-9E841305CA07}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.MongoDB", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\src\EasyAbp.EShop.Payment.WeChatPay.MongoDB\EasyAbp.EShop.Payment.WeChatPay.MongoDB.csproj", "{5BFF62AB-2FCB-4426-9A3A-0A3DA94684BC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.Web", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\src\EasyAbp.EShop.Payment.WeChatPay.Web\EasyAbp.EShop.Payment.WeChatPay.Web.csproj", "{D9EDC5D3-BEAC-4CE2-9216-A8EC056AE6F9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.Application.Tests", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\test\EasyAbp.EShop.Payment.WeChatPay.Application.Tests\EasyAbp.EShop.Payment.WeChatPay.Application.Tests.csproj", "{F138E2B8-6585-4C1C-BCD9-1CF99A2131DE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.Domain.Tests", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\test\EasyAbp.EShop.Payment.WeChatPay.Domain.Tests\EasyAbp.EShop.Payment.WeChatPay.Domain.Tests.csproj", "{D19CD3F2-DABE-4F6D-9F24-AB3316528E0D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\test\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests.csproj", "{F28236AB-9989-4F1D-BE8A-9E25BE5D168B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\test\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.ConsoleTestApp.csproj", "{83FE9011-B587-4015-93D6-68BEC8E243B2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\test\EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests\EasyAbp.EShop.Payment.WeChatPay.MongoDB.Tests.csproj", "{865EA40F-F627-412A-82B1-107034E3E94C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Payment.WeChatPay.TestBase", "..\..\..\modules\EasyAbp.EShop.Payment.WeChatPay\test\EasyAbp.EShop.Payment.WeChatPay.TestBase\EasyAbp.EShop.Payment.WeChatPay.TestBase.csproj", "{E1C36040-87FB-4250-BF0E-6A8E270825A9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -591,6 +631,70 @@ Global {F2A770E7-17A5-4009-9DE2-703940F34A3D}.Debug|Any CPU.Build.0 = Debug|Any CPU {F2A770E7-17A5-4009-9DE2-703940F34A3D}.Release|Any CPU.ActiveCfg = Release|Any CPU {F2A770E7-17A5-4009-9DE2-703940F34A3D}.Release|Any CPU.Build.0 = Release|Any CPU + {4813F498-8331-4C1D-9E6F-47E9CFB803C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4813F498-8331-4C1D-9E6F-47E9CFB803C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4813F498-8331-4C1D-9E6F-47E9CFB803C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4813F498-8331-4C1D-9E6F-47E9CFB803C1}.Release|Any CPU.Build.0 = Release|Any CPU + {B2C56EF7-AB4A-454B-BC77-0F2178BBD09F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2C56EF7-AB4A-454B-BC77-0F2178BBD09F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2C56EF7-AB4A-454B-BC77-0F2178BBD09F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2C56EF7-AB4A-454B-BC77-0F2178BBD09F}.Release|Any CPU.Build.0 = Release|Any CPU + {4F07C29E-1CAF-42A6-BC8D-E6F7575D844B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F07C29E-1CAF-42A6-BC8D-E6F7575D844B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F07C29E-1CAF-42A6-BC8D-E6F7575D844B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F07C29E-1CAF-42A6-BC8D-E6F7575D844B}.Release|Any CPU.Build.0 = Release|Any CPU + {5193B2DC-6AE2-4279-8DC5-36B68BC89915}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5193B2DC-6AE2-4279-8DC5-36B68BC89915}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5193B2DC-6AE2-4279-8DC5-36B68BC89915}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5193B2DC-6AE2-4279-8DC5-36B68BC89915}.Release|Any CPU.Build.0 = Release|Any CPU + {A44E43C4-2C52-4D76-BB77-A7080CBAC084}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A44E43C4-2C52-4D76-BB77-A7080CBAC084}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A44E43C4-2C52-4D76-BB77-A7080CBAC084}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A44E43C4-2C52-4D76-BB77-A7080CBAC084}.Release|Any CPU.Build.0 = Release|Any CPU + {4659A828-333C-421E-B735-10D83CA2FD9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4659A828-333C-421E-B735-10D83CA2FD9F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4659A828-333C-421E-B735-10D83CA2FD9F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4659A828-333C-421E-B735-10D83CA2FD9F}.Release|Any CPU.Build.0 = Release|Any CPU + {59151C03-351A-4D36-9F6B-F1733F64D83E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59151C03-351A-4D36-9F6B-F1733F64D83E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59151C03-351A-4D36-9F6B-F1733F64D83E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59151C03-351A-4D36-9F6B-F1733F64D83E}.Release|Any CPU.Build.0 = Release|Any CPU + {09FDBA1B-06C4-4F34-9153-9E841305CA07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09FDBA1B-06C4-4F34-9153-9E841305CA07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09FDBA1B-06C4-4F34-9153-9E841305CA07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09FDBA1B-06C4-4F34-9153-9E841305CA07}.Release|Any CPU.Build.0 = Release|Any CPU + {5BFF62AB-2FCB-4426-9A3A-0A3DA94684BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5BFF62AB-2FCB-4426-9A3A-0A3DA94684BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5BFF62AB-2FCB-4426-9A3A-0A3DA94684BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5BFF62AB-2FCB-4426-9A3A-0A3DA94684BC}.Release|Any CPU.Build.0 = Release|Any CPU + {D9EDC5D3-BEAC-4CE2-9216-A8EC056AE6F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9EDC5D3-BEAC-4CE2-9216-A8EC056AE6F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9EDC5D3-BEAC-4CE2-9216-A8EC056AE6F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9EDC5D3-BEAC-4CE2-9216-A8EC056AE6F9}.Release|Any CPU.Build.0 = Release|Any CPU + {F138E2B8-6585-4C1C-BCD9-1CF99A2131DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F138E2B8-6585-4C1C-BCD9-1CF99A2131DE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F138E2B8-6585-4C1C-BCD9-1CF99A2131DE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F138E2B8-6585-4C1C-BCD9-1CF99A2131DE}.Release|Any CPU.Build.0 = Release|Any CPU + {D19CD3F2-DABE-4F6D-9F24-AB3316528E0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D19CD3F2-DABE-4F6D-9F24-AB3316528E0D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D19CD3F2-DABE-4F6D-9F24-AB3316528E0D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D19CD3F2-DABE-4F6D-9F24-AB3316528E0D}.Release|Any CPU.Build.0 = Release|Any CPU + {F28236AB-9989-4F1D-BE8A-9E25BE5D168B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F28236AB-9989-4F1D-BE8A-9E25BE5D168B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F28236AB-9989-4F1D-BE8A-9E25BE5D168B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F28236AB-9989-4F1D-BE8A-9E25BE5D168B}.Release|Any CPU.Build.0 = Release|Any CPU + {83FE9011-B587-4015-93D6-68BEC8E243B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {83FE9011-B587-4015-93D6-68BEC8E243B2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {83FE9011-B587-4015-93D6-68BEC8E243B2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {83FE9011-B587-4015-93D6-68BEC8E243B2}.Release|Any CPU.Build.0 = Release|Any CPU + {865EA40F-F627-412A-82B1-107034E3E94C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {865EA40F-F627-412A-82B1-107034E3E94C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {865EA40F-F627-412A-82B1-107034E3E94C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {865EA40F-F627-412A-82B1-107034E3E94C}.Release|Any CPU.Build.0 = Release|Any CPU + {E1C36040-87FB-4250-BF0E-6A8E270825A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E1C36040-87FB-4250-BF0E-6A8E270825A9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E1C36040-87FB-4250-BF0E-6A8E270825A9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E1C36040-87FB-4250-BF0E-6A8E270825A9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -702,6 +806,26 @@ Global {F9F30B96-B456-452A-843F-904E89BB1B58} = {AD00688C-1F70-4439-BCF5-8931989359E0} {B64703AF-1554-4087-A638-E295444F2F86} = {AD00688C-1F70-4439-BCF5-8931989359E0} {F2A770E7-17A5-4009-9DE2-703940F34A3D} = {AD00688C-1F70-4439-BCF5-8931989359E0} + {4813F498-8331-4C1D-9E6F-47E9CFB803C1} = {3D87E511-7315-4D3B-B994-A8CEDAF47CBF} + {7D80E979-D0C3-4D6A-8FF0-22733CAA37A3} = {CB8F4FFA-815A-426A-ADCD-C78FB35CBDA7} + {4FF7000A-2CD2-40B9-B2B0-A1EFD501A5B1} = {7D80E979-D0C3-4D6A-8FF0-22733CAA37A3} + {60986AC6-FDD9-4B57-942D-A006A83315CF} = {4FF7000A-2CD2-40B9-B2B0-A1EFD501A5B1} + {B14DE465-81BA-4242-AD2E-8BEE1F0F0D22} = {4FF7000A-2CD2-40B9-B2B0-A1EFD501A5B1} + {B2C56EF7-AB4A-454B-BC77-0F2178BBD09F} = {60986AC6-FDD9-4B57-942D-A006A83315CF} + {4F07C29E-1CAF-42A6-BC8D-E6F7575D844B} = {60986AC6-FDD9-4B57-942D-A006A83315CF} + {5193B2DC-6AE2-4279-8DC5-36B68BC89915} = {60986AC6-FDD9-4B57-942D-A006A83315CF} + {A44E43C4-2C52-4D76-BB77-A7080CBAC084} = {60986AC6-FDD9-4B57-942D-A006A83315CF} + {4659A828-333C-421E-B735-10D83CA2FD9F} = {60986AC6-FDD9-4B57-942D-A006A83315CF} + {59151C03-351A-4D36-9F6B-F1733F64D83E} = {60986AC6-FDD9-4B57-942D-A006A83315CF} + {09FDBA1B-06C4-4F34-9153-9E841305CA07} = {60986AC6-FDD9-4B57-942D-A006A83315CF} + {5BFF62AB-2FCB-4426-9A3A-0A3DA94684BC} = {60986AC6-FDD9-4B57-942D-A006A83315CF} + {D9EDC5D3-BEAC-4CE2-9216-A8EC056AE6F9} = {60986AC6-FDD9-4B57-942D-A006A83315CF} + {F138E2B8-6585-4C1C-BCD9-1CF99A2131DE} = {B14DE465-81BA-4242-AD2E-8BEE1F0F0D22} + {D19CD3F2-DABE-4F6D-9F24-AB3316528E0D} = {B14DE465-81BA-4242-AD2E-8BEE1F0F0D22} + {F28236AB-9989-4F1D-BE8A-9E25BE5D168B} = {B14DE465-81BA-4242-AD2E-8BEE1F0F0D22} + {83FE9011-B587-4015-93D6-68BEC8E243B2} = {B14DE465-81BA-4242-AD2E-8BEE1F0F0D22} + {865EA40F-F627-412A-82B1-107034E3E94C} = {B14DE465-81BA-4242-AD2E-8BEE1F0F0D22} + {E1C36040-87FB-4250-BF0E-6A8E270825A9} = {B14DE465-81BA-4242-AD2E-8BEE1F0F0D22} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}