diff --git a/aspnet-core/LINGYUN.MicroService.All.sln b/aspnet-core/LINGYUN.MicroService.All.sln index 8e2f552fa..8c1778367 100644 --- a/aspnet-core/LINGYUN.MicroService.All.sln +++ b/aspnet-core/LINGYUN.MicroService.All.sln @@ -758,6 +758,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.AspN EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Notifications", "modules\identity\LINGYUN.Abp.Identity.Notifications\LINGYUN.Abp.Identity.Notifications.csproj", "{54BBA043-317B-4A4F-B583-513D08BC25A7}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Work.Handlers\LINGYUN.Abp.WeChat.Work.Handlers.csproj", "{79FA2CBA-2904-4D80-A217-DCC0A38F93C4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Official.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Official.Handlers\LINGYUN.Abp.WeChat.Official.Handlers.csproj", "{E469F047-6AD0-4D2B-9900-46358DA3BC30}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1940,6 +1944,14 @@ Global {54BBA043-317B-4A4F-B583-513D08BC25A7}.Debug|Any CPU.Build.0 = Debug|Any CPU {54BBA043-317B-4A4F-B583-513D08BC25A7}.Release|Any CPU.ActiveCfg = Release|Any CPU {54BBA043-317B-4A4F-B583-513D08BC25A7}.Release|Any CPU.Build.0 = Release|Any CPU + {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Release|Any CPU.Build.0 = Release|Any CPU + {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -2306,6 +2318,8 @@ Global {8826831D-8733-473A-B47B-A30C3732B13D} = {52B5D4F7-237B-4E0A-A167-68442164F70A} {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72} = {83E698F6-F8CD-4604-AB80-01A203389501} {54BBA043-317B-4A4F-B583-513D08BC25A7} = {52B5D4F7-237B-4E0A-A167-68442164F70A} + {79FA2CBA-2904-4D80-A217-DCC0A38F93C4} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} + {E469F047-6AD0-4D2B-9900-46358DA3BC30} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718} diff --git a/aspnet-core/LINGYUN.MicroService.SingleProject.sln b/aspnet-core/LINGYUN.MicroService.SingleProject.sln index 0e6fe18c1..ecbc892c7 100644 --- a/aspnet-core/LINGYUN.MicroService.SingleProject.sln +++ b/aspnet-core/LINGYUN.MicroService.SingleProject.sln @@ -533,6 +533,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.AspN EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Notifications", "modules\identity\LINGYUN.Abp.Identity.Notifications\LINGYUN.Abp.Identity.Notifications.csproj", "{4634B421-36E6-4169-AA1A-11050902495F}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Official.Handlers\LINGYUN.Abp.WeChat.Official.Handlers.csproj", "{BB2DF96A-6ED8-4F47-948C-230EA2065C4C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Work.Handlers\LINGYUN.Abp.WeChat.Work.Handlers.csproj", "{DB80C55F-8B70-4840-942A-ED021ED88BD6}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1403,6 +1407,14 @@ Global {4634B421-36E6-4169-AA1A-11050902495F}.Debug|Any CPU.Build.0 = Debug|Any CPU {4634B421-36E6-4169-AA1A-11050902495F}.Release|Any CPU.ActiveCfg = Release|Any CPU {4634B421-36E6-4169-AA1A-11050902495F}.Release|Any CPU.Build.0 = Release|Any CPU + {BB2DF96A-6ED8-4F47-948C-230EA2065C4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB2DF96A-6ED8-4F47-948C-230EA2065C4C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB2DF96A-6ED8-4F47-948C-230EA2065C4C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB2DF96A-6ED8-4F47-948C-230EA2065C4C}.Release|Any CPU.Build.0 = Release|Any CPU + {DB80C55F-8B70-4840-942A-ED021ED88BD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB80C55F-8B70-4840-942A-ED021ED88BD6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB80C55F-8B70-4840-942A-ED021ED88BD6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB80C55F-8B70-4840-942A-ED021ED88BD6}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -1663,6 +1675,8 @@ Global {F7459720-873C-4741-A991-A671CF03A6AF} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} {382CAC43-EE1F-4DA3-B433-E23C3F58F44A} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} {4634B421-36E6-4169-AA1A-11050902495F} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} + {BB2DF96A-6ED8-4F47-948C-230EA2065C4C} = {91867618-0D86-4410-91C6-B1166A9ACDF9} + {DB80C55F-8B70-4840-942A-ED021ED88BD6} = {91867618-0D86-4410-91C6-B1166A9ACDF9} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {711A43C0-A2F8-4E5C-9B9F-F2551E4B3FF1} diff --git a/aspnet-core/LINGYUN.MicroService.WechatManagement.sln b/aspnet-core/LINGYUN.MicroService.WechatManagement.sln new file mode 100644 index 000000000..e2dab5786 --- /dev/null +++ b/aspnet-core/LINGYUN.MicroService.WechatManagement.sln @@ -0,0 +1,337 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "framework", "framework", "{BD5616DF-D493-4170-8E78-46486BE77FC2}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{EDB927C3-0589-4DAD-B5FE-5A4B5C727122}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "hosts", "hosts", "{1B7F2C6E-1712-4F22-989C-D56C7AEF7F16}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{EDBB7BC1-46F0-4803-A572-7F8FEF433BE2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "framework\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{915E4DB5-8017-43C5-B547-08658F0ED488}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Common", "framework\wechat\LINGYUN.Abp.WeChat.Common\LINGYUN.Abp.WeChat.Common.csproj", "{3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "framework\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{08361B78-A90E-45BD-8517-B64208D7DAA0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "framework\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{3F20CF07-12AE-49F4-84CE-F7BB99C519F8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Application", "framework\wechat\LINGYUN.Abp.WeChat.Official.Application\LINGYUN.Abp.WeChat.Official.Application.csproj", "{DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Application.Contracts", "framework\wechat\LINGYUN.Abp.WeChat.Official.Application.Contracts\LINGYUN.Abp.WeChat.Official.Application.Contracts.csproj", "{6A652115-DED9-486E-BEA1-5F652C297359}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.HttpApi", "framework\wechat\LINGYUN.Abp.WeChat.Official.HttpApi\LINGYUN.Abp.WeChat.Official.HttpApi.csproj", "{343E5900-511F-449B-95C1-7AC070395DB5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "framework\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work", "framework\wechat\LINGYUN.Abp.WeChat.Work\LINGYUN.Abp.WeChat.Work.csproj", "{785D6536-DE97-40C5-AEE3-65C529AAE39F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application\LINGYUN.Abp.WeChat.Work.Application.csproj", "{5E3BB07A-34C8-4C04-B5F5-A99F436F5934}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application.Contracts", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application.Contracts\LINGYUN.Abp.WeChat.Work.Application.Contracts.csproj", "{8D781A51-9B85-4B8D-B6E2-00020B4D744B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Common", "framework\wechat\LINGYUN.Abp.WeChat.Work.Common\LINGYUN.Abp.WeChat.Work.Common.csproj", "{12486482-960D-44B3-828A-F2FF304618D5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.HttpApi", "framework\wechat\LINGYUN.Abp.WeChat.Work.HttpApi\LINGYUN.Abp.WeChat.Work.HttpApi.csproj", "{27A2DAE4-08EC-4121-ABF8-58F86E4AD747}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.WechatManagement.HttpApi.Host", "services\LY.MicroService.WechatManagement.HttpApi.Host\LY.MicroService.WechatManagement.HttpApi.Host.csproj", "{23ADD956-A69D-494C-ABA0-1577DC46C72F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{DC3710B9-2B39-4B03-A21E-20282E6AC053}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authorization", "authorization", "{1A4D7CDD-9F77-40A0-A384-44DE0503FA2E}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elasticsearch", "framework\elasticsearch\LINGYUN.Abp.Elasticsearch\LINGYUN.Abp.Elasticsearch.csproj", "{CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "logging", "logging", "{D59249AA-A555-4AD0-A465-6835854628D9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.Application", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj", "{7CAADF78-13ED-4832-B0F6-184EBAF4B162}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.UniqueId", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.UniqueId\LINGYUN.Abp.Serilog.Enrichers.UniqueId.csproj", "{0943AFDE-B14C-412B-8AE5-9BCBA5031698}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch", "framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj", "{F1B094CC-E6FB-41F4-AC05-0D34360480A7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging", "framework\auditing\LINGYUN.Abp.AuditLogging\LINGYUN.Abp.AuditLogging.csproj", "{DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authorization.OrganizationUnits", "framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj", "{F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{10A83D35-D37F-4D21-A79D-5E03B95EE400}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "saas", "saas", "{EA746F97-941A-4D63-9EFB-230D78B965C2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain.Shared", "modules\saas\LINGYUN.Abp.Saas.Domain.Shared\LINGYUN.Abp.Saas.Domain.Shared.csproj", "{8CB795F0-ED37-4D7B-BACA-DFAD667A865C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain", "modules\saas\LINGYUN.Abp.Saas.Domain\LINGYUN.Abp.Saas.Domain.csproj", "{83B3E21A-5D8B-45E1-8E61-A00D87663A11}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.EntityFrameworkCore", "modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj", "{87204045-FACA-44CF-ADF9-A716CF3B86B5}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{F5AFCEF2-B0D5-4138-A576-BE8033D9613C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Editions", "framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj", "{8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{48C72408-42E3-440B-B168-CE7F429872C2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "framework\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{807A74FA-39D6-449D-8B1D-E8B10DF39447}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper", "framework\common\LINGYUN.Abp.Wrapper\LINGYUN.Abp.Wrapper.csproj", "{045015A5-4693-45E2-9EAB-F8DCD175036B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mvc", "mvc", "{FE68AF9E-D218-4601-A853-140D6AFEC314}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj", "{BB666C40-149E-4C17-B4D0-B585CE6C3794}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Http.Client.Wrapper", "framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj", "{06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Wrapper", "framework\common\LINGYUN.Abp.AspNetCore.Wrapper\LINGYUN.Abp.AspNetCore.Wrapper.csproj", "{1E1696BE-8227-4CCD-9D05-A4C583680C9C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.CultureMap", "framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{E5A995FD-2338-4D86-A269-FECB636583ED}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{B89C5DC7-0570-4D3D-8317-6C57AA310953}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Claims.Mapping", "framework\security\LINGYUN.Abp.Claims.Mapping\LINGYUN.Abp.Claims.Mapping.csproj", "{EDEB8139-F69D-42B2-9399-7E8F87A16F6F}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{73ED64BB-7C39-42EA-B821-3DD697B9C36A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session.AspNetCore", "modules\identity\LINGYUN.Abp.Identity.Session.AspNetCore\LINGYUN.Abp.Identity.Session.AspNetCore.csproj", "{8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{52701ECE-3EBD-45EC-AD2C-0AAB15322311}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{1251068B-DD70-4946-AD3A-40183523B9A2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{37454EB7-9CE9-4250-92E4-7316F16B5328}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{CC8DDC8C-CC0C-4534-8D9F-2C345E065869}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session", "modules\identity\LINGYUN.Abp.Identity.Session\LINGYUN.Abp.Identity.Session.csproj", "{80EBBECC-EF11-4E5E-91DA-EEECED832F21}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {915E4DB5-8017-43C5-B547-08658F0ED488}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {915E4DB5-8017-43C5-B547-08658F0ED488}.Debug|Any CPU.Build.0 = Debug|Any CPU + {915E4DB5-8017-43C5-B547-08658F0ED488}.Release|Any CPU.ActiveCfg = Release|Any CPU + {915E4DB5-8017-43C5-B547-08658F0ED488}.Release|Any CPU.Build.0 = Release|Any CPU + {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}.Release|Any CPU.Build.0 = Release|Any CPU + {08361B78-A90E-45BD-8517-B64208D7DAA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {08361B78-A90E-45BD-8517-B64208D7DAA0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {08361B78-A90E-45BD-8517-B64208D7DAA0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {08361B78-A90E-45BD-8517-B64208D7DAA0}.Release|Any CPU.Build.0 = Release|Any CPU + {3F20CF07-12AE-49F4-84CE-F7BB99C519F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F20CF07-12AE-49F4-84CE-F7BB99C519F8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F20CF07-12AE-49F4-84CE-F7BB99C519F8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F20CF07-12AE-49F4-84CE-F7BB99C519F8}.Release|Any CPU.Build.0 = Release|Any CPU + {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}.Release|Any CPU.Build.0 = Release|Any CPU + {6A652115-DED9-486E-BEA1-5F652C297359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6A652115-DED9-486E-BEA1-5F652C297359}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6A652115-DED9-486E-BEA1-5F652C297359}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6A652115-DED9-486E-BEA1-5F652C297359}.Release|Any CPU.Build.0 = Release|Any CPU + {343E5900-511F-449B-95C1-7AC070395DB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {343E5900-511F-449B-95C1-7AC070395DB5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {343E5900-511F-449B-95C1-7AC070395DB5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {343E5900-511F-449B-95C1-7AC070395DB5}.Release|Any CPU.Build.0 = Release|Any CPU + {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}.Release|Any CPU.Build.0 = Release|Any CPU + {785D6536-DE97-40C5-AEE3-65C529AAE39F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {785D6536-DE97-40C5-AEE3-65C529AAE39F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {785D6536-DE97-40C5-AEE3-65C529AAE39F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {785D6536-DE97-40C5-AEE3-65C529AAE39F}.Release|Any CPU.Build.0 = Release|Any CPU + {5E3BB07A-34C8-4C04-B5F5-A99F436F5934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5E3BB07A-34C8-4C04-B5F5-A99F436F5934}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5E3BB07A-34C8-4C04-B5F5-A99F436F5934}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5E3BB07A-34C8-4C04-B5F5-A99F436F5934}.Release|Any CPU.Build.0 = Release|Any CPU + {8D781A51-9B85-4B8D-B6E2-00020B4D744B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D781A51-9B85-4B8D-B6E2-00020B4D744B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D781A51-9B85-4B8D-B6E2-00020B4D744B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D781A51-9B85-4B8D-B6E2-00020B4D744B}.Release|Any CPU.Build.0 = Release|Any CPU + {12486482-960D-44B3-828A-F2FF304618D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12486482-960D-44B3-828A-F2FF304618D5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12486482-960D-44B3-828A-F2FF304618D5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12486482-960D-44B3-828A-F2FF304618D5}.Release|Any CPU.Build.0 = Release|Any CPU + {27A2DAE4-08EC-4121-ABF8-58F86E4AD747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {27A2DAE4-08EC-4121-ABF8-58F86E4AD747}.Debug|Any CPU.Build.0 = Debug|Any CPU + {27A2DAE4-08EC-4121-ABF8-58F86E4AD747}.Release|Any CPU.ActiveCfg = Release|Any CPU + {27A2DAE4-08EC-4121-ABF8-58F86E4AD747}.Release|Any CPU.Build.0 = Release|Any CPU + {23ADD956-A69D-494C-ABA0-1577DC46C72F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23ADD956-A69D-494C-ABA0-1577DC46C72F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23ADD956-A69D-494C-ABA0-1577DC46C72F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23ADD956-A69D-494C-ABA0-1577DC46C72F}.Release|Any CPU.Build.0 = Release|Any CPU + {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}.Release|Any CPU.Build.0 = Release|Any CPU + {7CAADF78-13ED-4832-B0F6-184EBAF4B162}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CAADF78-13ED-4832-B0F6-184EBAF4B162}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CAADF78-13ED-4832-B0F6-184EBAF4B162}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CAADF78-13ED-4832-B0F6-184EBAF4B162}.Release|Any CPU.Build.0 = Release|Any CPU + {0943AFDE-B14C-412B-8AE5-9BCBA5031698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0943AFDE-B14C-412B-8AE5-9BCBA5031698}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0943AFDE-B14C-412B-8AE5-9BCBA5031698}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0943AFDE-B14C-412B-8AE5-9BCBA5031698}.Release|Any CPU.Build.0 = Release|Any CPU + {F1B094CC-E6FB-41F4-AC05-0D34360480A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1B094CC-E6FB-41F4-AC05-0D34360480A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1B094CC-E6FB-41F4-AC05-0D34360480A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1B094CC-E6FB-41F4-AC05-0D34360480A7}.Release|Any CPU.Build.0 = Release|Any CPU + {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}.Release|Any CPU.Build.0 = Release|Any CPU + {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}.Release|Any CPU.Build.0 = Release|Any CPU + {10A83D35-D37F-4D21-A79D-5E03B95EE400}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {10A83D35-D37F-4D21-A79D-5E03B95EE400}.Debug|Any CPU.Build.0 = Debug|Any CPU + {10A83D35-D37F-4D21-A79D-5E03B95EE400}.Release|Any CPU.ActiveCfg = Release|Any CPU + {10A83D35-D37F-4D21-A79D-5E03B95EE400}.Release|Any CPU.Build.0 = Release|Any CPU + {8CB795F0-ED37-4D7B-BACA-DFAD667A865C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8CB795F0-ED37-4D7B-BACA-DFAD667A865C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8CB795F0-ED37-4D7B-BACA-DFAD667A865C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8CB795F0-ED37-4D7B-BACA-DFAD667A865C}.Release|Any CPU.Build.0 = Release|Any CPU + {83B3E21A-5D8B-45E1-8E61-A00D87663A11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {83B3E21A-5D8B-45E1-8E61-A00D87663A11}.Debug|Any CPU.Build.0 = Debug|Any CPU + {83B3E21A-5D8B-45E1-8E61-A00D87663A11}.Release|Any CPU.ActiveCfg = Release|Any CPU + {83B3E21A-5D8B-45E1-8E61-A00D87663A11}.Release|Any CPU.Build.0 = Release|Any CPU + {87204045-FACA-44CF-ADF9-A716CF3B86B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {87204045-FACA-44CF-ADF9-A716CF3B86B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {87204045-FACA-44CF-ADF9-A716CF3B86B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {87204045-FACA-44CF-ADF9-A716CF3B86B5}.Release|Any CPU.Build.0 = Release|Any CPU + {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}.Release|Any CPU.Build.0 = Release|Any CPU + {48C72408-42E3-440B-B168-CE7F429872C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {48C72408-42E3-440B-B168-CE7F429872C2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {48C72408-42E3-440B-B168-CE7F429872C2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {48C72408-42E3-440B-B168-CE7F429872C2}.Release|Any CPU.Build.0 = Release|Any CPU + {807A74FA-39D6-449D-8B1D-E8B10DF39447}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {807A74FA-39D6-449D-8B1D-E8B10DF39447}.Debug|Any CPU.Build.0 = Debug|Any CPU + {807A74FA-39D6-449D-8B1D-E8B10DF39447}.Release|Any CPU.ActiveCfg = Release|Any CPU + {807A74FA-39D6-449D-8B1D-E8B10DF39447}.Release|Any CPU.Build.0 = Release|Any CPU + {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}.Release|Any CPU.Build.0 = Release|Any CPU + {045015A5-4693-45E2-9EAB-F8DCD175036B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {045015A5-4693-45E2-9EAB-F8DCD175036B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {045015A5-4693-45E2-9EAB-F8DCD175036B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {045015A5-4693-45E2-9EAB-F8DCD175036B}.Release|Any CPU.Build.0 = Release|Any CPU + {BB666C40-149E-4C17-B4D0-B585CE6C3794}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BB666C40-149E-4C17-B4D0-B585CE6C3794}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BB666C40-149E-4C17-B4D0-B585CE6C3794}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BB666C40-149E-4C17-B4D0-B585CE6C3794}.Release|Any CPU.Build.0 = Release|Any CPU + {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}.Release|Any CPU.Build.0 = Release|Any CPU + {1E1696BE-8227-4CCD-9D05-A4C583680C9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E1696BE-8227-4CCD-9D05-A4C583680C9C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E1696BE-8227-4CCD-9D05-A4C583680C9C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E1696BE-8227-4CCD-9D05-A4C583680C9C}.Release|Any CPU.Build.0 = Release|Any CPU + {E5A995FD-2338-4D86-A269-FECB636583ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E5A995FD-2338-4D86-A269-FECB636583ED}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E5A995FD-2338-4D86-A269-FECB636583ED}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E5A995FD-2338-4D86-A269-FECB636583ED}.Release|Any CPU.Build.0 = Release|Any CPU + {B89C5DC7-0570-4D3D-8317-6C57AA310953}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B89C5DC7-0570-4D3D-8317-6C57AA310953}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B89C5DC7-0570-4D3D-8317-6C57AA310953}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B89C5DC7-0570-4D3D-8317-6C57AA310953}.Release|Any CPU.Build.0 = Release|Any CPU + {EDEB8139-F69D-42B2-9399-7E8F87A16F6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EDEB8139-F69D-42B2-9399-7E8F87A16F6F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EDEB8139-F69D-42B2-9399-7E8F87A16F6F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EDEB8139-F69D-42B2-9399-7E8F87A16F6F}.Release|Any CPU.Build.0 = Release|Any CPU + {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}.Release|Any CPU.Build.0 = Release|Any CPU + {1251068B-DD70-4946-AD3A-40183523B9A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1251068B-DD70-4946-AD3A-40183523B9A2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1251068B-DD70-4946-AD3A-40183523B9A2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1251068B-DD70-4946-AD3A-40183523B9A2}.Release|Any CPU.Build.0 = Release|Any CPU + {37454EB7-9CE9-4250-92E4-7316F16B5328}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {37454EB7-9CE9-4250-92E4-7316F16B5328}.Debug|Any CPU.Build.0 = Debug|Any CPU + {37454EB7-9CE9-4250-92E4-7316F16B5328}.Release|Any CPU.ActiveCfg = Release|Any CPU + {37454EB7-9CE9-4250-92E4-7316F16B5328}.Release|Any CPU.Build.0 = Release|Any CPU + {CC8DDC8C-CC0C-4534-8D9F-2C345E065869}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CC8DDC8C-CC0C-4534-8D9F-2C345E065869}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CC8DDC8C-CC0C-4534-8D9F-2C345E065869}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CC8DDC8C-CC0C-4534-8D9F-2C345E065869}.Release|Any CPU.Build.0 = Release|Any CPU + {80EBBECC-EF11-4E5E-91DA-EEECED832F21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {80EBBECC-EF11-4E5E-91DA-EEECED832F21}.Debug|Any CPU.Build.0 = Debug|Any CPU + {80EBBECC-EF11-4E5E-91DA-EEECED832F21}.Release|Any CPU.ActiveCfg = Release|Any CPU + {80EBBECC-EF11-4E5E-91DA-EEECED832F21}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} = {BD5616DF-D493-4170-8E78-46486BE77FC2} + {915E4DB5-8017-43C5-B547-08658F0ED488} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {08361B78-A90E-45BD-8517-B64208D7DAA0} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {3F20CF07-12AE-49F4-84CE-F7BB99C519F8} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {6A652115-DED9-486E-BEA1-5F652C297359} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {343E5900-511F-449B-95C1-7AC070395DB5} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {785D6536-DE97-40C5-AEE3-65C529AAE39F} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {5E3BB07A-34C8-4C04-B5F5-A99F436F5934} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {8D781A51-9B85-4B8D-B6E2-00020B4D744B} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {12486482-960D-44B3-828A-F2FF304618D5} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {27A2DAE4-08EC-4121-ABF8-58F86E4AD747} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} + {23ADD956-A69D-494C-ABA0-1577DC46C72F} = {1B7F2C6E-1712-4F22-989C-D56C7AEF7F16} + {DC3710B9-2B39-4B03-A21E-20282E6AC053} = {BD5616DF-D493-4170-8E78-46486BE77FC2} + {1A4D7CDD-9F77-40A0-A384-44DE0503FA2E} = {BD5616DF-D493-4170-8E78-46486BE77FC2} + {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} = {BD5616DF-D493-4170-8E78-46486BE77FC2} + {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {D59249AA-A555-4AD0-A465-6835854628D9} = {BD5616DF-D493-4170-8E78-46486BE77FC2} + {7CAADF78-13ED-4832-B0F6-184EBAF4B162} = {D59249AA-A555-4AD0-A465-6835854628D9} + {0943AFDE-B14C-412B-8AE5-9BCBA5031698} = {D59249AA-A555-4AD0-A465-6835854628D9} + {F1B094CC-E6FB-41F4-AC05-0D34360480A7} = {DC3710B9-2B39-4B03-A21E-20282E6AC053} + {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0} = {DC3710B9-2B39-4B03-A21E-20282E6AC053} + {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3} = {1A4D7CDD-9F77-40A0-A384-44DE0503FA2E} + {10A83D35-D37F-4D21-A79D-5E03B95EE400} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {EA746F97-941A-4D63-9EFB-230D78B965C2} = {EDB927C3-0589-4DAD-B5FE-5A4B5C727122} + {8CB795F0-ED37-4D7B-BACA-DFAD667A865C} = {EA746F97-941A-4D63-9EFB-230D78B965C2} + {83B3E21A-5D8B-45E1-8E61-A00D87663A11} = {EA746F97-941A-4D63-9EFB-230D78B965C2} + {87204045-FACA-44CF-ADF9-A716CF3B86B5} = {EA746F97-941A-4D63-9EFB-230D78B965C2} + {F5AFCEF2-B0D5-4138-A576-BE8033D9613C} = {BD5616DF-D493-4170-8E78-46486BE77FC2} + {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781} = {F5AFCEF2-B0D5-4138-A576-BE8033D9613C} + {48C72408-42E3-440B-B168-CE7F429872C2} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {807A74FA-39D6-449D-8B1D-E8B10DF39447} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {045015A5-4693-45E2-9EAB-F8DCD175036B} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {FE68AF9E-D218-4601-A853-140D6AFEC314} = {BD5616DF-D493-4170-8E78-46486BE77FC2} + {BB666C40-149E-4C17-B4D0-B585CE6C3794} = {FE68AF9E-D218-4601-A853-140D6AFEC314} + {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {1E1696BE-8227-4CCD-9D05-A4C583680C9C} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {E5A995FD-2338-4D86-A269-FECB636583ED} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {B89C5DC7-0570-4D3D-8317-6C57AA310953} = {FE68AF9E-D218-4601-A853-140D6AFEC314} + {EDEB8139-F69D-42B2-9399-7E8F87A16F6F} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} + {73ED64BB-7C39-42EA-B821-3DD697B9C36A} = {EDB927C3-0589-4DAD-B5FE-5A4B5C727122} + {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0} = {73ED64BB-7C39-42EA-B821-3DD697B9C36A} + {52701ECE-3EBD-45EC-AD2C-0AAB15322311} = {EDB927C3-0589-4DAD-B5FE-5A4B5C727122} + {1251068B-DD70-4946-AD3A-40183523B9A2} = {52701ECE-3EBD-45EC-AD2C-0AAB15322311} + {37454EB7-9CE9-4250-92E4-7316F16B5328} = {52701ECE-3EBD-45EC-AD2C-0AAB15322311} + {CC8DDC8C-CC0C-4534-8D9F-2C345E065869} = {52701ECE-3EBD-45EC-AD2C-0AAB15322311} + {80EBBECC-EF11-4E5E-91DA-EEECED832F21} = {73ED64BB-7C39-42EA-B821-3DD697B9C36A} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EC9D01C1-EA3C-48C7-A279-4D35C8AD312E} + EndGlobalSection +EndGlobal diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/AbpWeChatMessageHandleOptions.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/AbpWeChatMessageHandleOptions.cs index fcab3676b..ccbbcae39 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/AbpWeChatMessageHandleOptions.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/AbpWeChatMessageHandleOptions.cs @@ -1,5 +1,4 @@ -using LINGYUN.Abp.WeChat.Common.Messages; -using System; +using System; using System.Collections.Generic; namespace LINGYUN.Abp.WeChat.Common.Messages.Handlers; diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandleContributor.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandleContributor.cs index eb1b1bcf3..318d22794 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandleContributor.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandleContributor.cs @@ -1,5 +1,4 @@ -using LINGYUN.Abp.WeChat.Common.Messages; -using System.Threading.Tasks; +using System.Threading.Tasks; namespace LINGYUN.Abp.WeChat.Common.Messages.Handlers; public interface IMessageHandleContributor where TMessage : WeChatGeneralMessage diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandler.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandler.cs index c2f52ba5a..10b6183c3 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandler.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandler.cs @@ -1,5 +1,4 @@ -using LINGYUN.Abp.WeChat.Common.Messages; -using System.Threading.Tasks; +using System.Threading.Tasks; namespace LINGYUN.Abp.WeChat.Common.Messages.Handlers; public interface IMessageHandler diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandleContext.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandleContext.cs index e4ef78838..11c29ee2e 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandleContext.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandleContext.cs @@ -1,5 +1,4 @@ -using LINGYUN.Abp.WeChat.Common.Messages; -using System; +using System; namespace LINGYUN.Abp.WeChat.Common.Messages.Handlers; public class MessageHandleContext where TMessage : WeChatMessage diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandler.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandler.cs index 97b2c4caa..fc9ff95ba 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandler.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandler.cs @@ -1,5 +1,4 @@ -using LINGYUN.Abp.WeChat.Common.Messages; -using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/FodyWeavers.xml b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/FodyWeavers.xml new file mode 100644 index 000000000..1715698cc --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/FodyWeavers.xsd b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/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/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN.Abp.WeChat.Official.Handlers.csproj b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN.Abp.WeChat.Official.Handlers.csproj new file mode 100644 index 000000000..934fd10ce --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN.Abp.WeChat.Official.Handlers.csproj @@ -0,0 +1,20 @@ + + + + + + + netstandard2.0;netstandard2.1;net8.0 + LINGYUN.Abp.WeChat.Official.Handlers + LINGYUN.Abp.WeChat.Official.Handlers + false + false + false + + + + + + + + diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/AbpWeChatOfficialHandlersModule.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/AbpWeChatOfficialHandlersModule.cs new file mode 100644 index 000000000..6d868db69 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/AbpWeChatOfficialHandlersModule.cs @@ -0,0 +1,10 @@ +using Volo.Abp.EventBus; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.WeChat.Official.Handlers; + +[DependsOn(typeof(AbpEventBusModule))] +[DependsOn(typeof(AbpWeChatOfficialModule))] +public class AbpWeChatOfficialHandlersModule : AbpModule +{ +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Messages/Handlers/WeChatOfficialEventEventHandler.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/Messages/WeChatOfficialEventEventHandler.cs similarity index 92% rename from aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Messages/Handlers/WeChatOfficialEventEventHandler.cs rename to aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/Messages/WeChatOfficialEventEventHandler.cs index 65fdf013f..6689e5995 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Messages/Handlers/WeChatOfficialEventEventHandler.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/Messages/WeChatOfficialEventEventHandler.cs @@ -1,11 +1,11 @@ -using LINGYUN.Abp.WeChat.Common.Messages; -using LINGYUN.Abp.WeChat.Common.Messages.Handlers; +using LINGYUN.Abp.WeChat.Common.Messages.Handlers; +using LINGYUN.Abp.WeChat.Official.Messages; using LINGYUN.Abp.WeChat.Official.Messages.Models; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; -namespace LINGYUN.Abp.WeChat.Official.Messages.Handlers; +namespace LINGYUN.Abp.WeChat.Official.Handlers.Messages; public class WeChatOfficialEventEventHandler : IDistributedEventHandler>, IDistributedEventHandler>, diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Messages/Handlers/WeChatOfficialMessageEventHandler.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/Messages/WeChatOfficialMessageEventHandler.cs similarity index 92% rename from aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Messages/Handlers/WeChatOfficialMessageEventHandler.cs rename to aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/Messages/WeChatOfficialMessageEventHandler.cs index 674866605..df9f4e8cf 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Messages/Handlers/WeChatOfficialMessageEventHandler.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/Messages/WeChatOfficialMessageEventHandler.cs @@ -1,11 +1,11 @@ -using LINGYUN.Abp.WeChat.Common.Messages; -using LINGYUN.Abp.WeChat.Common.Messages.Handlers; +using LINGYUN.Abp.WeChat.Common.Messages.Handlers; +using LINGYUN.Abp.WeChat.Official.Messages; using LINGYUN.Abp.WeChat.Official.Messages.Models; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; -namespace LINGYUN.Abp.WeChat.Official.Messages.Handlers; +namespace LINGYUN.Abp.WeChat.Official.Handlers.Messages; public class WeChatOfficialMessageEventHandler : IDistributedEventHandler>, IDistributedEventHandler>, diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Account/ParametricQrCodeController.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Account/ParametricQrCodeController.cs index e1062aae4..7d8954232 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Account/ParametricQrCodeController.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Account/ParametricQrCodeController.cs @@ -6,6 +6,12 @@ using Volo.Abp.Content; namespace LINGYUN.Abp.WeChat.Official.Account; +/// +/// 带参数二维码接口 +/// +/// +/// 详情见: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html +/// [Controller] [RemoteService(Name = AbpWeChatOfficialRemoteServiceConsts.RemoteServiceName)] [Area(AbpWeChatOfficialRemoteServiceConsts.ModuleName)] @@ -18,7 +24,14 @@ public class ParametricQrCodeController : AbpControllerBase, IParametricQrCodeAp { _service = service; } - + /// + /// 生成带参数的二维码 + /// + /// + /// 详情见: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html + /// + /// + /// [HttpPost] [Route("generate")] public virtual Task GenerateAsync(ParametricQrCodeGenerateInput input) diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Message/WeChatMessageController.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Message/WeChatMessageController.cs index 1d15902cd..0082c94c6 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Message/WeChatMessageController.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Message/WeChatMessageController.cs @@ -7,6 +7,12 @@ using Volo.Abp.AspNetCore.Mvc; namespace LINGYUN.Abp.WeChat.Official.Message; +/// +/// 微信公众号消息处理接口 +/// +/// +/// 详情见微信公众号文档: +/// [Controller] [RemoteService(Name = AbpWeChatOfficialRemoteServiceConsts.RemoteServiceName)] [Area(AbpWeChatOfficialRemoteServiceConsts.ModuleName)] @@ -19,13 +25,24 @@ public class WeChatMessageController : AbpControllerBase, IWeChatMessageAppServi { _service = service; } - + /// + /// 微信公众号服务器消息验证回调接口
+ /// 验证微信公众号服务器发送的消息有效性 + ///
+ /// 微信公众号服务器传递的验证消息参数 + /// [HttpGet] public virtual Task Handle([FromQuery] MessageValidationInput input) { return _service.Handle(input); } + /// + /// 微信公众号服务器业务消息回调接口
+ /// 处理微信公众号服务器发送的业务消息 + ///
+ /// 微信公众号服务器传递的消息参数 + /// [HttpPost] public async virtual Task Handle([FromQuery] MessageHandleInput input) { diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialModule.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialModule.cs index da7bf8ab7..f695ba86d 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialModule.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialModule.cs @@ -1,8 +1,6 @@ using LINGYUN.Abp.WeChat.Common.Messages; -using LINGYUN.Abp.WeChat.Common.Messages.Handlers; using LINGYUN.Abp.WeChat.Localization; using LINGYUN.Abp.WeChat.Official.Messages; -using LINGYUN.Abp.WeChat.Official.Messages.Handlers; using LINGYUN.Abp.WeChat.Official.Messages.Models; using Microsoft.Extensions.DependencyInjection; using System; diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs index 5a953a91b..ebc79e8f9 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs @@ -8,7 +8,7 @@ namespace LINGYUN.Abp.WeChat.SettingManagement; [RemoteService(Name = AbpSettingManagementRemoteServiceConsts.RemoteServiceName)] [Area("settingManagement")] -[Route("api/setting-management/wechat")] +[Route("api/wechat/setting-management")] public class WeChatSettingController : AbpControllerBase, IWeChatSettingAppService { protected IWeChatSettingAppService WeChatSettingAppService { get; } diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/FodyWeavers.xml b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/FodyWeavers.xml new file mode 100644 index 000000000..1715698cc --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/FodyWeavers.xsd b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/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/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN.Abp.WeChat.Work.Handlers.csproj b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN.Abp.WeChat.Work.Handlers.csproj new file mode 100644 index 000000000..0b4e7c54c --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN.Abp.WeChat.Work.Handlers.csproj @@ -0,0 +1,20 @@ + + + + + + + netstandard2.0;netstandard2.1;net8.0 + LINGYUN.Abp.WeChat.Work.Handlers + LINGYUN.Abp.WeChat.Work.Handlers + false + false + false + + + + + + + + diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/AbpWeChatWorkHandlersModule.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/AbpWeChatWorkHandlersModule.cs new file mode 100644 index 000000000..94ed6f08d --- /dev/null +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/AbpWeChatWorkHandlersModule.cs @@ -0,0 +1,11 @@ +using LINGYUN.Abp.WeChat.Work.Common; +using Volo.Abp.EventBus; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.WeChat.Work.Handlers; + +[DependsOn(typeof(AbpEventBusModule))] +[DependsOn(typeof(AbpWeChatWorkCommonModule))] +public class AbpWeChatWorkHandlersModule : AbpModule +{ +} diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/LINGYUN/Abp/WeChat/Work/Common/Messages/Handlers/WeChatWorkEventEventHandler.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/Messages/WeChatWorkEventEventHandler.cs similarity index 98% rename from aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/LINGYUN/Abp/WeChat/Work/Common/Messages/Handlers/WeChatWorkEventEventHandler.cs rename to aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/Messages/WeChatWorkEventEventHandler.cs index dc014b30e..af5ef347c 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/LINGYUN/Abp/WeChat/Work/Common/Messages/Handlers/WeChatWorkEventEventHandler.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/Messages/WeChatWorkEventEventHandler.cs @@ -1,10 +1,11 @@ using LINGYUN.Abp.WeChat.Common.Messages.Handlers; +using LINGYUN.Abp.WeChat.Work.Common.Messages; using LINGYUN.Abp.WeChat.Work.Common.Messages.Models; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; -namespace LINGYUN.Abp.WeChat.Work.Common.Messages.Handlers; +namespace LINGYUN.Abp.WeChat.Work.Handlers.Messages; public class WeChatWorkEventEventHandler : IDistributedEventHandler>, IDistributedEventHandler>, diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/LINGYUN/Abp/WeChat/Work/Common/Messages/Handlers/WeChatWorkMessageEventHandler.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/Messages/WeChatWorkMessageEventHandler.cs similarity index 95% rename from aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/LINGYUN/Abp/WeChat/Work/Common/Messages/Handlers/WeChatWorkMessageEventHandler.cs rename to aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/Messages/WeChatWorkMessageEventHandler.cs index d754692ee..c4c62d185 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/LINGYUN/Abp/WeChat/Work/Common/Messages/Handlers/WeChatWorkMessageEventHandler.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/Messages/WeChatWorkMessageEventHandler.cs @@ -1,10 +1,11 @@ using LINGYUN.Abp.WeChat.Common.Messages.Handlers; +using LINGYUN.Abp.WeChat.Work.Common.Messages; using LINGYUN.Abp.WeChat.Work.Common.Messages.Models; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; -namespace LINGYUN.Abp.WeChat.Work.Common.Messages.Handlers; +namespace LINGYUN.Abp.WeChat.Work.Handlers.Messages; public class WeChatWorkMessageEventHandler : IDistributedEventHandler>, IDistributedEventHandler>, diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkAuthorizeController.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkAuthorizeController.cs index 2f5e8b6de..a47ebaa34 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkAuthorizeController.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkAuthorizeController.cs @@ -6,11 +6,19 @@ using Volo.Abp.Auditing; namespace LINGYUN.Abp.WeChat.Work.Authorize; +/// +/// 企业微信网页授权 +/// +/// +/// 详情见企业微信文档: +/// +[Controller] [DisableAuditing] -[RemoteService(false)] -[ApiExplorerSettings(IgnoreApi = true)] -[Route("api/wechat/work/authorize")] +//[RemoteService(false)] +//[ApiExplorerSettings(IgnoreApi = true)] +[RemoteService(Name = AbpWeChatWorkRemoteServiceConsts.RemoteServiceName)] [Area(AbpWeChatWorkRemoteServiceConsts.ModuleName)] +[Route("api/wechat/work/authorize")] public class WeChatWorkAuthorizeController : AbpControllerBase, IWeChatWorkAuthorizeAppService { private readonly IWeChatWorkAuthorizeAppService _service; @@ -20,6 +28,17 @@ public class WeChatWorkAuthorizeController : AbpControllerBase, IWeChatWorkAutho _service = service; } + /// + /// 构造网页授权链接 + /// + /// + /// 详情见企业微信文档: + /// + /// 企业内部应用标识 + /// 登录成功重定向url + /// oauth响应类型 + /// oauth授权范围 + /// [HttpGet] [Route("oauth2")] public virtual Task GenerateOAuth2AuthorizeAsync( @@ -31,6 +50,17 @@ public class WeChatWorkAuthorizeController : AbpControllerBase, IWeChatWorkAutho return _service.GenerateOAuth2AuthorizeAsync(agentid, redirectUri, responseType, scope); } + /// + /// 构造网页授权链接 + /// + /// + /// 详情见企业微信文档: + /// + /// 企业内部应用标识 + /// 登录成功重定向url + /// oauth响应类型 + /// oauth授权范围 + /// [HttpGet] [Route("oauth2/authorize")] public async virtual Task OAuth2AuthorizeAsync( @@ -44,6 +74,16 @@ public class WeChatWorkAuthorizeController : AbpControllerBase, IWeChatWorkAutho return Redirect(url); } + /// + /// 构造企业微信登录链接 + /// + /// + /// 详情见企业微信文档: + /// + /// 登录成功重定向url + /// 登录类型, ServiceApp:服务商登录;CorpApp:企业自建/代开发应用登录 + /// 企业自建应用/服务商代开发应用 AgentID,当login_type=CorpApp时填写 + /// [HttpGet] [Route("oauth2/login")] public virtual Task GenerateOAuth2LoginAsync( @@ -54,6 +94,16 @@ public class WeChatWorkAuthorizeController : AbpControllerBase, IWeChatWorkAutho return _service.GenerateOAuth2LoginAsync(redirectUri, loginType, agentid); } + /// + /// 构造企业微信登录链接 + /// + /// + /// 详情见企业微信文档: + /// + /// 登录成功重定向url + /// 登录类型, ServiceApp:服务商登录;CorpApp:企业自建/代开发应用登录 + /// 企业自建应用/服务商代开发应用 AgentID,当login_type=CorpApp时填写 + /// [HttpGet] [Route("oauth2/login/sso")] public async virtual Task OAuth2LoginAsync( diff --git a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Message/WeChatWorkMessageController.cs b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Message/WeChatWorkMessageController.cs index 15a167607..2ca95877b 100644 --- a/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Message/WeChatWorkMessageController.cs +++ b/aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Message/WeChatWorkMessageController.cs @@ -4,10 +4,18 @@ using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Auditing; namespace LINGYUN.Abp.WeChat.Work.Message; +/// +/// 企业微信消息处理接口 +/// +/// +/// 详情见企业微信文档: +/// [Controller] +[DisableAuditing] [RemoteService(Name = AbpWeChatWorkRemoteServiceConsts.RemoteServiceName)] [Area(AbpWeChatWorkRemoteServiceConsts.ModuleName)] [Route("api/wechat/work/messages")] @@ -20,6 +28,13 @@ public class WeChatWorkMessageController : AbpControllerBase, IWeChatWorkMessage _service = service; } + /// + /// 企业微信服务器消息验证回调接口
+ /// 验证企业微信发送的消息有效性 + ///
+ /// 企业内部应用标识 + /// 企业微信服务器传递的验证消息参数 + /// [HttpGet] [Route("{agentId}")] public virtual Task Handle([FromRoute] string agentId, [FromQuery] MessageValidationInput input) @@ -27,6 +42,13 @@ public class WeChatWorkMessageController : AbpControllerBase, IWeChatWorkMessage return _service.Handle(agentId, input); } + /// + /// 企业微信服务器业务消息回调接口
+ /// 处理企业微信服务器发送的业务消息 + ///
+ /// 企业内部应用标识 + /// 企业微信服务器传递的消息参数 + /// [HttpPost] [Route("{agentId}")] public async virtual Task Handle([FromRoute] string agentId, [FromQuery] MessageHandleInput input) diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj b/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj index 83a4abe87..5e08c8c69 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj +++ b/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj @@ -96,11 +96,13 @@ + + diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs index f21aef8b8..8a2f81f9e 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs @@ -94,8 +94,10 @@ using LINGYUN.Abp.WebhooksManagement; using LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore; using LINGYUN.Abp.WeChat.MiniProgram; using LINGYUN.Abp.WeChat.Official; +using LINGYUN.Abp.WeChat.Official.Handlers; using LINGYUN.Abp.WeChat.SettingManagement; using LINGYUN.Abp.WeChat.Work; +using LINGYUN.Abp.WeChat.Work.Handlers; using LINGYUN.Platform; using LINGYUN.Platform.EntityFrameworkCore; using LINGYUN.Platform.HttpApi; @@ -260,6 +262,8 @@ namespace LY.MicroService.Applications.Single; typeof(AbpWeChatWorkModule), typeof(AbpWeChatWorkApplicationModule), typeof(AbpWeChatWorkHttpApiModule), + typeof(AbpWeChatOfficialHandlersModule), + typeof(AbpWeChatWorkHandlersModule), typeof(AbpWeChatSettingManagementModule), typeof(AbpDataDbMigratorModule), typeof(AbpIdGeneratorModule), diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs index 6aca89d0d..ec3f27c33 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs @@ -32,7 +32,6 @@ using LINGYUN.Abp.Tencent.SettingManagement; using LINGYUN.Abp.TextTemplating; using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; using LINGYUN.Abp.TextTemplating.Scriban; -using LINGYUN.Abp.WeChat.SettingManagement; using LINGYUN.Abp.WxPusher.SettingManagement; using LY.MicroService.BackendAdmin.EntityFrameworkCore; using Microsoft.AspNetCore.Builder; @@ -70,7 +69,7 @@ namespace LY.MicroService.BackendAdmin; // 设置管理 typeof(AbpAliyunSettingManagementModule), typeof(AbpTencentCloudSettingManagementModule), - typeof(AbpWeChatSettingManagementModule), + // typeof(AbpWeChatSettingManagementModule), typeof(AbpWxPusherSettingManagementModule), typeof(AbpOssManagementSettingManagementModule), diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj index 38d0ffad5..85f647a01 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj @@ -75,7 +75,7 @@ - + diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs index 846f56b13..40b28f7d5 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/Settings/AccountSettingDefinitionProvider.cs @@ -1,8 +1,8 @@ -using Volo.Abp.Account.Localization; -using Volo.Abp.Account.Settings; -using Volo.Abp.Localization; -using Volo.Abp.Settings; - +using Volo.Abp.Account.Localization; +using Volo.Abp.Account.Settings; +using Volo.Abp.Localization; +using Volo.Abp.Settings; + namespace LY.MicroService.BackendAdmin.Settings; // 后台管理项目不引用 Volo.Abp.Account.Application模块,只能自建一个配置 @@ -17,10 +17,10 @@ public class AccountSettingDefinitionProvider : SettingDefinitionProvider L("DisplayName:Abp.Account.IsSelfRegistrationEnabled"), L("Description:Abp.Account.IsSelfRegistrationEnabled"), isVisibleToClients: true) - .WithProviders( - DefaultValueSettingValueProvider.ProviderName, - ConfigurationSettingValueProvider.ProviderName, - GlobalSettingValueProvider.ProviderName, + .WithProviders( + DefaultValueSettingValueProvider.ProviderName, + ConfigurationSettingValueProvider.ProviderName, + GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName) ); @@ -31,10 +31,10 @@ public class AccountSettingDefinitionProvider : SettingDefinitionProvider L("DisplayName:Abp.Account.EnableLocalLogin"), L("Description:Abp.Account.EnableLocalLogin"), isVisibleToClients: true) - .WithProviders( - DefaultValueSettingValueProvider.ProviderName, - ConfigurationSettingValueProvider.ProviderName, - GlobalSettingValueProvider.ProviderName, + .WithProviders( + DefaultValueSettingValueProvider.ProviderName, + ConfigurationSettingValueProvider.ProviderName, + GlobalSettingValueProvider.ProviderName, TenantSettingValueProvider.ProviderName) ); } diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj index 477498688..18d803cc2 100644 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/LY.MicroService.RealtimeMessage.HttpApi.Host.csproj @@ -69,6 +69,8 @@ + + diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs index 3fd317deb..54ad376b7 100644 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs @@ -37,6 +37,8 @@ using LINGYUN.Abp.Serilog.Enrichers.UniqueId; using LINGYUN.Abp.TaskManagement.EntityFrameworkCore; using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; using LINGYUN.Abp.TextTemplating.Scriban; +using LINGYUN.Abp.WeChat.Official.Handlers; +using LINGYUN.Abp.WeChat.Work.Handlers; using LY.MicroService.RealtimeMessage.EntityFrameworkCore; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; @@ -98,6 +100,8 @@ namespace LY.MicroService.RealtimeMessage; typeof(AbpNotificationsWeChatMiniProgramModule), typeof(AbpNotificationsWeChatWorkModule), typeof(AbpNotificationsExceptionHandlingModule), + typeof(AbpWeChatWorkHandlersModule), + typeof(AbpWeChatOfficialHandlersModule), typeof(AbpIdentityNotificationsModule), // 重写模板引擎支持外部本地化 diff --git a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/appsettings.Development.json b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/appsettings.Development.json index 3a5d61128..a65910887 100644 --- a/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/appsettings.Development.json +++ b/aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/appsettings.Development.json @@ -30,7 +30,8 @@ "AbpSaas": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456", "AbpFeatureManagement": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456", "AbpPermissionManagement": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456", - "AbpSettingManagement": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456" + "AbpSettingManagement": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456", + "AbpLocalizationManagement": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456" }, "DistributedLock": { "IsEnabled": true, diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Controllers/HomeController.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Controllers/HomeController.cs new file mode 100644 index 000000000..370e7fda3 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Controllers/HomeController.cs @@ -0,0 +1,12 @@ +using Microsoft.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc; + +namespace LY.MicroService.WechatManagement.Controllers; + +public class HomeController : AbpControllerBase +{ + public IActionResult Index() + { + return Redirect("/swagger/index.html"); + } +} diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Dockerfile b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Dockerfile new file mode 100644 index 000000000..2136f69a2 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Dockerfile @@ -0,0 +1,15 @@ +FROM mcr.microsoft.com/dotnet/aspnet:8.0 +LABEL maintainer="colin.in@foxmail.com" +WORKDIR /app + +COPY . /app + +EXPOSE 80/tcp +VOLUME [ "./app/Logs" ] +VOLUME [ "./app/Modules" ] + + +RUN apt update +RUN apt install wget -y + +ENTRYPOINT ["dotnet", "LY.MicroService.WechatManagement.HttpApi.Host.dll"] diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj new file mode 100644 index 000000000..e316c49f6 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj @@ -0,0 +1,76 @@ + + + + + + net8.0 + LY.MicroService.WechatManagement + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Program.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Program.cs new file mode 100644 index 000000000..50ac30889 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Program.cs @@ -0,0 +1,66 @@ +using LY.MicroService.WechatManagement; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Serilog; +using System; +using System.IO; +using Volo.Abp.IO; +using Volo.Abp.Modularity.PlugIns; + +try +{ + Console.Title = "Web.Host"; + Log.Information("Starting web host."); + + var builder = WebApplication.CreateBuilder(args); + builder.Host.AddAppSettingsSecretsJson() + .UseAutofac() + .ConfigureAppConfiguration((context, config) => + { + var configuration = config.Build(); + var agileConfigEnabled = configuration["AgileConfig:IsEnabled"]; + if (agileConfigEnabled.IsNullOrEmpty() || bool.Parse(agileConfigEnabled)) + { + config.AddAgileConfig(new AgileConfig.Client.ConfigClient(configuration)); + } + }) + .UseSerilog((context, provider, config) => + { + config.ReadFrom.Configuration(context.Configuration); + }); + await builder.AddApplicationAsync(options => + { + WechatManagementHttpApiHostModule.ApplicationName = Environment.GetEnvironmentVariable("APPLICATION_NAME") + ?? WechatManagementHttpApiHostModule.ApplicationName; + options.ApplicationName = WechatManagementHttpApiHostModule.ApplicationName; + // ӻȡû, + options.Configuration.UserSecretsId = Environment.GetEnvironmentVariable("APPLICATION_USER_SECRETS_ID"); + // ûָû, Ŀȡ + options.Configuration.UserSecretsAssembly = typeof(WechatManagementHttpApiHostModule).Assembly; + // Modules Ŀ¼ļΪ + // ȡʾĿģ飬Ϊͨʽ + var pluginFolder = Path.Combine( + Directory.GetCurrentDirectory(), "Modules"); + DirectoryHelper.CreateIfNotExists(pluginFolder); + options.PlugInSources.AddFolder( + pluginFolder, + SearchOption.AllDirectories); + }); + var app = builder.Build(); + await app.InitializeApplicationAsync(); + await app.RunAsync(); + return 0; +} +catch (Exception ex) +{ + Log.Fatal(ex, "Host terminated unexpectedly!"); + Console.WriteLine("Host terminated unexpectedly!"); + Console.WriteLine(ex.ToString()); + return 1; +} +finally +{ + Log.CloseAndFlush(); +} diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Properties/launchSettings.json b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Properties/launchSettings.json new file mode 100644 index 000000000..6c2fa41e4 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Properties/launchSettings.json @@ -0,0 +1,22 @@ +{ + "$schema": "http://json.schemastore.org/launchsettings.json", + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:16267", + "sslPort": 0 + } + }, + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://127.0.0.1:30060", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/TenantHeaderParamter.cs new file mode 100644 index 000000000..f03ee66c3 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/TenantHeaderParamter.cs @@ -0,0 +1,36 @@ +using Microsoft.Extensions.Options; +using Microsoft.OpenApi.Models; +using Swashbuckle.AspNetCore.SwaggerGen; +using System.Collections.Generic; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; + +namespace LY.MicroService.WechatManagement; + +public class TenantHeaderParamter : IOperationFilter +{ + private readonly AbpMultiTenancyOptions _multiTenancyOptions; + private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; + public TenantHeaderParamter( + IOptions multiTenancyOptions, + IOptions aspNetCoreMultiTenancyOptions) + { + _multiTenancyOptions = multiTenancyOptions.Value; + _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; + } + + public void Apply(OpenApiOperation operation, OperationFilterContext context) + { + if (_multiTenancyOptions.IsEnabled) + { + operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters.Add(new OpenApiParameter + { + Name = _aspNetCoreMultiTenancyOptions.TenantKey, + In = ParameterLocation.Header, + Description = "Tenant Id/Name in http header", + Required = false + }); + } + } +} diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.Configure.cs new file mode 100644 index 000000000..1b5a86a6e --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.Configure.cs @@ -0,0 +1,450 @@ +using DotNetCore.CAP; +using LINGYUN.Abp.ExceptionHandling; +using LINGYUN.Abp.ExceptionHandling.Emailing; +using LINGYUN.Abp.Localization.CultureMap; +using LINGYUN.Abp.Serilog.Enrichers.Application; +using LINGYUN.Abp.Serilog.Enrichers.UniqueId; +using LINGYUN.Abp.WeChat.Common.Localization; +using LINGYUN.Abp.WeChat.Work.Localization; +using LINGYUN.Abp.Wrapper; +using Medallion.Threading; +using Medallion.Threading.Redis; +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.DataProtection; +using Microsoft.AspNetCore.Routing; +using Microsoft.Extensions.Caching.StackExchangeRedis; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.IdentityModel.Logging; +using Microsoft.OpenApi.Models; +using OpenTelemetry.Metrics; +using OpenTelemetry.Resources; +using OpenTelemetry.Trace; +using StackExchange.Redis; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.Encodings.Web; +using System.Text.Unicode; +using Volo.Abp; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Auditing; +using Volo.Abp.Caching; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.FeatureManagement; +using Volo.Abp.GlobalFeatures; +using Volo.Abp.Http.Client; +using Volo.Abp.Json; +using Volo.Abp.Json.SystemTextJson; +using Volo.Abp.Localization; +using Volo.Abp.MultiTenancy; +using Volo.Abp.PermissionManagement; +using Volo.Abp.Security.Claims; +using Volo.Abp.SettingManagement; +using Volo.Abp.Threading; +using Volo.Abp.Timing; +using Volo.Abp.VirtualFileSystem; + +namespace LY.MicroService.WechatManagement; + +public partial class WechatManagementHttpApiHostModule +{ + public static string ApplicationName { get; set; } = "WechatService"; + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + private void PreConfigureFeature() + { + OneTimeRunner.Run(() => + { + GlobalFeatureManager.Instance.Modules.Editions().EnableAll(); + }); + } + + private void PreForwardedHeaders() + { + } + + private void PreConfigureApp(IConfiguration configuration) + { + AbpSerilogEnrichersConsts.ApplicationName = ApplicationName; + + PreConfigure(options => + { + // 以开放端口区别 + options.SnowflakeIdOptions.WorkerId = 11; + options.SnowflakeIdOptions.WorkerIdBits = 5; + options.SnowflakeIdOptions.DatacenterId = 1; + }); + + if (configuration.GetValue("App:ShowPii")) + { + IdentityModelEventSource.ShowPII = true; + } + } + + private void PreConfigureCAP(IConfiguration configuration) + { + PreConfigure(options => + { + options + .UseMySql(sqlOptions => + { + configuration.GetSection("CAP:MySql").Bind(sqlOptions); + }) + .UseRabbitMQ(rabbitMQOptions => + { + configuration.GetSection("CAP:RabbitMQ").Bind(rabbitMQOptions); + }) + .UseDashboard(); + }); + } + + private void ConfigureDbContext() + { + // 配置Ef + Configure(options => + { + options.UseMySQL(); + //options.Configure(cfg => + //{ + // cfg.UseMySQL(); + // cfg.DbContextOptions.EnableSensitiveDataLogging(); + //}); + }); + } + + private void ConfigureJsonSerializer(IConfiguration configuration) + { + // 统一时间日期格式 + Configure(options => + { + var jsonConfiguration = configuration.GetSection("Json"); + if (jsonConfiguration.Exists()) + { + jsonConfiguration.Bind(options); + } + }); + // 中文序列化的编码问题 + Configure(options => + { + options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All); + }); + } + + private void ConfigureDistributedLock(IServiceCollection services, IConfiguration configuration) + { + var distributedLockEnabled = configuration["DistributedLock:IsEnabled"]; + if (distributedLockEnabled.IsNullOrEmpty() || bool.Parse(distributedLockEnabled)) + { + var redis = ConnectionMultiplexer.Connect(configuration["DistributedLock:Redis:Configuration"]); + services.AddSingleton(_ => new RedisDistributedSynchronizationProvider(redis.GetDatabase())); + } + } + + private void ConfigureOpenTelemetry(IServiceCollection services, IConfiguration configuration) + { + var openTelemetryEnabled = configuration["OpenTelemetry:IsEnabled"]; + if (openTelemetryEnabled.IsNullOrEmpty() || bool.Parse(openTelemetryEnabled)) + { + services.AddOpenTelemetry() + .ConfigureResource(resource => + { + resource.AddService(ApplicationName); + }) + .WithTracing(tracing => + { + tracing.AddHttpClientInstrumentation(); + tracing.AddAspNetCoreInstrumentation(); + tracing.AddCapInstrumentation(); + tracing.AddEntityFrameworkCoreInstrumentation(); + tracing.AddSource(ApplicationName); + + var tracingOtlpEndpoint = configuration["OpenTelemetry:Otlp:Endpoint"]; + if (!tracingOtlpEndpoint.IsNullOrWhiteSpace()) + { + tracing.AddOtlpExporter(otlpOptions => + { + otlpOptions.Endpoint = new Uri(tracingOtlpEndpoint); + }); + return; + } + + var zipkinEndpoint = configuration["OpenTelemetry:ZipKin:Endpoint"]; + if (!zipkinEndpoint.IsNullOrWhiteSpace()) + { + tracing.AddZipkinExporter(zipKinOptions => + { + zipKinOptions.Endpoint = new Uri(zipkinEndpoint); + }); + return; + } + }) + .WithMetrics(metrics => + { + metrics.AddRuntimeInstrumentation(); + metrics.AddHttpClientInstrumentation(); + metrics.AddAspNetCoreInstrumentation(); + }); + } + } + + private void ConfigureExceptionHandling() + { + // 自定义需要处理的异常 + Configure(options => + { + // 加入需要处理的异常类型 + options.Handlers.Add(); + options.Handlers.Add(); + options.Handlers.Add(); + options.Handlers.Add(); + options.Handlers.Add(); + options.Handlers.Add(); + }); + // 自定义需要发送邮件通知的异常类型 + Configure(options => + { + // 是否发送堆栈信息 + options.SendStackTrace = true; + // 未指定异常接收者的默认接收邮件 + // 指定自己的邮件地址 + }); + } + + private void ConfigureAuditing(IConfiguration configuration) + { + Configure(options => + { + options.ApplicationName = ApplicationName; + // 是否启用实体变更记录 + var allEntitiesSelectorIsEnabled = configuration["Auditing:AllEntitiesSelector"]; + if (allEntitiesSelectorIsEnabled.IsNullOrWhiteSpace() || + (bool.TryParse(allEntitiesSelectorIsEnabled, out var enabled) && enabled)) + { + options.EntityHistorySelectors.AddAllEntities(); + } + }); + } + private void ConfigureTiming(IConfiguration configuration) + { + Configure(options => + { + configuration.GetSection("Clock").Bind(options); + }); + } + private void ConfigureCaching(IConfiguration configuration) + { + Configure(options => + { + configuration.GetSection("DistributedCache").Bind(options); + }); + + Configure(options => + { + var redisConfig = ConfigurationOptions.Parse(options.Configuration); + options.ConfigurationOptions = redisConfig; + options.InstanceName = configuration["Redis:InstanceName"]; + }); + } + + private void ConfigureMvc(IServiceCollection services, IConfiguration configuration) + { + Configure(options => + { + options.ExposeIntegrationServices = true; + }); + + Configure(options => + { + options.EndpointConfigureActions.Add((builder) => + { + builder.Endpoints.MapHealthChecks(configuration["App:HealthChecks"] ?? "/healthz"); + }); + }); + + services.AddHealthChecks(); + } + + private void ConfigureVirtualFileSystem() + { + Configure(options => + { + options.FileSets.AddEmbedded("LY.MicroService.WechatManagement"); + }); + } + + private void ConfigureMultiTenancy(IConfiguration configuration) + { + // 多租户 + Configure(options => + { + options.IsEnabled = true; + }); + + var tenantResolveCfg = configuration.GetSection("App:Domains"); + if (tenantResolveCfg.Exists()) + { + Configure(options => + { + var domains = tenantResolveCfg.Get(); + foreach (var domain in domains) + { + options.AddDomainTenantResolver(domain); + } + }); + } + } + + private void ConfigureIdentity(IConfiguration configuration) + { + Configure(options => + { + options.IsDynamicClaimsEnabled = true; + options.RemoteRefreshUrl = configuration["App:RefreshClaimsUrl"] + options.RemoteRefreshUrl; + }); + } + + private void ConfigureSwagger(IServiceCollection services) + { + // Swagger + services.AddSwaggerGen( + options => + { + options.SwaggerDoc("v1", new OpenApiInfo + { + Title = "WechatManagement API", Version = "v1", + Contact = new OpenApiContact + { + Name = "colin", + Email = "colin.in@foxmail.com", + Url = new Uri("https://github.com/colinin") + }, + License = new OpenApiLicense + { + Name = "MIT", + Url = new Uri("https://github.com/colinin/abp-next-admin/blob/master/LICENSE") + } + }); + options.DocInclusionPredicate((docName, description) => true); + options.CustomSchemaIds(type => type.FullName); + options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme + { + Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", + Name = "Authorization", + In = ParameterLocation.Header, + Scheme = "bearer", + Type = SecuritySchemeType.Http, + BearerFormat = "JWT" + }); + options.AddSecurityRequirement(new OpenApiSecurityRequirement + { + { + new OpenApiSecurityScheme + { + Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } + }, + new string[] { } + } + }); + options.OperationFilter(); + }); + } + + private void ConfigureFeatureManagement() + { + Configure(options => + { + options.IsDynamicFeatureStoreEnabled = true; + }); + } + + private void ConfigurePermissionManagement() + { + Configure(options => + { + options.IsDynamicPermissionStoreEnabled = true; + }); + } + + private void ConfigureSettingManagement() + { + Configure(options => + { + options.IsDynamicSettingStoreEnabled = true; + }); + } + + private void ConfigureLocalization() + { + // 支持本地化语言类型 + Configure(options => + { + options.Languages.Add(new LanguageInfo("en", "en", "English")); + options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); + + options.UsePersistence(); + options.UsePersistence(); + }); + + + Configure(options => + { + var zhHansCultureMapInfo = new CultureMapInfo + { + TargetCulture = "zh-Hans", + SourceCultures = new string[] { "zh", "zh_CN", "zh-CN" } + }; + + options.CulturesMaps.Add(zhHansCultureMapInfo); + options.UiCulturesMaps.Add(zhHansCultureMapInfo); + }); + } + + private void ConfigureSecurity(IServiceCollection services, IConfiguration configuration, bool isDevelopment = false) + { + services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddJwtBearer(options => + { + configuration.GetSection("AuthServer").Bind(options); + }); + + if (!isDevelopment) + { + var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); + services + .AddDataProtection() + .SetApplicationName("LINGYUN.Abp.Application") + .PersistKeysToStackExchangeRedis(redis, "LINGYUN.Abp.Application:DataProtection:Protection-Keys"); + } + } + + private void ConfigureWrapper() + { + Configure(options => + { + options.IsEnabled = true; + }); + } + + private void PreConfigureWrapper() + { + //PreConfigure(options => + //{ + // options.ProxyRequestActions.Add( + // (appid, httprequestmessage) => + // { + // httprequestmessage.Headers.TryAddWithoutValidation(AbpHttpWrapConsts.AbpDontWrapResult, "true"); + // }); + //}); + // 服务间调用不包装 + PreConfigure(options => + { + options.ProxyClientActions.Add( + (_, _, client) => + { + client.DefaultRequestHeaders.TryAddWithoutValidation(AbpHttpWrapConsts.AbpDontWrapResult, "true"); + }); + }); + } +} diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs new file mode 100644 index 000000000..b38c078ab --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs @@ -0,0 +1,143 @@ +using LINGYUN.Abp.AspNetCore.HttpOverrides; +using LINGYUN.Abp.AspNetCore.Mvc.Localization; +using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; +using LINGYUN.Abp.AuditLogging.Elasticsearch; +using LINGYUN.Abp.Authorization.OrganizationUnits; +using LINGYUN.Abp.Claims.Mapping; +using LINGYUN.Abp.EventBus.CAP; +using LINGYUN.Abp.ExceptionHandling.Emailing; +using LINGYUN.Abp.Http.Client.Wrapper; +using LINGYUN.Abp.Identity.Session.AspNetCore; +using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; +using LINGYUN.Abp.Saas.EntityFrameworkCore; +using LINGYUN.Abp.Serilog.Enrichers.Application; +using LINGYUN.Abp.Serilog.Enrichers.UniqueId; +using LINGYUN.Abp.WeChat.MiniProgram; +using LINGYUN.Abp.WeChat.Official; +using LINGYUN.Abp.WeChat.SettingManagement; +using LINGYUN.Abp.WeChat.Work; +using Microsoft.AspNetCore.Builder; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; +using Volo.Abp; +using Volo.Abp.AspNetCore.Authentication.JwtBearer; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.AspNetCore.Serilog; +using Volo.Abp.Autofac; +using Volo.Abp.Caching.StackExchangeRedis; +using Volo.Abp.DistributedLocking; +using Volo.Abp.EntityFrameworkCore.MySQL; +using Volo.Abp.FeatureManagement.EntityFrameworkCore; +using Volo.Abp.Http.Client.IdentityModel.Web; +using Volo.Abp.Modularity; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.Swashbuckle; + +namespace LY.MicroService.WechatManagement; + +[DependsOn( + typeof(AbpSerilogEnrichersApplicationModule), + typeof(AbpSerilogEnrichersUniqueIdModule), + typeof(AbpAuditLoggingElasticsearchModule), + typeof(AbpAspNetCoreSerilogModule), + typeof(AbpWeChatWorkApplicationModule), + typeof(AbpWeChatWorkHttpApiModule), + typeof(AbpWeChatOfficialApplicationModule), + typeof(AbpWeChatOfficialHttpApiModule), + typeof(AbpWeChatMiniProgramModule), + typeof(AbpWeChatSettingManagementModule), + typeof(AbpSaasEntityFrameworkCoreModule), + typeof(AbpFeatureManagementEntityFrameworkCoreModule), + typeof(AbpPermissionManagementEntityFrameworkCoreModule), + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpLocalizationManagementEntityFrameworkCoreModule), + typeof(AbpEntityFrameworkCoreMySQLModule), + typeof(AbpAspNetCoreAuthenticationJwtBearerModule), + typeof(AbpAuthorizationOrganizationUnitsModule), + typeof(AbpEmailingExceptionHandlingModule), + typeof(AbpCAPEventBusModule), + typeof(AbpHttpClientIdentityModelWebModule), + typeof(AbpAspNetCoreMultiTenancyModule), + typeof(AbpAspNetCoreMvcLocalizationModule), + typeof(AbpCachingStackExchangeRedisModule), + typeof(AbpDistributedLockingModule), + typeof(AbpSwashbuckleModule), + typeof(AbpHttpClientWrapperModule), + typeof(AbpClaimsMappingModule), + typeof(AbpAspNetCoreMvcWrapperModule), + typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpIdentitySessionAspNetCoreModule), + typeof(AbpAutofacModule) + )] +public partial class WechatManagementHttpApiHostModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + + PreConfigureWrapper(); + PreConfigureFeature(); + PreForwardedHeaders(); + PreConfigureApp(configuration); + PreConfigureCAP(configuration); + } + + public override void ConfigureServices(ServiceConfigurationContext context) + { + var hostingEnvironment = context.Services.GetHostingEnvironment(); + var configuration = context.Services.GetConfiguration(); + + ConfigureWrapper(); + ConfigureDbContext(); + ConfigureLocalization(); + ConfigureExceptionHandling(); + ConfigureVirtualFileSystem(); + ConfigureFeatureManagement(); + ConfigureSettingManagement(); + ConfigurePermissionManagement(); + ConfigureTiming(configuration); + ConfigureCaching(configuration); + ConfigureAuditing(configuration); + ConfigureIdentity(configuration); + ConfigureMultiTenancy(configuration); + ConfigureSwagger(context.Services); + ConfigureJsonSerializer(configuration); + ConfigureMvc(context.Services, configuration); + ConfigureOpenTelemetry(context.Services, configuration); + ConfigureDistributedLock(context.Services, configuration); + ConfigureSecurity(context.Services, configuration, hostingEnvironment.IsDevelopment()); + } + + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + var app = context.GetApplicationBuilder(); + var env = context.GetEnvironment(); + + app.UseForwardedHeaders(); + app.UseMapRequestLocalization(); + app.UseCorrelationId(); + app.UseStaticFiles(); + app.UseRouting(); + app.UseCors(); + app.UseAuthentication(); + app.UseJwtTokenMiddleware(); + app.UseAbpSession(); + app.UseDynamicClaims(); + app.UseMultiTenancy(); + app.UseAuthorization(); + app.UseSwagger(); + app.UseAbpSwaggerUI(options => + { + options.SwaggerEndpoint("/swagger/v1/swagger.json", "Support APP API"); + + var configuration = context.GetConfiguration(); + options.OAuthClientId(configuration["AuthServer:SwaggerClientId"]); + options.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]); + options.OAuthScopes("WechatManagement"); + }); + app.UseAuditing(); + app.UseAbpSerilogEnrichers(); + app.UseConfiguredEndpoints(); + } +} diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/appsettings.Development.json b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/appsettings.Development.json new file mode 100644 index 000000000..34dbeeeb6 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/appsettings.Development.json @@ -0,0 +1,133 @@ +{ + "AgileConfig": { + "IsEnabled": false, + "env": "DEV", + "appId": "LINGYUN.Abp.WechatManagement", + "secret": "1q2w3E*", + "nodes": "http://127.0.0.1:5000", + "name": "LINGYUN.Abp.WechatManagement", + "tag": "LINGYUN.Abp.WechatManagement" + }, + "App": { + "ShowPii": true, + "RefreshClaimsUrl": "http://127.0.0.1:30015" + }, + "Auditing": { + "AllEntitiesSelector": true + }, + "DistributedCache": { + "HideErrors": true, + "KeyPrefix": "LINGYUN.Abp.Application", + "GlobalCacheEntryOptions": { + "SlidingExpiration": "30:00:00", + "AbsoluteExpirationRelativeToNow": "60:00:00" + } + }, + "ConnectionStrings": { + "Default": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", + "AbpSaas": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", + "AbpFeatureManagement": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", + "AbpPermissionManagement": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", + "AbpSettingManagement": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", + "AbpLocalizationManagement": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None" + }, + "DistributedLock": { + "IsEnabled": true, + "Redis": { + "Configuration": "127.0.0.1,defaultDatabase=15" + } + }, + "OpenTelemetry": { + "IsEnabled": true, + "ZipKin": { + "Endpoint": "http://127.0.0.1:9411/api/v2/spans" + } + }, + "RemoteServices": {}, + "IdentityClients": { + "InternalServiceClient": { + "Authority": "http://127.0.0.1:44385", + "RequireHttps": false, + "GrantType": "client_credentials", + "Scope": "lingyun-abp-application", + "ClientId": "InternalServiceClient", + "ClientSecret": "1q2w3E*" + } + }, + "CAP": { + "EventBus": { + "DefaultGroupName": "WechatManagement", + "GroupNamePrefix": "Dev", + "Version": "v1", + "FailedRetryInterval": 300, + "FailedRetryCount": 10 + }, + "MySql": { + "TableNamePrefix": "wechat", + "ConnectionString": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None" + }, + "RabbitMQ": { + "HostName": "127.0.0.1", + "Port": 5672, + "UserName": "admin", + "Password": "admin", + "ExchangeName": "LINGYUN.Abp.Application", + "VirtualHost": "/" + } + }, + "Redis": { + "Configuration": "127.0.0.1,defaultDatabase=10", + "InstanceName": "LINGYUN.Abp.Application" + }, + "AuthServer": { + "Authority": "http://127.0.0.1:44385/", + "Audience": "lingyun-abp-application", + "MapInboundClaims": false, + "RequireHttpsMetadata": false, + "SwaggerClientId": "InternalServiceClient", + "SwaggerClientSecret": "1q2w3E*" + }, + "Logging": { + "Serilog": { + "Elasticsearch": { + "IndexFormat": "abp.dev.logging-{0:yyyy.MM.dd}" + } + } + }, + "AuditLogging": { + "Elasticsearch": { + "IndexPrefix": "abp.dev.auditing" + } + }, + "Elasticsearch": { + "NodeUris": "http://127.0.0.1:9200" + }, + "Serilog": { + "MinimumLevel": { + "Default": "Debug", + "Override": { + "System": "Warning", + "Microsoft": "Warning", + "DotNetCore": "Debug" + } + }, + "WriteTo": [ + { + "Name": "Console", + "Args": { + "restrictedToMinimumLevel": "Debug", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" + } + }, + { + "Name": "Elasticsearch", + "Args": { + "nodeUris": "http://127.0.0.1:9200", + "indexFormat": "abp.dev.logging-{0:yyyy.MM.dd}", + "autoRegisterTemplate": true, + "autoRegisterTemplateVersion": "ESv7" + } + } + ] + } +} diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/appsettings.json b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/appsettings.json new file mode 100644 index 000000000..b9c69ab64 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/appsettings.json @@ -0,0 +1,88 @@ +{ + "Clock": { + "Kind": "Local" + }, + "Forwarded": { + "ForwardedHeaders": "XForwardedFor,XForwardedProto" + }, + "StringEncryption": { + "DefaultPassPhrase": "s46c5q55nxpeS8Ra", + "InitVectorBytes": "s83ng0abvd02js84", + "DefaultSalt": "sf&5)s3#" + }, + "Json": { + "OutputDateTimeFormat": "yyyy-MM-dd HH:mm:ss", + "InputDateTimeFormats": [ + "yyyy-MM-dd HH:mm:ss", + "yyyy-MM-ddTHH:mm:ss" + ] + }, + "AllowedHosts": "*", + "Serilog": { + "MinimumLevel": { + "Default": "Debug", + "Override": { + "Microsoft.EntityFrameworkCore": "Debug", + "System": "Information", + "Microsoft": "Information" + } + }, + "Enrich": [ "FromLogContext", "WithProcessId", "WithThreadId", "WithEnvironmentName", "WithMachineName", "WithApplicationName", "WithUniqueId" ], + "WriteTo": [ + { + "Name": "Console", + "Args": { + "initialMinimumLevel": "Verbose", + "standardErrorFromLevel": "Verbose", + "restrictedToMinimumLevel": "Verbose", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" + } + }, + { + "Name": "File", + "Args": { + "path": "Logs/Debug-.log", + "restrictedToMinimumLevel": "Debug", + "rollingInterval": "Day", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" + } + }, + { + "Name": "File", + "Args": { + "path": "Logs/Info-.log", + "restrictedToMinimumLevel": "Information", + "rollingInterval": "Day", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" + } + }, + { + "Name": "File", + "Args": { + "path": "Logs/Warn-.log", + "restrictedToMinimumLevel": "Warning", + "rollingInterval": "Day", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" + } + }, + { + "Name": "File", + "Args": { + "path": "Logs/Error-.log", + "restrictedToMinimumLevel": "Error", + "rollingInterval": "Day", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" + } + }, + { + "Name": "File", + "Args": { + "path": "Logs/Fatal-.log", + "restrictedToMinimumLevel": "Fatal", + "rollingInterval": "Day", + "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" + } + } + ] + } +} diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/dapr.sh b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/dapr.sh new file mode 100644 index 000000000..9f8d38279 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/dapr.sh @@ -0,0 +1 @@ +dapr run --app-id WebhooksManagement --app-port 57264 -H 30060 -- dotnet run --no-build \ No newline at end of file diff --git a/build/build-aspnetcore-common.ps1 b/build/build-aspnetcore-common.ps1 index 6e9515e6a..ab2eac711 100644 --- a/build/build-aspnetcore-common.ps1 +++ b/build/build-aspnetcore-common.ps1 @@ -16,6 +16,7 @@ $serviceArray += [PsObject]@{ Path = $rootFolder + "/../aspnet-core/services/LY. $serviceArray += [PsObject]@{ Path = $rootFolder + "/../aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/"; Service = "task-management" } $serviceArray += [PsObject]@{ Path = $rootFolder + "/../aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/"; Service = "webhooks" } $serviceArray += [PsObject]@{ Path = $rootFolder + "/../aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/"; Service = "workflow" } +$serviceArray += [PsObject]@{ Path = $rootFolder + "/../aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/"; Service = "wechat" } $serviceArray += [PsObject]@{ Path = $rootFolder + "/../gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/src/LINGYUN.MicroService.Internal.Gateway/"; Service = "internal-apigateway" } [PsObject[]]$solutionArray = @() @@ -25,6 +26,7 @@ $solutionArray += [PsObject]@{ File = $rootFolder + "/../aspnet-core/LINGYUN.Mic $solutionArray += [PsObject]@{ File = $rootFolder + "/../aspnet-core/LINGYUN.MicroService.WebhooksManagement.sln" } $solutionArray += [PsObject]@{ File = $rootFolder + "/../aspnet-core/LINGYUN.MicroService.Workflow.sln" } $solutionArray += [PsObject]@{ File = $rootFolder + "/../aspnet-core/LINGYUN.MicroService.SingleProject.sln" } +$solutionArray += [PsObject]@{ File = $rootFolder + "/../aspnet-core/LINGYUN.MicroService.WechatManagement.sln" } $solutionArray += [PsObject]@{ File = $rootFolder + "/../gateways/internal/LINGYUN.MicroService.Internal.ApiGateway/LINGYUN.MicroService.Internal.Gateway.sln" } [PsObject[]]$migrationArray = @() diff --git a/docker-compose.override.agile.yml b/docker-compose.override.agile.yml index 2e82dd227..1d2e6daae 100644 --- a/docker-compose.override.agile.yml +++ b/docker-compose.override.agile.yml @@ -120,6 +120,18 @@ services: depends_on: - agile-config + wechat-api: + environment: + - AgileConfig__IsEnabled=true + - AgileConfig__env=DEV + - AgileConfig__appId=LINGYUN.Abp.Wechat + - AgileConfig__secret=1q2w3E* + - AgileConfig__nodes=http://agile-config:5000 + - AgileConfig__name=Wechat + - AgileConfig__tag=Wechat + depends_on: + - agile-config + internal-apigateway: environment: - AgileConfig__IsEnabled=true diff --git a/docker-compose.override.configuration.yml b/docker-compose.override.configuration.yml index b01f5a3d8..9d3decd46 100644 --- a/docker-compose.override.configuration.yml +++ b/docker-compose.override.configuration.yml @@ -508,6 +508,68 @@ services: - AuthServer__MapInboundClaims=false - AuthServer__RequireHttpsMetadata=false + wechat-api: + environment: + - AgileConfig__IsEnabled=false + - Auditing__AllEntitiesSelector=true + - App__CorsOrigins=http://localhost:3100,http://localhost:30000,http://apigateway:30000 + - ConnectionStrings__Default=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpAuditLogging=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpOpenIddict=Server=host.docker.internal;Database=IdentityServer-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpIdentity=Server=host.docker.internal;Database=IdentityServer-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpIdentityServer=Server=host.docker.internal;Database=IdentityServer-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpSaas=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpTenantManagement=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpFeatureManagement=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpSettingManagement=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpPermissionManagement=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpLocalizationManagement=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__AbpTextTemplating=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__TaskManagement=Server=host.docker.internal;Database=Platform-V70;User Id=root;Password=123456 + - ConnectionStrings__Workflow=Server=host.docker.internal;Database=Workflow-V70;User Id=root;Password=123456 + - ConnectionStrings__Notifications=Server=host.docker.internal;Database=Messages-V70;User Id=root;Password=123456 + - ConnectionStrings__MessageService=Server=host.docker.internal;Database=Messages-V70;User Id=root;Password=123456 + - Encryption__PassPhrase=s46c5q55nxpeS8Ra + - Encryption__InitVector=s83ng0abvd02js84 + - Encryption__Salt=sf&5)s3# + - Elsa__Rebus__RabbitMQ__Connection=amqp://admin:123456@host.docker.internal:5672/ + - CAP__EventBus__DefaultGroup=wechat + - CAP__EventBus__Version=v1 + - CAP__EventBus__FailedRetryInterval=300 + - CAP__EventBus__FailedRetryCount=10 + - CAP__RabbitMQ__HostName=host.docker.internal + - CAP__RabbitMQ__Port=5672 + - CAP__RabbitMQ__UserName=admin + - CAP__RabbitMQ__Password=123456 + - CAP__RabbitMQ__ExchangeName=LINGYUN.Abp.Application + - CAP__RabbitMQ__VirtualHost=/ + - CAP__MySql__TableNamePrefix=wechat + - CAP__MySql__ConnectionString=Server=host.docker.internal;Database=Platform-v70;User Id=root;Password=123456 + - DistributedCache__HideErrors=true + - DistributedCache__KeyPrefix=LINGYUN.Abp.Application + - DistributedCache__GlobalCacheEntryOptions__SlidingExpiration=30:00:00 + - DistributedCache__GlobalCacheEntryOptions__AbsoluteExpirationRelativeToNow=60:00:00 + - DistributedLock__IsEnabled=true + - DistributedLock__Redis__Configuration=host.docker.internal,defaultDatabase=13 + - Elasticsearch__NodeUris=http://host.docker.internal:9200 + - Serilog__WriteTo__0__Name=Console + - Serilog__WriteTo__1__Name=Elasticsearch + - Serilog__WriteTo__1__Args__nodeUris=http://host.docker.internal:9200 + - Redis__Configuration=host.docker.internal,defaultDatabase=10 + - Redis__InstanceName=LINGYUN.Abp.Application + - RemoteServices__AbpOssManagement__BaseUrl=http://apigateway:30000 + - RemoteServices__AbpOssManagement__IdentityClient=InternalServiceClient + - RemoteServices__AbpOssManagement__UseCurrentAccessToken=false + - IdentityClients__InternalServiceClient__Authority=http://auth-server:44385/ + - IdentityClients__InternalServiceClient__GrantType=client_credentials + - IdentityClients__InternalServiceClient__Scope=lingyun-abp-application + - IdentityClients__InternalServiceClient__ClientId=InternalServiceClient + - IdentityClients__InternalServiceClient__ClientSecret=1q2w3e* + - IdentityClients__InternalServiceClient__RequireHttps=false + - AuthServer__Authority=http://auth-server:44385 + - AuthServer__Audience=lingyun-abp-application + - AuthServer__MapInboundClaims=false + - AuthServer__RequireHttpsMetadata=false internal-apigateway: environment: diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 00875d317..73706b66d 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -90,6 +90,16 @@ services: depends_on: - sts-server + wechat-api: + build: + context: ./aspnet-core/services/Publish/wechat + volumes: + - ./deploy/framework/wechat/logs:/app/Logs + - ./deploy/framework/wechat/modules:/app/Modules + restart: always + depends_on: + - sts-server + internal-apigateway: build: context: ./aspnet-core/services/Publish/internal-apigateway diff --git a/docker-compose.yml b/docker-compose.yml index 9ad408627..8d554df59 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -161,6 +161,26 @@ services: - "host.docker.internal:host-gateway" - "auth-server:host-gateway" + wechat-api: + hostname: wechat-api + container_name: wechat-api + environment: + - ASPNETCORE_ENVIRONMENT=Production + - ASPNETCORE_HTTP_PORTS=80 + - TZ=Asia/Shanghai + ports: + - "30060:80" + networks: + - abp-next-admin + healthcheck: + test: ["CMD-SHELL", "wget --spider http://localhost/healthz || exit"] + interval: 10s + timeout: 5s + retries: 5 + extra_hosts: + - "host.docker.internal:host-gateway" + - "auth-server:host-gateway" + sts-server: hostname: auth-server container_name: auth-server @@ -199,6 +219,7 @@ services: - "localization-api:host-gateway" - "workflow-api:host-gateway" - "webhooks-api:host-gateway" + - "wechat-api:host-gateway" - "messages-api:host-gateway" - "platform-api:host-gateway" - "tasks-api:host-gateway"