Explorar o código

初始化支付参数、增加支付结果处理

DOVER-GLOBAL\11047086 hai 11 meses
pai
achega
a98e26a6b5
Modificáronse 38 ficheiros con 401 adicións e 48 borrados
  1. 1 0
      FuelCloud/ElectronicPayment/Models/Models.csproj
  2. 10 0
      FuelCloud/ElectronicPayment/Models/Models/AliPayConfig.cs
  3. 3 3
      FuelCloud/ElectronicPayment/Models/Models/ElectronicOrderModels.cs
  4. 1 1
      FuelCloud/ElectronicPayment/WeChatSdk/Business/JsApiPay.cs
  5. 4 2
      FuelCloud/ElectronicPayment/WeChatSdk/Business/MicroPay.cs
  6. 2 2
      FuelCloud/ElectronicPayment/WeChatSdk/Business/NativeNotify.cs
  7. 2 2
      FuelCloud/ElectronicPayment/WeChatSdk/Business/NativePay.cs
  8. 2 1
      FuelCloud/ElectronicPayment/WeChatSdk/Business/OrderQuery.cs
  9. 3 2
      FuelCloud/ElectronicPayment/WeChatSdk/Business/Refund.cs
  10. 1 1
      FuelCloud/ElectronicPayment/WeChatSdk/Business/RefundQuery.cs
  11. 2 2
      FuelCloud/ElectronicPayment/WeChatSdk/Business/ResultNotify.cs
  12. 2 2
      FuelCloud/ElectronicPayment/WeChatSdk/PayAPI/Notify.cs
  13. 3 3
      FuelCloud/ElectronicPayment/WeChatSdk/WeChatSdk.csproj
  14. 28 0
      FuelCloud/FuelCloud.sln
  15. 24 0
      FuelCloud/src/Fuel.Payment.Core/Enum/ReturnCode.cs
  16. 6 0
      FuelCloud/src/Fuel.Payment.Core/Fuel.Payment.Core.csproj
  17. 2 4
      FuelCloud/src/Fuel.Payment.Core/GenericProcessResponse.cs
  18. 14 0
      FuelCloud/src/Fuel.Payment.Core/IPaymentNotifier.cs
  19. 5 2
      FuelCloud/src/Fuel.Payment.Core/IPaymentProcessor.cs
  20. 1 1
      FuelCloud/src/Fuel.Payment.Core/Models/AllInPay/TongLianResponseV2.cs
  21. 0 0
      FuelCloud/src/Fuel.Payment.Repositories/Class1.cs
  22. 17 0
      FuelCloud/src/Fuel.Payment.Repositories/Fuel.Payment.Repositories.csproj
  23. 27 3
      FuelCloud/src/Fuel.Payment.Server/Controllers/WeatherForecastController.cs
  24. 2 0
      FuelCloud/src/Fuel.Payment.Server/Fuel.PaymentServer.csproj
  25. 1 1
      FuelCloud/src/Fuel.Payment.Server/MicServer/Authorize/DfsAuthorizationHandler.cs
  26. 60 0
      FuelCloud/src/Fuel.Payment.Server/MicServer/WebAppliactionExtend.cs
  27. 20 1
      FuelCloud/src/Fuel.Payment.Server/Program.cs
  28. 7 1
      FuelCloud/src/Fuel.Payment.Service/AliPaymentProcessor/Alipay/AlipayPaymentProcessor.cs
  29. 56 3
      FuelCloud/src/Fuel.Payment.Service/AllInPayProcessor/AllInPay/AllInPayProcessor.cs
  30. 10 0
      FuelCloud/src/Fuel.Payment.Service/AllInPayProcessor/AllInPay/Models/TongLianPayConfig.cs
  31. 13 1
      FuelCloud/src/Fuel.Payment.Service/Factory/AsyncPaymentProcessor.cs
  32. 10 0
      FuelCloud/src/Fuel.Payment.Service/Fuel.Payment.Service.csproj
  33. 1 1
      FuelCloud/src/Fuel.Payment.Service/Pay/IPayService.cs
  34. 13 6
      FuelCloud/src/Fuel.Payment.Service/Pay/PayService.cs
  35. 8 2
      FuelCloud/src/Fuel.Payment.Service/UnionPayProcessor/MiniUnionPayProcessor.cs
  36. 7 1
      FuelCloud/src/Fuel.Payment.Service/UnionPayProcessor/UnionPayProcessor.cs
  37. 24 0
      FuelCloud/src/FuelServer.Core/ConstKey.cs
  38. 9 0
      FuelCloud/src/FuelServer.Core/FuelServer.Core.csproj

+ 1 - 0
FuelCloud/ElectronicPayment/Models/Models.csproj

@@ -62,6 +62,7 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Models\AliPayConfig.cs" />
+    <Compile Include="Models\Class1.cs" />
     <Compile Include="Models\ConfigurationServiceModels.cs" />
     <Compile Include="Models\ElectronicOrderModels.cs" />
     <Compile Include="ExtentionMethod.cs" />

+ 10 - 0
FuelCloud/ElectronicPayment/Models/Models/AliPayConfig.cs

@@ -1,8 +1,10 @@
 using System;
 using System.Collections.Generic;
