Commit 3a2b53c3 authored by gdlcf88's avatar gdlcf88

Completed entities design

parent bf640e6b
using System;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
namespace EasyAbp.EShop.Baskets.BasketItems
{
public class BasketItem : CreationAuditedAggregateRoot<Guid>, 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
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
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
{
......
......@@ -9,6 +9,7 @@
<ItemGroup>
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="2.5.0" />
<ProjectReference Include="..\..\..\EasyAbp.EShop.Stores\src\EasyAbp.EShop.Stores.Domain.Shared\EasyAbp.EShop.Stores.Domain.Shared.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Orders.Domain.Shared\EasyAbp.EShop.Orders.Domain.Shared.csproj" />
</ItemGroup>
......
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<Guid>, 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
using System;
using JetBrains.Annotations;
using Volo.Abp.Domain.Entities.Auditing;
namespace EasyAbp.EShop.Orders.Orders
{
public class OrderLine : FullAuditedEntity<Guid>
{
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
## 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

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
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:Boolean x:Key="/Default/CodeEditing/Intellisense/CodeCompletion/IntelliSenseCompletingCharacters/CSharpCompletingCharacters/UpgradedFromVSSettings/@EntryValue">True</s:Boolean>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceDoWhileStatementBraces/@EntryIndexedValue">WARNING</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceFixedStatementBraces/@EntryIndexedValue">WARNING</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceForeachStatementBraces/@EntryIndexedValue">WARNING</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceForStatementBraces/@EntryIndexedValue">WARNING</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceIfStatementBraces/@EntryIndexedValue">WARNING</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceLockStatementBraces/@EntryIndexedValue">WARNING</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceUsingStatementBraces/@EntryIndexedValue">WARNING</s:String>
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=EnforceWhileStatementBraces/@EntryIndexedValue">WARNING</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_FOR/@EntryValue">Required</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_FOREACH/@EntryValue">Required</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_IFELSE/@EntryValue">Required</s:String>
<s:String x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_FOR_WHILE/@EntryValue">Required</s:String>
<s:Boolean x:Key="/Default/CodeStyle/CodeFormatting/CSharpCodeStyle/BRACES_REDUNDANT/@EntryValue">False</s:Boolean>
<s:Boolean x:Key="/Default/CodeStyle/Generate/=Implementations/@KeyIndexDefined">True</s:Boolean>
<s:String x:Key="/Default/CodeStyle/Generate/=Implementations/Options/=Async/@EntryIndexedValue">False</s:String>
<s:String x:Key="/Default/CodeStyle/Generate/=Implementations/Options/=Mutable/@EntryIndexedValue">False</s:String>
<s:Boolean x:Key="/Default/CodeStyle/Generate/=Overrides/@KeyIndexDefined">True</s:Boolean>
<s:String x:Key="/Default/CodeStyle/Generate/=Overrides/Options/=Async/@EntryIndexedValue">False</s:String>
<s:String x:Key="/Default/CodeStyle/Generate/=Overrides/Options/=Mutable/@EntryIndexedValue">False</s:String>
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=SQL/@EntryIndexedValue">SQL</s:String>
</wpf:ResourceDictionary>
\ No newline at end of file
<Project>
<PropertyGroup>
<LangVersion>latest</LangVersion>
<Version>0.1.0</Version>
<NoWarn>$(NoWarn);CS1591</NoWarn>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="SourceLink.Create.CommandLine" Version="2.8.3" PrivateAssets="All" />
</ItemGroup>
</Project>
\ No newline at end of file
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
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
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
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<WeChatPayResource>(name);
}
}
}
\ No newline at end of file
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
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<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<EShopPaymentWeChatPayApplicationContractsModule>("EasyAbp.EShop.Payment.WeChatPay");
});
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Ddd.Application.Contracts" Version="2.5.0" />
<PackageReference Include="Volo.Abp.Authorization" Version="2.5.0" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.Domain.Shared\EasyAbp.EShop.Payment.WeChatPay.Domain.Shared.csproj" />
</ItemGroup>
</Project>
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<EShopPaymentWeChatPayApplicationModule>();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<EShopPaymentWeChatPayApplicationModule>(validate: true);
});
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AutoMapper" Version="2.5.0" />
<PackageReference Include="Volo.Abp.Ddd.Application" Version="2.5.0" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.Domain\EasyAbp.EShop.Payment.WeChatPay.Domain.csproj" />
</ItemGroup>
</Project>
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);
}
}
}
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
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<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<EShopPaymentWeChatPayDomainSharedModule>("EasyAbp.EShop.Payment.WeChatPay");
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<WeChatPayResource>("en")
.AddBaseTypes(typeof(AbpValidationResource))
.AddVirtualJson("/Localization/WeChatPay");
});
Configure<AbpExceptionLocalizationOptions>(options =>
{
options.MapCodeNamespace("WeChatPay", typeof(WeChatPayResource));
});
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Validation" Version="2.5.0" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Localization\WeChatPay\*.json" />
<Content Remove="Localization\WeChatPay\*.json" />
</ItemGroup>
</Project>
{
"culture": "en",
"texts": {
"ManageYourProfile": "Manage your profile"
}
}
\ No newline at end of file
{
"culture": "sl",
"texts": {
"ManageYourProfile": "Upravljajte svojim profilom"
}
}
\ No newline at end of file
{
"culture": "tr",
"texts": {
"ManageYourProfile": "Profil ynetimi"
}
}
\ No newline at end of file
{
"culture": "zh-Hans",
"texts": {
"ManageYourProfile": "管理个人资料"
}
}
\ No newline at end of file
{
"culture": "zh-Hant",
"texts": {
"ManageYourProfile": "管理個人資料"
}
}
\ No newline at end of file
using Volo.Abp.Localization;
namespace EasyAbp.EShop.Payment.WeChatPay.Localization
{
[LocalizationResourceName("WeChatPay")]
public class WeChatPayResource
{
}
}
namespace EasyAbp.EShop.Payment.WeChatPay
{
public static class WeChatPayErrorCodes
{
//Add your business exception error codes here...
}
}
using Volo.Abp.Modularity;
namespace EasyAbp.EShop.Payment.WeChatPay
{
[DependsOn(
typeof(EShopPaymentWeChatPayDomainSharedModule)
)]
public class EShopPaymentWeChatPayDomainModule : AbpModule
{
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="2.5.0" />
<ProjectReference Include="..\..\..\EasyAbp.EShop.Payment\src\EasyAbp.EShop.Payment.Abstractions\EasyAbp.EShop.Payment.Abstractions.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.Domain.Shared\EasyAbp.EShop.Payment.WeChatPay.Domain.Shared.csproj" />
</ItemGroup>
</Project>
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
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
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";
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.EntityFrameworkCore" Version="2.5.0" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.Domain\EasyAbp.EShop.Payment.WeChatPay.Domain.csproj" />
</ItemGroup>
</Project>
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<WeChatPayDbContext>(options =>
{
/* Add custom repositories here. Example:
* options.AddRepository<Question, EfCoreQuestionRepository>();
*/
});
}
}
}
\ No newline at end of file
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<Question> Questions { get; }
*/
}
}
\ No newline at end of file
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
namespace EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore
{
[ConnectionStringName(WeChatPayDbProperties.ConnectionStringName)]
public class WeChatPayDbContext : AbpDbContext<WeChatPayDbContext>, IWeChatPayDbContext
{
/* Add DbSet for each Aggregate Root here. Example:
* public DbSet<Question> Questions { get; set; }
*/
public WeChatPayDbContext(DbContextOptions<WeChatPayDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ConfigureWeChatPay();
}
}
}
\ No newline at end of file
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<WeChatPayModelBuilderConfigurationOptions> 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<Question>(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
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
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
);
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Http.Client" Version="2.5.0" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts.csproj" />
</ItemGroup>
</Project>
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<IMvcBuilder>(mvcBuilder =>
{
mvcBuilder.AddApplicationPartIfNotExists(typeof(EShopPaymentWeChatPayHttpApiModule).Assembly);
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Get<WeChatPayResource>()
.AddBaseTypes(typeof(AbpUiResource));
});
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="2.5.0" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts\EasyAbp.EShop.Payment.WeChatPay.Application.Contracts.csproj" />
</ItemGroup>
</Project>
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);
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.MongoDB" Version="2.5.0" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.Domain\EasyAbp.EShop.Payment.WeChatPay.Domain.csproj" />
</ItemGroup>
</Project>
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<WeChatPayMongoDbContext>(options =>
{
/* Add custom repositories here. Example:
* options.AddRepository<Question, MongoQuestionRepository>();
*/
});
}
}
}
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<Question> Questions { get; }
*/
}
}
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<Question> Questions => Collection<Question>();
*/
protected override void CreateModel(IMongoModelBuilder modelBuilder)
{
base.CreateModel(modelBuilder);
modelBuilder.ConfigureWeChatPay();
}
}
}
\ No newline at end of file
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<AbpMongoModelBuilderConfigurationOptions> optionsAction = null)
{
Check.NotNull(builder, nameof(builder));
var options = new WeChatPayMongoModelBuilderConfigurationOptions(
WeChatPayDbProperties.DbTablePrefix
);
optionsAction?.Invoke(options);
}
}
}
\ No newline at end of file
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
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<AbpMvcDataAnnotationsLocalizationOptions>(options =>
{
options.AddAssemblyResource(typeof(WeChatPayResource), typeof(EShopPaymentWeChatPayWebModule).Assembly);
});
PreConfigure<IMvcBuilder>(mvcBuilder =>
{
mvcBuilder.AddApplicationPartIfNotExists(typeof(EShopPaymentWeChatPayWebModule).Assembly);
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpNavigationOptions>(options =>
{
options.MenuContributors.Add(new WeChatPayMenuContributor());
});
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<EShopPaymentWeChatPayWebModule>("EasyAbp.EShop.Payment.WeChatPay.Web");
});
context.Services.AddAutoMapperObjectMapper<EShopPaymentWeChatPayWebModule>();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<EShopPaymentWeChatPayWebModule>(validate: true);
});
Configure<RazorPagesOptions>(options =>
{
//Configure authorization.
});
}
}
}
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<AssetTargetFallback>$(AssetTargetFallback);portable-net45+win8+wp8+wpa81;</AssetTargetFallback>
<IsPackable>true</IsPackable>
<OutputType>Library</OutputType>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay.Web</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AutoMapper" Version="2.5.0" />
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared" Version="2.5.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.HttpApi\EasyAbp.EShop.Payment.WeChatPay.HttpApi.csproj" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Pages\**\*.cshtml" />
<EmbeddedResource Include="Pages\**\*.css" />
<EmbeddedResource Include="Pages\**\*.js" />
<EmbeddedResource Include="wwwroot\**\*.*" />
<Content Remove="Pages\**\*.cshtml" />
<Content Remove="Pages\**\*.css" />
<Content Remove="Pages\**\*.js" />
<Content Remove="wwwroot\**\*.*" />
</ItemGroup>
<ItemGroup>
<Content Remove="Properties\launchSettings.json" />
<None Include="Properties\launchSettings.json" />
</ItemGroup>
<ItemGroup>
<Folder Include="wwwroot\" />
</ItemGroup>
</Project>
@page
@inherits EasyAbp.EShop.Payment.WeChatPay.Web.Pages.WeChatPayPage
@model EasyAbp.EShop.Payment.WeChatPay.Web.Pages.WeChatPay.IndexModel
@{
}
<h1>WeChatPay</h1>
<p>A sample page for the WeChatPay module.</p>
\ No newline at end of file
namespace EasyAbp.EShop.Payment.WeChatPay.Web.Pages.WeChatPay
{
public class IndexModel : WeChatPayPageModel
{
public void OnGet()
{
}
}
}
\ No newline at end of file
@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
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<WeChatPayResource> L { get; set; }
}
}
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
{
"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
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
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
using Volo.Abp.Modularity;
namespace EasyAbp.EShop.Payment.WeChatPay
{
[DependsOn(
typeof(EShopPaymentWeChatPayApplicationModule),
typeof(EShopPaymentWeChatPayDomainTestModule)
)]
public class EShopPaymentWeChatPayApplicationTestModule : AbpModule
{
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\EasyAbp.EShop.Payment.WeChatPay.Application\EasyAbp.EShop.Payment.WeChatPay.Application.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.Domain.Tests\EasyAbp.EShop.Payment.WeChatPay.Domain.Tests.csproj" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
</ItemGroup>
</Project>
namespace EasyAbp.EShop.Payment.WeChatPay
{
/* Inherit from this class for your application layer tests.
* See SampleAppService_Tests for example.
*/
public abstract class WeChatPayApplicationTestBase : WeChatPayTestBase<EShopPaymentWeChatPayApplicationTestModule>
{
}
}
\ No newline at end of file
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
{
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.Tests.csproj" />
</ItemGroup>
</Project>
namespace EasyAbp.EShop.Payment.WeChatPay
{
/* Inherit from this class for your domain layer tests.
* See SampleManager_Tests for example.
*/
public abstract class WeChatPayDomainTestBase : WeChatPayTestBase<EShopPaymentWeChatPayDomainTestModule>
{
}
}
\ No newline at end of file
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<PackageReference Include="Microsoft.Data.Sqlite" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Proxies" Version="3.1.0" />
<ProjectReference Include="..\..\src\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore\EasyAbp.EShop.Payment.WeChatPay.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.TestBase\EasyAbp.EShop.Payment.WeChatPay.TestBase.csproj" />
</ItemGroup>
</Project>
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<AbpDbContextOptions>(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<WeChatPayDbContext>().UseSqlite(connection).Options
).GetService<IRelationalDatabaseCreator>().CreateTables();
return connection;
}
}
}
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<EShopPaymentWeChatPayEntityFrameworkCoreTestModule>
{
}
}
\ No newline at end of file
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
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<EShopPaymentWeChatPayConsoleApiClientModule>())
{
application.Initialize();
var demo = application.ServiceProvider.GetRequiredService<ClientDemoService>();
await demo.RunAsync();
application.Shutdown();
}
}
public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
}
}
using Volo.Abp.Http.Client.IdentityModel;
using Volo.Abp.Modularity;
namespace EasyAbp.EShop.Payment.WeChatPay
{
[DependsOn(
typeof(EShopPaymentWeChatPayHttpApiClientModule),
typeof(AbpHttpClientIdentityModelModule)
)]
public class EShopPaymentWeChatPayConsoleApiClientModule : AbpModule
{
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Http.Client.IdentityModel" Version="2.5.0" />
<ProjectReference Include="..\..\src\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client\EasyAbp.EShop.Payment.WeChatPay.HttpApi.Client.csproj" />
</ItemGroup>
<ItemGroup>
<None Remove="appsettings.json" />
<Content Include="appsettings.json">
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="3.1.2" />
</ItemGroup>
</Project>
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<ConsoleTestAppHostedService>();
});
}
}
{
"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
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<PackageReference Include="Mongo2Go" Version="2.2.12" />
<ProjectReference Include="..\..\src\EasyAbp.EShop.Payment.WeChatPay.MongoDB\EasyAbp.EShop.Payment.WeChatPay.MongoDB.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.WeChatPay.TestBase\EasyAbp.EShop.Payment.WeChatPay.TestBase.csproj" />
</ItemGroup>
</Project>
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<AbpDbConnectionOptions>(options =>
{
options.ConnectionStrings.Default = connectionString;
});
}
}
}
\ No newline at end of file
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<EShopPaymentWeChatPayMongoDbTestModule>
{
}
}
\ No newline at end of file
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<IDataSeeder>()
.SeedAsync();
}
});
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>EasyAbp.EShop.Payment.WeChatPay</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
<PackageReference Include="NSubstitute" Version="4.2.1" />
<PackageReference Include="Shouldly" Version="3.0.2" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.extensibility.execution" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
<PackageReference Include="Volo.Abp.Autofac" Version="2.5.0" />
<PackageReference Include="Volo.Abp.Authorization" Version="2.5.0" />
<PackageReference Include="Volo.Abp.TestBase" Version="2.5.0" />
<ProjectReference Include="..\..\src\EasyAbp.EShop.Payment.WeChatPay.Domain\EasyAbp.EShop.Payment.WeChatPay.Domain.csproj" />
</ItemGroup>
</Project>
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<Claim>
{
new Claim(AbpClaimTypes.UserId,"2e701e62-0953-4dd3-910b-dc6cc93ccb0d"),
new Claim(AbpClaimTypes.UserName,"admin"),
new Claim(AbpClaimTypes.Email,"admin@abp.io")
}
)
);
}
}
}
return _principal;
}
}
}
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
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<TStartupModule> : AbpIntegratedTest<TStartupModule>
where TStartupModule : IAbpModule
{
protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
{
options.UseAutofac();
}
protected virtual Task WithUnitOfWorkAsync(Func<Task> func)
{
return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
}
protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func<Task> action)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
await action();
await uow.CompleteAsync();
}
}
}
protected virtual Task<TResult> WithUnitOfWorkAsync<TResult>(Func<Task<TResult>> func)
{
return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
}
protected virtual async Task<TResult> WithUnitOfWorkAsync<TResult>(AbpUnitOfWorkOptions options, Func<Task<TResult>> func)
{
using (var scope = ServiceProvider.CreateScope())
{
var uowManager = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
using (var uow = uowManager.Begin(options))
{
var result = await func();
await uow.CompleteAsync();
return result;
}
}
}
}
}
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\common.props" />
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace />
</PropertyGroup>
</Project>
namespace EasyAbp.EShop.Payment
{
public interface IPaymentServiceProvider
{
}
}
\ No newline at end of file
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>
\ No newline at end of file
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
{
......
......@@ -9,6 +9,8 @@
<ItemGroup>
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="2.5.0" />
<ProjectReference Include="..\..\..\EasyAbp.EShop.Stores\src\EasyAbp.EShop.Stores.Domain.Shared\EasyAbp.EShop.Stores.Domain.Shared.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.Abstractions\EasyAbp.EShop.Payment.Abstractions.csproj" />
<ProjectReference Include="..\EasyAbp.EShop.Payment.Domain.Shared\EasyAbp.EShop.Payment.Domain.Shared.csproj" />
</ItemGroup>
......
namespace EasyAbp.EShop.Payment
{
public class FreePaymentServiceProvider : IPaymentServiceProvider
{
}
}
\ No newline at end of file
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<Guid>, 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
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<Guid>, 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
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<Guid>, 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
namespace EasyAbp.EShop.Products.Products
using System;
namespace EasyAbp.EShop.Products.Products
{
[Flags]
public enum InventoryStrategy
{
NoNeed = 1,
......
......@@ -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}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment