Browse Source

feat(wechat): Add WeChat management project

pull/981/head
colin 1 year ago
parent
commit
6bc5c346b0
  1. 14
      aspnet-core/LINGYUN.MicroService.All.sln
  2. 337
      aspnet-core/LINGYUN.MicroService.WechatManagement.sln
  3. 3
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/AbpWeChatMessageHandleOptions.cs
  4. 3
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandleContributor.cs
  5. 3
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/IMessageHandler.cs
  6. 3
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandleContext.cs
  7. 3
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Common/LINGYUN/Abp/WeChat/Common/Messages/Handlers/MessageHandler.cs
  8. 3
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/FodyWeavers.xml
  9. 30
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/FodyWeavers.xsd
  10. 20
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN.Abp.WeChat.Official.Handlers.csproj
  11. 10
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/AbpWeChatOfficialHandlersModule.cs
  12. 6
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/Messages/WeChatOfficialEventEventHandler.cs
  13. 6
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN/Abp/WeChat/Official/Handlers/Messages/WeChatOfficialMessageEventHandler.cs
  14. 15
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Account/ParametricQrCodeController.cs
  15. 19
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.HttpApi/LINGYUN/Abp/WeChat/Official/Message/WeChatMessageController.cs
  16. 2
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/AbpWeChatOfficialModule.cs
  17. 2
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.SettingManagement/LINGYUN/Abp/WeChat/SettingManagement/WeChatSettingController.cs
  18. 3
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/FodyWeavers.xml
  19. 30
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/FodyWeavers.xsd
  20. 20
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN.Abp.WeChat.Work.Handlers.csproj
  21. 11
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/AbpWeChatWorkHandlersModule.cs
  22. 3
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/Messages/WeChatWorkEventEventHandler.cs
  23. 3
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN/Abp/WeChat/Work/Handlers/Messages/WeChatWorkMessageEventHandler.cs
  24. 56
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Authorize/WeChatWorkAuthorizeController.cs
  25. 22
      aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.HttpApi/LINGYUN/Abp/WeChat/Work/Message/WeChatWorkMessageController.cs
  26. 3
      aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/appsettings.Development.json
  27. 12
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Controllers/HomeController.cs
  28. 15
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Dockerfile
  29. 76
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj
  30. 66
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Program.cs
  31. 22
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/Properties/launchSettings.json
  32. 36
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/TenantHeaderParamter.cs
  33. 450
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.Configure.cs
  34. 143
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs
  35. 133
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/appsettings.Development.json
  36. 88
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/appsettings.json
  37. 1
      aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/dapr.sh
  38. 2
      build/build-aspnetcore-common.ps1
  39. 12
      docker-compose.override.agile.yml
  40. 62
      docker-compose.override.configuration.yml
  41. 10
      docker-compose.override.yml
  42. 21
      docker-compose.yml

14
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}

337
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

3
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;

3
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<TMessage> where TMessage : WeChatGeneralMessage

3
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

3
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<TMessage> where TMessage : WeChatMessage

3
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;

3
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/FodyWeavers.xml

@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>

30
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/FodyWeavers.xsd

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

20
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official.Handlers/LINGYUN.Abp.WeChat.Official.Handlers.csproj

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0</TargetFrameworks>
<AssemblyName>LINGYUN.Abp.WeChat.Official.Handlers</AssemblyName>
<PackageId>LINGYUN.Abp.WeChat.Official.Handlers</PackageId>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj" />
</ItemGroup>
</Project>

10
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
{
}

6
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Messages/Handlers/WeChatOfficialEventEventHandler.cs → 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<WeChatOfficialEventMessageEto<CustomMenuEvent>>,
IDistributedEventHandler<WeChatOfficialEventMessageEto<UserSubscribeEvent>>,

6
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Official/LINGYUN/Abp/WeChat/Official/Messages/Handlers/WeChatOfficialMessageEventHandler.cs → 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<WeChatOfficialGeneralMessageEto<TextMessage>>,
IDistributedEventHandler<WeChatOfficialGeneralMessageEto<LinkMessage>>,