+using System.IO;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Xml.Serialization;
 
 namespace WayneCloud.Models
 {
@@ -22,6 +24,14 @@ namespace WayneCloud.Models
         public string charset { get; set; }
         public string sign_type { get; set; }
         public string version { get; set; }
+        public static AliPayConfig DeserializeFromXmlString(string xmlString)
+        {
+            using (StringReader reader = new StringReader(xmlString))
+            {
+                XmlSerializer serializer = new XmlSerializer(typeof(AliPayConfig));
+                return (AliPayConfig)serializer.Deserialize(reader);
+            }
+        }
     }
 
     public class AliPayConfigInfo

+ 3 - 3
FuelCloud/ElectronicPayment/Models/Models/ElectronicOrderModels.cs

@@ -70,14 +70,14 @@ namespace WayneCloud.Models
         //public string CurrentBuId { get; set; }
         //public string ConfigurationServiceUrl { get; set; }
         public Object Config { get; set; }
-        public Object Certification { get; set;}
+        public Object Certification { get; set; }
         /// <summary>
         /// Gets or sets the time that client side create this order
         /// </summary>
         public DateTime? CreationTime { get; set; }
 
         /// <summary>
-        /// 根据不同场景选择不同的支付方式, accepted values: WX_SCAN、ALI_SCAN
+        /// 根据不同场景选择不同的支付方式, accepted values: WX_SCAN、ALI_SCAN、ALL_IN_SCAN
         /// </summary>
         [Required]
         public string Channel { get; set; }
@@ -145,7 +145,7 @@ namespace WayneCloud.Models
         /// sample:  {"key1":"value1","key2":"value2",...}
         /// 用户自定义的参数,将会在webhook通知中原样返回,该字段主要用于商户携带订单的自定义数据
         /// </summary>
-        public PostPayQRCodeFuelOrderOptionalFieldModel Optional { get; set; }
+        public Dictionary<string, object> Optional { get; set; } = new Dictionary<string, object>();
 
         [Required(ErrorMessage = "Need provide at least one FuelOrderDetail")]
         public List<FuelOrderDetailModel> FuelOrderDetails { get; set; }

+ 1 - 1
FuelCloud/ElectronicPayment/WeChatSdk/Business/JsApiPay.cs

@@ -3,8 +3,8 @@ using System.Threading.Tasks;
 using System.Web;
 using System.Web.Security;
 using System.Web.UI;
-using BaseModel.Models;
 using LitJson;