15
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;
/// <summary>
/// 带参数二维码接口
/// </summary>
/// <remarks>
/// 详情见: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html
/// </remarks>
[Controller]
[RemoteService(Name = AbpWeChatOfficialRemoteServiceConsts.RemoteServiceName)]
[Area(AbpWeChatOfficialRemoteServiceConsts.ModuleName)]
@ -18,7 +24,14 @@ public class ParametricQrCodeController : AbpControllerBase, IParametricQrCodeAp
{
_service = service;
}
/// <summary>
/// 生成带参数的二维码
/// </summary>
/// <remarks>
/// 详情见: https://developers.weixin.qq.com/doc/offiaccount/Account_Management/Generating_a_Parametric_QR_Code.html
/// </remarks>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
[Route("generate")]
public virtual Task<IRemoteStreamContent> GenerateAsync(ParametricQrCodeGenerateInput input)

19
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;
/// <summary>
/// 微信公众号消息处理接口
/// </summary>
/// <remarks>
/// 详情见微信公众号文档: <seealso cref="https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Access_Overview.html"/>
/// </remarks>
[Controller]
[RemoteService(Name = AbpWeChatOfficialRemoteServiceConsts.RemoteServiceName)]
[Area(AbpWeChatOfficialRemoteServiceConsts.ModuleName)]
@ -19,13 +25,24 @@ public class WeChatMessageController : AbpControllerBase, IWeChatMessageAppServi
{
_service = service;
}
/// <summary>
/// 微信公众号服务器消息验证回调接口<br />
/// 验证微信公众号服务器发送的消息有效性
/// </summary>
/// <param name="input">微信公众号服务器传递的验证消息参数</param>
/// <returns></returns>
[HttpGet]
public virtual Task<string> Handle([FromQuery] MessageValidationInput input)
{
return _service.Handle(input);
}
/// <summary>
/// 微信公众号服务器业务消息回调接口<br />
/// 处理微信公众号服务器发送的业务消息
/// </summary>
/// <param name="input">微信公众号服务器传递的消息参数</param>
/// <returns></returns>
[HttpPost]
public async virtual Task<string> Handle([FromQuery] MessageHandleInput input)
{

2
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;

2
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; }

3
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/FodyWeavers.xml

@ -0,0 +1,3 @@
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
<ConfigureAwait ContinueOnCapturedContext="false" />
</Weavers>

30
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/FodyWeavers.xsd

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!-- This file was generated by Fody. Manual changes to this file will be lost when your project is rebuilt. -->
<xs:element name="Weavers">
<xs:complexType>
<xs:all>
<xs:element name="ConfigureAwait" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:attribute name="ContinueOnCapturedContext" type="xs:boolean" />
</xs:complexType>
</xs:element>
</xs:all>
<xs:attribute name="VerifyAssembly" type="xs:boolean">
<xs:annotation>
<xs:documentation>'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="VerifyIgnoreCodes" type="xs:string">
<xs:annotation>
<xs:documentation>A comma-separated list of error codes that can be safely ignored in assembly verification.</xs:documentation>
</xs:annotation>
</xs:attribute>
<xs:attribute name="GenerateXsd" type="xs:boolean">
<xs:annotation>
<xs:documentation>'false' to turn off automatic generation of the XML Schema file.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:schema>

20
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Handlers/LINGYUN.Abp.WeChat.Work.Handlers.csproj

@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\..\configureawait.props" />
<Import Project="..\..\..\..\common.props" />
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netstandard2.1;net8.0</TargetFrameworks>
<AssemblyName>LINGYUN.Abp.WeChat.Work.Handlers</AssemblyName>
<PackageId>LINGYUN.Abp.WeChat.Work.Handlers</PackageId>
<GenerateAssemblyConfigurationAttribute>false</GenerateAssemblyConfigurationAttribute>
<GenerateAssemblyCompanyAttribute>false</GenerateAssemblyCompanyAttribute>
<GenerateAssemblyProductAttribute>false</GenerateAssemblyProductAttribute>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.WeChat.Work.Common\LINGYUN.Abp.WeChat.Work.Common.csproj" />
</ItemGroup>
</Project>

11
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
{
}

3
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/LINGYUN/Abp/WeChat/Work/Common/Messages/Handlers/WeChatWorkEventEventHandler.cs → 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<WeChatWorkEventMessageEto<CustomMenuPushEvent>>,
IDistributedEventHandler<WeChatWorkEventMessageEto<MenuClickJumpLinkPushEvent>>,

3
aspnet-core/framework/wechat/LINGYUN.Abp.WeChat.Work.Common/LINGYUN/Abp/WeChat/Work/Common/Messages/Handlers/WeChatWorkMessageEventHandler.cs → 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<WeChatWorkGeneralMessageEto<TextMessage>>,
IDistributedEventHandler<WeChatWorkGeneralMessageEto<LinkMessage>>,

56
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;
/// <summary>
/// 企业微信网页授权
/// </summary>
/// <remarks>
/// 详情见企业微信文档: <see cref="https://developer.work.weixin.qq.com/document/path/91335"/>
/// </remarks>
[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;
}
/// <summary>
/// 构造网页授权链接
/// </summary>
/// <remarks>
/// 详情见企业微信文档: <see cref="https://developer.work.weixin.qq.com/document/path/91022"/>
/// </remarks>
/// <param name="agentid">企业内部应用标识</param>
/// <param name="redirectUri">登录成功重定向url</param>
/// <param name="responseType">oauth响应类型</param>
/// <param name="scope">oauth授权范围</param>
/// <returns></returns>
[HttpGet]
[Route("oauth2")]
public virtual Task<string> GenerateOAuth2AuthorizeAsync(
@ -31,6 +50,17 @@ public class WeChatWorkAuthorizeController : AbpControllerBase, IWeChatWorkAutho
return _service.GenerateOAuth2AuthorizeAsync(agentid, redirectUri, responseType, scope);
}
/// <summary>
/// 构造网页授权链接
/// </summary>
/// <remarks>
/// 详情见企业微信文档: <see cref="https://developer.work.weixin.qq.com/document/path/91022"/>
/// </remarks>
/// <param name="agentid">企业内部应用标识</param>
/// <param name="redirectUri">登录成功重定向url</param>
/// <param name="responseType">oauth响应类型</param>
/// <param name="scope">oauth授权范围</param>
/// <returns></returns>
[HttpGet]
[Route("oauth2/authorize")]
public async virtual Task<IActionResult> OAuth2AuthorizeAsync(
@ -44,6 +74,16 @@ public class WeChatWorkAuthorizeController : AbpControllerBase, IWeChatWorkAutho
return Redirect(url);
}
/// <summary>
/// 构造企业微信登录链接
/// </summary>
/// <remarks>
/// 详情见企业微信文档: <see cref="https://developer.work.weixin.qq.com/document/path/98152#api%E6%8E%A5%E5%8F%A3"/>
/// </remarks>
/// <param name="redirectUri">登录成功重定向url</param>
/// <param name="loginType">登录类型, ServiceApp:服务商登录;CorpApp:企业自建/代开发应用登录</param>
/// <param name="agentid">企业自建应用/服务商代开发应用 AgentID,当login_type=CorpApp时填写</param>
/// <returns></returns>
[HttpGet]
[Route("oauth2/login")]
public virtual Task<string> GenerateOAuth2LoginAsync(
@ -54,6 +94,16 @@ public class WeChatWorkAuthorizeController : AbpControllerBase, IWeChatWorkAutho
return _service.GenerateOAuth2LoginAsync(redirectUri, loginType, agentid);
}
/// <summary>
/// 构造企业微信登录链接
/// </summary>
/// <remarks>
/// 详情见企业微信文档: <see cref="https://developer.work.weixin.qq.com/document/path/98152#api%E6%8E%A5%E5%8F%A3"/>
/// </remarks>
/// <param name="redirectUri">登录成功重定向url</param>
/// <param name="loginType">登录类型, ServiceApp:服务商登录;CorpApp:企业自建/代开发应用登录</param>
/// <param name="agentid">企业自建应用/服务商代开发应用 AgentID,当login_type=CorpApp时填写</param>
/// <returns></returns>
[HttpGet]
[Route("oauth2/login/sso")]
public async virtual Task<IActionResult> OAuth2LoginAsync(

22
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;
/// <summary>
/// 企业微信消息处理接口
/// </summary>
/// <remarks>
/// 详情见企业微信文档: <seealso cref="https://developer.work.weixin.qq.com/document/path/90930"/>
/// </remarks>
[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;
}
/// <summary>
/// 企业微信服务器消息验证回调接口<br />
/// 验证企业微信发送的消息有效性
/// </summary>
/// <param name="agentId">企业内部应用标识</param>
/// <param name="input">企业微信服务器传递的验证消息参数</param>
/// <returns></returns>
[HttpGet]
[Route("{agentId}")]
public virtual Task<string> Handle([FromRoute] string agentId, [FromQuery] MessageValidationInput input)
@ -27,6 +42,13 @@ public class WeChatWorkMessageController : AbpControllerBase, IWeChatWorkMessage
return _service.Handle(agentId, input);
}
/// <summary>
/// 企业微信服务器业务消息回调接口<br />
/// 处理企业微信服务器发送的业务消息
/// </summary>
/// <param name="agentId">企业内部应用标识</param>
/// <param name="input">企业微信服务器传递的消息参数</param>
/// <returns></returns>
[HttpPost]
[Route("{agentId}")]
public async virtual Task<string> Handle([FromRoute] string agentId, [FromQuery] MessageHandleInput input)