+using WayneCloud.Models.Models;
 
 namespace Wechat.PayAPI
 {

+ 4 - 2
FuelCloud/ElectronicPayment/WeChatSdk/Business/MicroPay.cs

@@ -1,8 +1,10 @@
-using BaseModel.Models;
-using System;
+using System;
 using System.Security.Cryptography.X509Certificates;
 using System.Threading;
 using System.Threading.Tasks;
+using WayneCloud.Models.Models;
+using WayneCloud.Models;
+
 
 namespace Wechat.PayAPI
 {

+ 2 - 2
FuelCloud/ElectronicPayment/WeChatSdk/Business/NativeNotify.cs

@@ -1,7 +1,7 @@
-using BaseModel.Models;
-using System;
+using System;
 using System.Threading.Tasks;
 using System.Web.UI;
+using WayneCloud.Models.Models;
 
 namespace Wechat.PayAPI
 {

+ 2 - 2
FuelCloud/ElectronicPayment/WeChatSdk/Business/NativePay.cs

@@ -1,7 +1,7 @@
-using BaseModel.Models;
-using System;
+using System;
 using System.Collections.Generic;
 using System.Threading.Tasks;
+using WayneCloud.Models.Models;
 
 namespace Wechat.PayAPI
 {

+ 2 - 1
FuelCloud/ElectronicPayment/WeChatSdk/Business/OrderQuery.cs

@@ -1,6 +1,7 @@
 
-using BaseModel.Models;
 using System.Threading.Tasks;
+using WayneCloud.Models;
+using WayneCloud.Models.Models;
 
 namespace Wechat.PayAPI
 {

+ 3 - 2
FuelCloud/ElectronicPayment/WeChatSdk/Business/Refund.cs

@@ -1,7 +1,8 @@
-using BaseModel.Models;
-using System;
+using System;
 using System.Security.Cryptography.X509Certificates;
 using System.Threading.Tasks;
+using WayneCloud.Models;
+using WayneCloud.Models.Models;
 
 namespace Wechat.PayAPI
 {

+ 1 - 1
FuelCloud/ElectronicPayment/WeChatSdk/Business/RefundQuery.cs

@@ -1,6 +1,6 @@
 
-using BaseModel.Models;
 using System.Threading.Tasks;
+using WayneCloud.Models.Models;
 
 namespace Wechat.PayAPI
 {

+ 2 - 2
FuelCloud/ElectronicPayment/WeChatSdk/Business/ResultNotify.cs

@@ -1,6 +1,6 @@
-using BaseModel.Models;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
 using System.Web.UI;
+using WayneCloud.Models.Models;
 
 namespace Wechat.PayAPI
 {

+ 2 - 2
FuelCloud/ElectronicPayment/WeChatSdk/PayAPI/Notify.cs

@@ -1,7 +1,7 @@
-using BaseModel.Models;
-using System.Text;
+using System.Text;
 using System.Threading.Tasks;
 using System.Web.UI;
+using WayneCloud.Models.Models;
 
 namespace Wechat.PayAPI
 {

+ 3 - 3
FuelCloud/ElectronicPayment/WeChatSdk/WeChatSdk.csproj

@@ -79,9 +79,9 @@
     <None Include="packages.config" />
   </ItemGroup>
   <ItemGroup>
-    <ProjectReference Include="..\..\Shared\BaseModel\BaseModel.csproj">
-      <Project>{863566fa-af30-41ba-a5e4-6cd08588c5c2}</Project>
-      <Name>BaseModel</Name>
+    <ProjectReference Include="..\Models\Models.csproj">
+      <Project>{9cf77a29-fbde-4cf5-af10-c8a97485937a}</Project>
+      <Name>Models</Name>
     </ProjectReference>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

+ 28 - 0
FuelCloud/FuelCloud.sln

@@ -19,6 +19,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ElectronicPayment", "Electr
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AopSdk", "ElectronicPayment\alipay-sdk-NET20161213174056\AopSdk.csproj", "{E02188DB-6DFB-4341-8E85-F78C33E90617}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "F2FPayDll", "ElectronicPayment\F2FPayDll\F2FPayDll.csproj", "{EC6DA18D-0532-4E73-BA69-A575A724C8BB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WeChatSdk", "ElectronicPayment\WeChatSdk\WeChatSdk.csproj", "{6A8A2AF0-791D-4207-AB5B-99CAC28CEBD8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Models", "ElectronicPayment\Models\Models.csproj", "{9CF77A29-FBDE-4CF5-AF10-C8A97485937A}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "FuelServer.Core", "src\FuelServer.Core\FuelServer.Core.csproj", "{AEDE8AC1-17AB-47A3-8CBA-36D32484B6ED}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -49,6 +57,22 @@ Global
 		{E02188DB-6DFB-4341-8E85-F78C33E90617}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{E02188DB-6DFB-4341-8E85-F78C33E90617}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{E02188DB-6DFB-4341-8E85-F78C33E90617}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EC6DA18D-0532-4E73-BA69-A575A724C8BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{EC6DA18D-0532-4E73-BA69-A575A724C8BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EC6DA18D-0532-4E73-BA69-A575A724C8BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{EC6DA18D-0532-4E73-BA69-A575A724C8BB}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6A8A2AF0-791D-4207-AB5B-99CAC28CEBD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6A8A2AF0-791D-4207-AB5B-99CAC28CEBD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6A8A2AF0-791D-4207-AB5B-99CAC28CEBD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6A8A2AF0-791D-4207-AB5B-99CAC28CEBD8}.Release|Any CPU.Build.0 = Release|Any CPU
+		{9CF77A29-FBDE-4CF5-AF10-C8A97485937A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{9CF77A29-FBDE-4CF5-AF10-C8A97485937A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{9CF77A29-FBDE-4CF5-AF10-C8A97485937A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{9CF77A29-FBDE-4CF5-AF10-C8A97485937A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AEDE8AC1-17AB-47A3-8CBA-36D32484B6ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{AEDE8AC1-17AB-47A3-8CBA-36D32484B6ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AEDE8AC1-17AB-47A3-8CBA-36D32484B6ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{AEDE8AC1-17AB-47A3-8CBA-36D32484B6ED}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
@@ -61,6 +85,10 @@ Global
 		{ADB9278E-D932-422B-8585-DFA0F0333D3B} = {A70E5B56-8E5C-4EB2-92F0-66FA7E67A2D1}
 		{FF8B0E2F-823B-4ACF-ADAC-282CD8F2B3CF} = {A70E5B56-8E5C-4EB2-92F0-66FA7E67A2D1}
 		{E02188DB-6DFB-4341-8E85-F78C33E90617} = {FF8B0E2F-823B-4ACF-ADAC-282CD8F2B3CF}
+		{EC6DA18D-0532-4E73-BA69-A575A724C8BB} = {FF8B0E2F-823B-4ACF-ADAC-282CD8F2B3CF}
+		{6A8A2AF0-791D-4207-AB5B-99CAC28CEBD8} = {FF8B0E2F-823B-4ACF-ADAC-282CD8F2B3CF}
+		{9CF77A29-FBDE-4CF5-AF10-C8A97485937A} = {FF8B0E2F-823B-4ACF-ADAC-282CD8F2B3CF}
+		{AEDE8AC1-17AB-47A3-8CBA-36D32484B6ED} = {A70E5B56-8E5C-4EB2-92F0-66FA7E67A2D1}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {61A0BE4B-D15C-4489-B07B-A028AEC93C1D}

+ 24 - 0
FuelCloud/src/Fuel.Payment.Core/Enum/ReturnCode.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Fuel.Payment.Core.Enum
+{
+    public enum ReturnCode
+    {
+        OK = 0,
+        SITE_ID_NOT_AUTHORIZED = 1,
+        PAY_FACTOR_NOT_SET = 2,
+        CHANNEL_INVALID = 3,
+        MISS_PARAM = 4,
+        PARAM_INVALID = 5,
+        CERT_FILE_ERROR = 6,
+        CHANNEL_ERROR = 7,
+        TRADE_CLOSED = 8,
+        PAY_ERROR = 9,
+        RUN_TIME_ERROR = 14,
+        CODE_NOT_FOUND = 15,
+    }
+}

+ 6 - 0
FuelCloud/src/Fuel.Payment.Core/Fuel.Payment.Core.csproj

@@ -16,4 +16,10 @@
     <PackageReference Include="DFS.Core" Version="8.0.1" />
   </ItemGroup>
 
+  <ItemGroup>
+    <ProjectReference Include="..\..\ElectronicPayment\alipay-sdk-NET20161213174056\AopSdk.csproj" />
+    <ProjectReference Include="..\..\ElectronicPayment\WeChatSdk\WeChatSdk.csproj" />
+    <ProjectReference Include="..\FuelServer.Core\FuelServer.Core.csproj" />
+  </ItemGroup>
+
 </Project>

+ 2 - 4
FuelCloud/src/Fuel.Payment.Service/GenericProcessResponse.cs → FuelCloud/src/Fuel.Payment.Core/GenericProcessResponse.cs

@@ -1,6 +1,6 @@
 using Aop.Api;
 using Fuel.Payment.Core.Models;
-using Fuel.Payment.Service.AllInPayProcessor.AllInPay;
+using Fuel.Payment.Core.Models.AllInPay;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -8,9 +8,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Wechat.PayAPI;
 
-
-
-namespace Fuel.Payment.Service
+namespace Fuel.Payment.Core
 {
     public class GenericProcessResponse
     {

+ 14 - 0
FuelCloud/src/Fuel.Payment.Core/IPaymentNotifier.cs

@@ -0,0 +1,14 @@
+using Fuel.Payment.Core.Models;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Fuel.Payment.Core
+{
+    public interface IPaymentNotifier
+    {
+        Task<ElectronicOrderModel> PaymentResult(GenericProcessResponse paymentResult, ElectronicOrderModel electronicOrderModel);
+    }
+}

+ 5 - 2
FuelCloud/src/Fuel.Payment.Core/IPaymentProcessor.cs

@@ -1,4 +1,5 @@
-using System;
+using Fuel.Payment.Core.Models;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
@@ -14,6 +15,8 @@ namespace Fuel.Payment.Core
         TProcessResult Query(TOrder order, int count = 1, int interval = 2000);
         TProcessResult Return(TOrder order);
         TProcessResult UnifiedOrder(TOrder order);
-        TProcessResult Initialize(TOrder order);
+        //TProcessResult Initialize(TOrder order);
+        //Task<ElectronicOrderModel> PaymentResult(GenericProcessResponse paymentResult, TOrder order);
+
     }
 }

+ 1 - 1
FuelCloud/src/Fuel.Payment.Service/AllInPayProcessor/AllInPay/TongLianResponseV2.cs → FuelCloud/src/Fuel.Payment.Core/Models/AllInPay/TongLianResponseV2.cs

@@ -5,7 +5,7 @@ using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
 
-namespace Fuel.Payment.Service.AllInPayProcessor.AllInPay
+namespace Fuel.Payment.Core.Models.AllInPay
 {
     public class TongLianResponseV2
     {

+ 0 - 0
FuelCloud/Fuel.Payment.Repositories/Class1.cs → FuelCloud/src/Fuel.Payment.Repositories/Class1.cs


+ 17 - 0
FuelCloud/src/Fuel.Payment.Repositories/Fuel.Payment.Repositories.csproj

@@ -0,0 +1,17 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <Folder Include="Impl\" />
+  </ItemGroup>
+
+  <ItemGroup>
+    <PackageReference Include="ShardingCore" Version="7.8.1.21" />
+  </ItemGroup>
+
+</Project>

+ 27 - 3
FuelCloud/src/Fuel.Payment.Server/Controllers/WeatherForecastController.cs

@@ -1,10 +1,13 @@
 using Fuel.Payment.Service.Pay;
+using Microsoft.AspNetCore.Authorization;
+
+using Microsoft.AspNetCore.Authorization;
 using Microsoft.AspNetCore.Mvc;
 
 namespace Fuel.PaymentServer.Controllers
 {
     [ApiController]
-    [Route("[controller]")]
+    [Route("api/[controller]/[action]")]
     public class WeatherForecastController : ControllerBase
     {
         private static readonly string[] Summaries = new[]
@@ -21,6 +24,11 @@ namespace Fuel.PaymentServer.Controllers
             _payService = payService;
         }
 
+
+        /// <summary>
+        /// GetWeatherForecast
+        /// </summary>
+        /// <returns></returns>
         [HttpGet(Name = "GetWeatherForecast")]
         public IEnumerable<WeatherForecast> Get()
         {
@@ -32,10 +40,26 @@ namespace Fuel.PaymentServer.Controllers
             })
             .ToArray();
         }
-        public async Task<IActionResult> Payment()
+        /// <summary>
+        /// Ìá½»Ö§¸¶
+        /// </summary>
+        /// <returns></returns>
+        [HttpPost(Name = "Payment")]
+        public async Task<IActionResult> Payment(string AuthCode)
         {
-            await _payService.PerformElectronicProcess();
+            await _payService.PerformElectronicProcess(AuthCode);
             return Ok(0);
         }
+
+        /// <summary>
+        /// get
+        /// </summary>
+        /// <returns></returns>
+        [HttpGet(Name = "Apis")]
+        [Authorize]
+        public int GetApi()
+        {
+            return 0;
+        }
     }
 }

+ 2 - 0
FuelCloud/src/Fuel.Payment.Server/Fuel.PaymentServer.csproj

@@ -9,6 +9,7 @@
   <ItemGroup>
     <PackageReference Include="DFS.Infrastructure.Redis" Version="8.0.0" />
     <PackageReference Include="JWT" Version="10.1.1" />
+    <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="8.0.6" />
     <PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.5" />
     <PackageReference Include="Swashbuckle.AspNetCore" Version="6.6.2" />
   </ItemGroup>
@@ -19,6 +20,7 @@
 
   <ItemGroup>
     <ProjectReference Include="..\Fuel.Payment.Core\Fuel.Payment.Core.csproj" />
+    <ProjectReference Include="..\Fuel.Payment.Service\Fuel.Payment.Service.csproj" />
   </ItemGroup>
 
 </Project>

+ 1 - 1
FuelCloud/src/Fuel.Payment.Server/MicServer/Authorize/DfsAuthorizationHandler.cs

@@ -10,7 +10,7 @@ namespace DFS.Core.Mvc.Authorize
     /// </summary>
     public class DFSAuthorizationHandler : AuthorizationHandler<DfsAuthorizationRequirement>
     {
-        public IRedisClient _redisClient;
+        //public IRedisClient _redisClient;
         public DFSAuthorizationHandler()
         {
 

+ 60 - 0
FuelCloud/src/Fuel.Payment.Server/MicServer/WebAppliactionExtend.cs

@@ -1,15 +1,26 @@
 using DFS.Core.Mvc;
+using DFS.Core.Mvc.Authorize;
 using DFS.Core.Mvc.Filters;
 using DFS.Core.Mvc.Jwt;
 using DFS.Core.Utils;
 using DFS.Core.Utily;
+using FuelServer.Core;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.IdentityModel.Tokens;
 using Newtonsoft.Json;
 using Newtonsoft.Json.Serialization;
+using System.Text;
+using System.Xml.Linq;
 
 namespace Fuel.PaymentServer.MicServer
 {
+
+   
+
     public static class WebAppliactionExtend
     {
+       
 
         /// <summary>
         /// 添加服务注入
@@ -22,6 +33,55 @@ namespace Fuel.PaymentServer.MicServer
             services.AddSingleton(new Appsettings(environmentName.ContentRootPath, environmentName.EnvironmentName));
             //services.AddJwtAuth();
             services.AddHealthChecks();
+            SecurityKey securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(ConstKey.JwtKey));    // 注意:这里的key不能低于16位
+            services.AddAuthentication("Bearer")        // 注入认证服务,认证类型:Bearer
+                .AddJwtBearer(o =>        // 注入 Jwt Bearer认证 服务,对其进行配置
+                {
+                    // 主要是这里:
+                    o.Events = new JwtBearerEvents()
+                    {
+                        OnMessageReceived = context => {
+                            context.Token = context.Request.Query["access_token"];
+                            return Task.CompletedTask;
+                        }
+                    };
+
+                    // 对 jwt 进行配置
+                    o.TokenValidationParameters = new TokenValidationParameters()        // 对Token的认证是哪些参数,这里设置
+                    {
+                        ValidateIssuerSigningKey = true, 
+                        IssuerSigningKey = securityKey,     
+                        ValidateIssuer = true, 
+                        ValidIssuer = ConstKey.JwtIssuer, 
+                        ValidateAudience = true,     
+                        ValidAudience = ConstKey.JwtAudience,       
+                        RequireExpirationTime = true,       
+                        ValidateLifetime = true,        
+                    };
+                });
+
+
+            // 服务注入
+            services.AddAuthorization(o => {
+                //内部账户认证
+                o.AddPolicy("IntClient",o => {
+                    o.RequireRole("IntClient").Build();
+                });
+
+                //内部服务认证
+                o.AddPolicy("IntServer", o => {
+                    o.RequireRole("IntServer").Build();
+                });
+
+                //自定义授权(后台权限验证)
+                o.AddPolicy("Admin", o => {
+                    var myAdminRequirement = new DfsAuthorizationRequirement("DfsAuthorizationRequirement");    // 可以传递参数
+                    o.Requirements.Add(myAdminRequirement);        
+                });
+            });
+
+            services.AddSingleton<IAuthorizationHandler, DFSAuthorizationHandler>();
+
             services.AddControllers(options =>
             {
                 options.Filters.Add(typeof(ValidationActionFilter));

+ 20 - 1
FuelCloud/src/Fuel.Payment.Server/Program.cs

@@ -1,10 +1,27 @@
 
 
 using DFS.Core.Mvc;
+using Fuel.Payment.Service.AliPaymentProcessor.Alipay;
+using Fuel.Payment.Service.AllInPayProcessor.AllInPay;
+using Fuel.Payment.Service.Factory;
+using Fuel.Payment.Service.Pay;
+using Fuel.Payment.Service.UnionPayProcessor;
 using Fuel.PaymentServer.MicServer;
 
 var builder = WebApplication.CreateBuilder(args);
-
+builder.Services.AddScoped<IPayService, PayService>();
+AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "ALI_SCAN", new AlipayPaymentProcessor());
+//AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "WX_SCAN", new WechatPaymentProcessor());
+AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "ALL_IN_SCAN", new AllInPayProcessor());
+//AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "ALL_IN_SCAN_V2", new AllInPayProcessorV2());
+//AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "WX_ORDER_SCAN", new WechatPaymentProcessor());
+AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "ALI_ORDER_SCAN", new AlipayPaymentProcessor());
+//AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "WECHAT_MINIPROGRAM_PAY", new WechatPaymentProcessor());
+//AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "ICBC_SCAN", new IcbcPayProcessor());
+//AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "ICBC_ORDER_SCAN", new IcbcPayProcessor());
+//AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "GRG_SCAN", new GrgPayProcessor());
+AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "UNION_MINI", new MiniUnionPayProcessor());
+AsyncPaymentProcessorFactory.Default.Regist(o => o.Channel == "UNION_SCAN", new UnionPayProcessor());
 // Add services to the container.
 
 //³õʼ»¯DFS Server
@@ -29,6 +46,8 @@ app.UseDFSServer();
 
 app.UseHttpsRedirection();
 
+app.UseAuthentication();
+
 app.UseAuthorization();
 
 app.MapControllers();

+ 7 - 1
FuelCloud/src/Fuel.Payment.Service/AliPaymentProcessor/Alipay/AlipayPaymentProcessor.cs

@@ -2,8 +2,10 @@
 using Com.Alipay.Business;
 using Com.Alipay.Domain;
 using Com.Alipay.Model;
+using Fuel.Payment.Core;
 using Fuel.Payment.Core.Models;
 using Fuel.Payment.Service.Factory;
+using Org.BouncyCastle.Asn1.X509;
 using System;
 using System.Collections.Generic;
 using System.Linq;
@@ -40,7 +42,11 @@ namespace Fuel.Payment.Service.AliPaymentProcessor.Alipay
                 return clients[config];
             }
         }
-        public override async Task<GenericProcessResponse> Initialize(ElectronicOrderModel order)
+        protected override async Task<ElectronicOrderModel> PaymentResult(GenericProcessResponse processResponse, ElectronicOrderModel order)
+        {
+            return order;
+        }
+        protected override async Task<GenericProcessResponse> Initialize(ElectronicOrderModel order)
         {
             return new GenericProcessResponse()
             {

+ 56 - 3
FuelCloud/src/Fuel.Payment.Service/AllInPayProcessor/AllInPay/AllInPayProcessor.cs

@@ -1,14 +1,23 @@
-using Fuel.Payment.Core.Models;
+using Fuel.Payment.Core;
+using Fuel.Payment.Core.Enum;
+using Fuel.Payment.Core.Models;
+using Fuel.Payment.Core.Models.AllInPay;
 using Fuel.Payment.Service;
 using Fuel.Payment.Service.AllInPayProcessor.AllInPay.Models;
 using Fuel.Payment.Service.AllInPayProcessor.AllInPay.Util;
 using Fuel.Payment.Service.Factory;
 using Newtonsoft.Json;
+using Org.BouncyCastle.Asn1.X509;
 using System;
 using System.Collections.Generic;
+using System.Globalization;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WayneCloud.Models;
+using ElectronicOrderModel = Fuel.Payment.Core.Models.ElectronicOrderModel;
+using ElectronicOrderProcessResultModel = Fuel.Payment.Core.Models.ElectronicOrderProcessResultModel;
+using TradeStatus = Fuel.Payment.Core.Models.TradeStatus;
 
 namespace Fuel.Payment.Service.AllInPayProcessor.AllInPay
 {
@@ -25,15 +34,59 @@ namespace Fuel.Payment.Service.AllInPayProcessor.AllInPay
                 AllInPayResponse = null
             };
         }
-        public override async Task<GenericProcessResponse> Initialize(ElectronicOrderModel order)
+        /// <summary>
+        /// 支付结果处理
+        /// </summary>
+        /// <param name="processResponse"></param>
+        /// <param name="eOrder"></param>
+        /// <returns></returns>
+        protected override async Task<ElectronicOrderModel> PaymentResult(GenericProcessResponse processResponse, ElectronicOrderModel eOrder)
         {
-            string config = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<AliPayConfig xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <alipay_public_key>alipay_rsa_public_key_dev.pem</alipay_public_key>\r\n  <merchant_private_key>rsa_private_key_dev.pem</merchant_private_key>\r\n  <merchant_public_key>rsa_public_key_dev.pem</merchant_public_key>\r\n  <appId>2021003112655779</appId>\r\n  <serverUrl>https://openapi.alipay.com/gateway.do</serverUrl>\r\n  <mapiUrl>https://mapi.alipay.com/gateway.do</mapiUrl>\r\n  <pid>2088222976038113</pid>\r\n  <charset>utf-8</charset>\r\n  <sign_type>RSA2</sign_type>\r\n  <version>1.0</version>\r\n</AliPayConfig>";
+            var returnCode = ReturnCode.PAY_ERROR;
+            var response = processResponse.AllInPayResponse;
+            if (response != null && eOrder.TradeStatus == TradeStatus.SUCCESS)
+            {
+                returnCode = ReturnCode.OK;
+            }
+            else
+            {
+                returnCode = ReturnCode.PAY_ERROR;
+
+                if (!eOrder.IsRefund)
+                {
+                    //cancelOrder = true;
+
+                }
+            }
+            List<ElectronicOrderProcessResultModel> electronicOrderProcessResultModels = new List<ElectronicOrderProcessResultModel>();
+            electronicOrderProcessResultModels.Add(new ElectronicOrderProcessResultModel()
+            {
+                BillNumber = eOrder.BillNumber,
+                ResultCode = ((int)returnCode).ToString(CultureInfo.InvariantCulture),
+                ResultMessage = returnCode.ToString(),
+                ErrorDetail = response != null && response.ContainsKey("retmsg") ? response["retmsg"] : "",
+                RawResult = response != null && response.ContainsKey("errmsg") ? response["errmsg"] : ""
+            });
+            eOrder.ProcessResults = electronicOrderProcessResultModels;
+            return eOrder;
+        }
+        /// <summary>
+        /// 初始化参数
+        /// </summary>
+        /// <param name="order"></param>
+        /// <returns></returns>
+        protected override async Task<GenericProcessResponse> Initialize(ElectronicOrderModel order)
+        {
+            string config = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<TongLianPayConfig xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <appId>00261178</appId>\r\n  <subAppId>wx32dbc8c959199561</subAppId>\r\n  <cusId>660332055410P91</cusId>\r\n  <appKey>qwe1234567</appKey>\r\n  <apiVersion>11</apiVersion>\r\n  <apiUrl>https://vsp.allinpay.com/apiweb/unitorder</apiUrl>\r\n  <notifyUrl></notifyUrl>\r\n  <queryInterval>3</queryInterval>\r\n  <queryTimeout>90</queryTimeout>\r\n</TongLianPayConfig>";
+            TongLianPayConfig aliPayConfig = TongLianPayConfig.DeserializeFromXmlString(config);
+            order.Config = aliPayConfig;
             return new GenericProcessResponse() {
                 electronicOrderModel = order
             };
         }
         public override async Task<GenericProcessResponse> Process(ElectronicOrderModel order)
         {
+            order.Config= Initialize(order).Result?.electronicOrderModel?.Config;
             order.TradeStatus = TradeStatus.PAYERROR;
             var response = new Dictionary<string, string>();
             try

+ 10 - 0
FuelCloud/src/Fuel.Payment.Service/AllInPayProcessor/AllInPay/Models/TongLianPayConfig.cs

@@ -3,6 +3,8 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using System.Xml.Serialization;
+using WayneCloud.Models;
 
 namespace Fuel.Payment.Service.AllInPayProcessor.AllInPay.Models
 {
@@ -17,5 +19,13 @@ namespace Fuel.Payment.Service.AllInPayProcessor.AllInPay.Models
         public string notifyUrl { get; set; }
         public int queryInterval { get; set; }
         public int queryTimeout { get; set; }
+        public static TongLianPayConfig DeserializeFromXmlString(string xmlString)
+        {
+            using (StringReader reader = new StringReader(xmlString))
+            {
+                XmlSerializer serializer = new XmlSerializer(typeof(TongLianPayConfig));
+                return (TongLianPayConfig)serializer.Deserialize(reader);
+            }
+        }
     }
 }

+ 13 - 1
FuelCloud/src/Fuel.Payment.Service/Factory/AsyncPaymentProcessor.cs

@@ -21,6 +21,18 @@ namespace Fuel.Payment.Service.Factory
         public abstract Task<GenericProcessResponse> Return(ElectronicOrderModel order);
 
         public abstract Task<GenericProcessResponse> UnifiedOrder(ElectronicOrderModel order);
-        public abstract Task<GenericProcessResponse> Initialize(ElectronicOrderModel order);
+        /// <summary>
+        /// 初始化支付参数
+        /// </summary>
+        /// <param name="order"></param>
+        /// <returns></returns>
+        protected abstract Task<GenericProcessResponse> Initialize(ElectronicOrderModel order);
+        /// <summary>
+        /// 支付结果
+        /// </summary>
+        /// <param name="order"></param>
+        /// <param name="electronicOrderModel"></param>
+        /// <returns></returns>
+        protected abstract Task<ElectronicOrderModel> PaymentResult(GenericProcessResponse order, ElectronicOrderModel electronicOrderModel);
     }
 }

+ 10 - 0
FuelCloud/src/Fuel.Payment.Service/Fuel.Payment.Service.csproj

@@ -10,6 +10,10 @@
     <Folder Include="Impl\" />
   </ItemGroup>
 
+  <ItemGroup>
+    <PackageReference Include="NLog" Version="5.3.2" />
+  </ItemGroup>
+
   <ItemGroup>
     <ProjectReference Include="..\..\ElectronicPayment\alipay-sdk-NET20161213174056\AopSdk.csproj" />
     <ProjectReference Include="..\..\ElectronicPayment\F2FPayDll\F2FPayDll.csproj" />
@@ -18,4 +22,10 @@
     <ProjectReference Include="..\Fuel.Payment.Core\Fuel.Payment.Core.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Reference Include="Newtonsoft.Json">
+      <HintPath>bin\Debug\net8.0\Newtonsoft.Json.dll</HintPath>
+    </Reference>
+  </ItemGroup>
+
 </Project>

+ 1 - 1
FuelCloud/src/Fuel.Payment.Service/Pay/IPayService.cs

@@ -10,7 +10,7 @@ namespace Fuel.Payment.Service.Pay
 {
     public interface IPayService
     {
-        Task<ServiceResponse> PerformElectronicProcess();
+        Task<ServiceResponse> PerformElectronicProcess(string AuthCode);
             
     }
 }

+ 13 - 6
FuelCloud/src/Fuel.Payment.Service/Pay/PayService.cs

@@ -17,14 +17,19 @@ namespace Fuel.Payment.Service.Pay
 {
     public class PayService: IPayService
     {
-        public async Task<ServiceResponse> PerformElectronicProcess()
+        /// <summary>
+        /// 支付处理
+        /// </summary>
+        /// <param name="AuthCode"></param>
+        /// <returns></returns>
+        public async Task<ServiceResponse> PerformElectronicProcess(string AuthCode)
         {
             string billNumber = SequenceNumber.Next();
             ElectronicOrderModel eOrder = new ElectronicOrderModel
             {
-                Channel = "UNION_SCAN",
+                Channel = "ALL_IN_SCAN",
                 IsRefund = false,
-                AuthCode = "284543326353324755",
+                AuthCode = AuthCode,
                 BillNumber = billNumber,
                 NetAmount = 0.01M,
                 Title = "Wayne Payment",
@@ -34,10 +39,12 @@ namespace Fuel.Payment.Service.Pay
                 Config = ""
             };
             var eProcessor = AsyncPaymentProcessorFactory.Default.Get(eOrder);
-            var payConfig = await eProcessor.Initialize(eOrder).ConfigureAwait(false);
-            eOrder.Config = payConfig.electronicOrderModel?.Config;
+            //var payConfig = await eProcessor.Initialize(eOrder).ConfigureAwait(false);
+            //eOrder.Config = payConfig.electronicOrderModel?.Config;
             var genericResponseAlipay = await eProcessor.Process(eOrder).ConfigureAwait(false);
-            return new ServiceResponse { StatusCode = HttpStatusCode.OK, Data = null };
+
+            //var Result = await eProcessor.PaymentResult(genericResponseAlipay, eOrder).ConfigureAwait(false);
+            return new ServiceResponse { StatusCode = HttpStatusCode.OK, Data = genericResponseAlipay };
         }
         private string GetPaymentChannelByPaymentId(PaymentID paymentID)
         {

+ 8 - 2
FuelCloud/src/Fuel.Payment.Service/UnionPayProcessor/MiniUnionPayProcessor.cs

@@ -1,4 +1,5 @@
-using Fuel.Payment.Core.Models;
+using Fuel.Payment.Core;
+using Fuel.Payment.Core.Models;
 using Fuel.Payment.Core.Models.UnionPay;
 using Fuel.Payment.Service.Factory;
 using Newtonsoft.Json;
@@ -16,7 +17,12 @@ namespace Fuel.Payment.Service.UnionPayProcessor
         private readonly NLog.Logger logger = NLog.LogManager.GetLogger("Main");
         private readonly AutoResetEvent autoEvent = new AutoResetEvent(false);
 
-        public override async Task<GenericProcessResponse> Initialize(ElectronicOrderModel order)
+        protected override async Task<ElectronicOrderModel> PaymentResult(GenericProcessResponse processResponse, ElectronicOrderModel order)
+        {
+            return order;
+        }
+
+        protected override async Task<GenericProcessResponse> Initialize(ElectronicOrderModel order)
         {
             return new GenericProcessResponse()
             {

+ 7 - 1
FuelCloud/src/Fuel.Payment.Service/UnionPayProcessor/UnionPayProcessor.cs

@@ -9,6 +9,7 @@ using System.Text;
 using System.Threading.Tasks;
 using Fuel.Payment.Core.Models;
 using System.Xml.Linq;
+using Fuel.Payment.Core;
 
 namespace Fuel.Payment.Service.UnionPayProcessor
 {
@@ -16,12 +17,17 @@ namespace Fuel.Payment.Service.UnionPayProcessor
     {
         private readonly NLog.Logger logger = NLog.LogManager.GetLogger("Main");
 
+        protected override async Task<ElectronicOrderModel> PaymentResult(GenericProcessResponse processResponse, ElectronicOrderModel order)
+        {
+            return order;
+        }
+
         /// <summary>
         /// 初始化支付参数
         /// </summary>
         /// <param name="order"></param>
         /// <returns></returns>
-        public override async Task<GenericProcessResponse> Initialize(ElectronicOrderModel order)
+        protected override async Task<GenericProcessResponse> Initialize(ElectronicOrderModel order)
         {
             string payXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<UnionPayConfig xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\r\n  <scanUrl>https://mobl-test.chinaums.com/yd-19904</scanUrl>\r\n  <clientId>AC0CF5AAD39942FF8A86754DDE6A431D</clientId>\r\n  <merchantCode>123456789900081</merchantCode>\r\n  <charset>UTF-8</charset>\r\n  <miniUrl>https://mobl-test.chinaums.com/yd-19904/v4/bc/pay</miniUrl>\r\n  <appId>10037ca75e6125aa015e9e12a89b001b</appId>\r\n  <mid>89844175541AAAW</mid>\r\n  <cloudIp>139.196.81.254</cloudIp>\r\n  <terminalCode>00810001</terminalCode>\r\n</UnionPayConfig>";
             UnionPayConfig config = Parse(payXml);

+ 24 - 0
FuelCloud/src/FuelServer.Core/ConstKey.cs

@@ -0,0 +1,24 @@
+namespace FuelServer.Core
+{
+
+    /// <summary>
+    /// 系统的常量定义
+    /// </summary>
+    public static class ConstKey
+    {
+        /// <summary>
+        /// key
+        /// </summary>
+        public const string JwtKey = "e5d37731-9010-4718-956e-541745d01687";
+
+        /// <summary>
+        /// Issuer
+        /// </summary>
+        public const string JwtIssuer = "fuelServer.com";
+
+        /// <summary>
+        /// Audience
+        /// </summary>
+        public const string JwtAudience = "fuelServer.com";
+    }
+}

+ 9 - 0
FuelCloud/src/FuelServer.Core/FuelServer.Core.csproj

@@ -0,0 +1,9 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+  <PropertyGroup>
+    <TargetFramework>net8.0</TargetFramework>
+    <ImplicitUsings>enable</ImplicitUsings>
+    <Nullable>enable</Nullable>
+  </PropertyGroup>
+
+</Project>