3
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,

12
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");
}
}

15
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"]

76
aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj

@ -0,0 +1,76 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Import Project="..\..\..\common.secrets.props" />
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<RootNamespace>LY.MicroService.WechatManagement</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AgileConfig.Client" />
<PackageReference Include="DotNetCore.CAP.Dashboard" />
<PackageReference Include="DotNetCore.CAP.MySql" />
<PackageReference Include="DotNetCore.CAP.RabbitMQ" />
<PackageReference Include="DotNetCore.CAP.OpenTelemetry" />
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" />
<PackageReference Include="DistributedLock.Redis" />
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
<PackageReference Include="OpenTelemetry.Exporter.Zipkin" />
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
<PackageReference Include="OpenTelemetry.Instrumentation.Http" />
<PackageReference Include="OpenTelemetry.Instrumentation.Runtime" />
<PackageReference Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" />
<PackageReference Include="Quartz.Serialization.Json" />
<PackageReference Include="Serilog.AspNetCore" />
<PackageReference Include="Serilog.Enrichers.Environment" />
<PackageReference Include="Serilog.Enrichers.Assembly" />
<PackageReference Include="Serilog.Enrichers.Process" />
<PackageReference Include="Serilog.Enrichers.Thread" />
<PackageReference Include="Serilog.Settings.Configuration" />
<PackageReference Include="Serilog.Sinks.Elasticsearch" />
<PackageReference Include="Serilog.Sinks.File" />
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" />
<PackageReference Include="Volo.Abp.Caching.StackExchangeRedis" />
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" />
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" />
<PackageReference Include="Volo.Abp.Autofac" />
<PackageReference Include="Volo.Abp.DistributedLocking" />
<PackageReference Include="Volo.Abp.Swashbuckle" />
<PackageReference Include="Volo.Abp.EntityFrameworkCore.MySql" />
<PackageReference Include="Volo.Abp.Http.Client.IdentityModel.Web" />
<PackageReference Include="Volo.Abp.FeatureManagement.EntityFrameworkCore" />
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" />
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj" />
<ProjectReference Include="..\..\framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj" />
<ProjectReference Include="..\..\framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj" />
<ProjectReference Include="..\..\framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj" />
<ProjectReference Include="..\..\framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj" />
<ProjectReference Include="..\..\framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj" />
<ProjectReference Include="..\..\framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj" />
<ProjectReference Include="..\..\framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj" />
<ProjectReference Include="..\..\framework\logging\LINGYUN.Abp.Serilog.Enrichers.UniqueId\LINGYUN.Abp.Serilog.Enrichers.UniqueId.csproj" />
<ProjectReference Include="..\..\framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj" />
<ProjectReference Include="..\..\framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj" />
<ProjectReference Include="..\..\framework\security\LINGYUN.Abp.Claims.Mapping\LINGYUN.Abp.Claims.Mapping.csproj" />
<ProjectReference Include="..\..\framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj" />
<ProjectReference Include="..\..\framework\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj" />
<ProjectReference Include="..\..\framework\wechat\LINGYUN.Abp.WeChat.Official.Application\LINGYUN.Abp.WeChat.Official.Application.csproj" />
<ProjectReference Include="..\..\framework\wechat\LINGYUN.Abp.WeChat.Official.HttpApi\LINGYUN.Abp.WeChat.Official.HttpApi.csproj" />
<ProjectReference Include="..\..\framework\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj" />
<ProjectReference Include="..\..\framework\wechat\LINGYUN.Abp.WeChat.Work.Application\LINGYUN.Abp.WeChat.Work.Application.csproj" />
<ProjectReference Include="..\..\framework\wechat\LINGYUN.Abp.WeChat.Work.HttpApi\LINGYUN.Abp.WeChat.Work.HttpApi.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\modules\identity\LINGYUN.Abp.Identity.Session.AspNetCore\LINGYUN.Abp.Identity.Session.AspNetCore.csproj" />
<ProjectReference Include="..\..\modules\localization-management\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj" />
<ProjectReference Include="..\..\modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj" />
</ItemGroup>
</Project>

66
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<WechatManagementHttpApiHostModule>(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();
}

22
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"
}
}
}
}

36
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<AbpMultiTenancyOptions> multiTenancyOptions,
IOptions<AbpAspNetCoreMultiTenancyOptions> aspNetCoreMultiTenancyOptions)
{
_multiTenancyOptions = multiTenancyOptions.Value;
_aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value;
}
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (_multiTenancyOptions.IsEnabled)
{
operation.Parameters = operation.Parameters ?? new List<OpenApiParameter>();
operation.Parameters.Add(new OpenApiParameter
{
Name = _aspNetCoreMultiTenancyOptions.TenantKey,
In = ParameterLocation.Header,
Description = "Tenant Id/Name in http header",
Required = false
});
}
}
}

450
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<AbpSerilogEnrichersUniqueIdOptions>(options =>
{
// 以开放端口区别
options.SnowflakeIdOptions.WorkerId = 11;
options.SnowflakeIdOptions.WorkerIdBits = 5;
options.SnowflakeIdOptions.DatacenterId = 1;
});
if (configuration.GetValue<bool>("App:ShowPii"))
{
IdentityModelEventSource.ShowPII = true;
}
}
private void PreConfigureCAP(IConfiguration configuration)
{
PreConfigure<CapOptions>(options =>
{
options
.UseMySql(sqlOptions =>
{
configuration.GetSection("CAP:MySql").Bind(sqlOptions);
})
.UseRabbitMQ(rabbitMQOptions =>
{
configuration.GetSection("CAP:RabbitMQ").Bind(rabbitMQOptions);
})
.UseDashboard();
});
}
private void ConfigureDbContext()
{
// 配置Ef
Configure<AbpDbContextOptions>(options =>
{
options.UseMySQL();
//options.Configure(cfg =>
//{
// cfg.UseMySQL();
// cfg.DbContextOptions.EnableSensitiveDataLogging();
//});
});
}
private void ConfigureJsonSerializer(IConfiguration configuration)
{
// 统一时间日期格式
Configure<AbpJsonOptions>(options =>
{
var jsonConfiguration = configuration.GetSection("Json");
if (jsonConfiguration.Exists())
{
jsonConfiguration.Bind(options);
}
});
// 中文序列化的编码问题
Configure<AbpSystemTextJsonSerializerOptions>(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<IDistributedLockProvider>(_ => 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<AbpExceptionHandlingOptions>(options =>
{
// 加入需要处理的异常类型
options.Handlers.Add<Volo.Abp.Data.AbpDbConcurrencyException>();
options.Handlers.Add<AbpInitializationException>();
options.Handlers.Add<OutOfMemoryException>();
options.Handlers.Add<System.Data.Common.DbException>();
options.Handlers.Add<Microsoft.EntityFrameworkCore.DbUpdateException>();
options.Handlers.Add<System.Data.DBConcurrencyException>();
});
// 自定义需要发送邮件通知的异常类型
Configure<AbpEmailExceptionHandlingOptions>(options =>
{
// 是否发送堆栈信息
options.SendStackTrace = true;
// 未指定异常接收者的默认接收邮件
// 指定自己的邮件地址
});
}
private void ConfigureAuditing(IConfiguration configuration)
{
Configure<AbpAuditingOptions>(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<AbpClockOptions>(options =>
{
configuration.GetSection("Clock").Bind(options);
});
}
private void ConfigureCaching(IConfiguration configuration)
{
Configure<AbpDistributedCacheOptions>(options =>
{
configuration.GetSection("DistributedCache").Bind(options);
});
Configure<RedisCacheOptions>(options =>
{
var redisConfig = ConfigurationOptions.Parse(options.Configuration);
options.ConfigurationOptions = redisConfig;
options.InstanceName = configuration["Redis:InstanceName"];
});
}
private void ConfigureMvc(IServiceCollection services, IConfiguration configuration)
{
Configure<AbpAspNetCoreMvcOptions>(options =>
{
options.ExposeIntegrationServices = true;
});
Configure<AbpEndpointRouterOptions>(options =>
{
options.EndpointConfigureActions.Add((builder) =>
{
builder.Endpoints.MapHealthChecks(configuration["App:HealthChecks"] ?? "/healthz");
});
});
services.AddHealthChecks();
}
private void ConfigureVirtualFileSystem()
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<WechatManagementHttpApiHostModule>("LY.MicroService.WechatManagement");
});
}
private void ConfigureMultiTenancy(IConfiguration configuration)
{
// 多租户
Configure<AbpMultiTenancyOptions>(options =>
{
options.IsEnabled = true;
});
var tenantResolveCfg = configuration.GetSection("App:Domains");
if (tenantResolveCfg.Exists())
{
Configure<AbpTenantResolveOptions>(options =>
{
var domains = tenantResolveCfg.Get<string[]>();
foreach (var domain in domains)
{
options.AddDomainTenantResolver(domain);
}
});
}
}
private void ConfigureIdentity(IConfiguration configuration)
{
Configure<AbpClaimsPrincipalFactoryOptions>(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<TenantHeaderParamter>();
});
}
private void ConfigureFeatureManagement()
{
Configure<FeatureManagementOptions>(options =>
{
options.IsDynamicFeatureStoreEnabled = true;
});
}
private void ConfigurePermissionManagement()
{
Configure<PermissionManagementOptions>(options =>
{
options.IsDynamicPermissionStoreEnabled = true;
});
}
private void ConfigureSettingManagement()
{
Configure<SettingManagementOptions>(options =>
{
options.IsDynamicSettingStoreEnabled = true;
});
}
private void ConfigureLocalization()
{
// 支持本地化语言类型
Configure<AbpLocalizationOptions>(options =>
{
options.Languages.Add(new LanguageInfo("en", "en", "English"));
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文"));
options.UsePersistence<WeChatCommonResource>();
options.UsePersistence<WeChatWorkResource>();
});
Configure<AbpLocalizationCultureMapOptions>(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<AbpWrapperOptions>(options =>
{
options.IsEnabled = true;
});
}
private void PreConfigureWrapper()
{
//PreConfigure<AbpDaprClientProxyOptions>(options =>
//{
// options.ProxyRequestActions.Add(
// (appid, httprequestmessage) =>
// {
// httprequestmessage.Headers.TryAddWithoutValidation(AbpHttpWrapConsts.AbpDontWrapResult, "true");
// });
//});
// 服务间调用不包装
PreConfigure<AbpHttpClientBuilderOptions>(options =>
{
options.ProxyClientActions.Add(
(_, _, client) =>
{
client.DefaultRequestHeaders.TryAddWithoutValidation(AbpHttpWrapConsts.AbpDontWrapResult, "true");
});
});
}
}

143
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();
}
}

133
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"
}
}
]
}
}

88
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}"
}
}
]
}
}

1
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

2
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 = @()

12
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

62
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:

10
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

21
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"

Loading…
Cancel
Save