Browse Source

支付宝支付接入

smj_7038 3 years ago
parent
commit
45810c078a

+ 156 - 7
Central.Control.WebApi/App_Data/Central.Control.WebApi.xml

@@ -224,15 +224,15 @@
             <param name="req"></param>
             <returns></returns>
         </member>
-        <member name="M:Central.Control.WebApi.Controllers.OrderController.AliPayNotify">
+        <member name="M:Central.Control.WebApi.Controllers.OrderController.PayRedirect(System.String)">
             <summary>
-            支付宝支付回写
+            支付跳转地址
             </summary>
             <returns></returns>
         </member>
-        <member name="M:Central.Control.WebApi.Controllers.OrderController.PayRedirect(System.String)">
+        <member name="M:Central.Control.WebApi.Controllers.OrderController.AliPayNotify">
             <summary>
-            支付宝支付回写
+            支付宝支付回写(已测试好,勿动)
             </summary>
             <returns></returns>
         </member>
@@ -242,6 +242,12 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="M:Central.Control.WebApi.Controllers.OrderController.AppDeviceTest">
+            <summary>
+            app设备测试
+            </summary>
+            <returns></returns>
+        </member>
         <member name="T:Central.Control.WebApi.Controllers.ProductController">
             <summary>
             订单相关接口
@@ -322,6 +328,31 @@
             库存
             </summary>
         </member>
+        <member name="T:Central.Control.WebApi.DbEntity.YW_OrderLog">
+            <summary>
+            YW_OrderLog订单日志表
+            </summary>
+        </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_OrderLog.Id">
+            <summary>
+            主键ID
+            </summary>
+        </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_OrderLog.OrderId">
+            <summary>
+            订单id
+            </summary>
+        </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_OrderLog.Title">
+            <summary>
+            日志标题
+            </summary>
+        </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_OrderLog.Content">
+            <summary>
+            操作内容
+            </summary>
+        </member>
         <member name="T:Central.Control.WebApi.DbEntity.YW_OrderProcess">
             <summary>
             YW_OrderProcess订单制作过程表
@@ -447,6 +478,36 @@
             付款时间
             </summary>
         </member>
+        <member name="T:Central.Control.WebApi.DbEntity.YW_PayCallLog">
+            <summary>
+            YW_PayCallLog支付回写日志表
+            </summary>
+        </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_PayCallLog.Id">
+            <summary>
+            主键ID
+            </summary>
+        </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_PayCallLog.PaySerialId">
+            <summary>
+            支付流水号
+            </summary>
+        </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_PayCallLog.OutTradeNo">
+            <summary>
+            外部订单号
+            </summary>
+        </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_PayCallLog.PayWay">
+            <summary>
+            支付类型
+            </summary>
+        </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_PayCallLog.PayResponse">
+            <summary>
+            回写原始内容
+            </summary>
+        </member>
         <member name="T:Central.Control.WebApi.DbEntity.SYS_Device">
             <summary>
             设备表
@@ -492,6 +553,11 @@
             购买设备id
             </summary>
         </member>
+        <member name="P:Central.Control.WebApi.DbEntity.YW_Order.Name">
+            <summary>
+            订单名称
+            </summary>
+        </member>
         <member name="P:Central.Control.WebApi.DbEntity.YW_Order.Price">
             <summary>
             订单金额
@@ -652,6 +718,11 @@
             YW_ORDERDETAILS商品订单详细表
             </summary>
         </member>
+        <member name="P:Central.Control.WebApi.EFDbContext.CentralControlContext.YW_OrderLog">
+            <summary>
+            YW_OrderLog订单日志表
+            </summary>
+        </member>
         <member name="P:Central.Control.WebApi.EFDbContext.CentralControlContext.SYS_LoginSession">
             <summary>
             SYS_LoginSession系统登录信息
@@ -662,6 +733,11 @@
             YW_PayCall支付回写表
             </summary>
         </member>
+        <member name="P:Central.Control.WebApi.EFDbContext.CentralControlContext.YW_PayCallLog">
+            <summary>
+            YW_PayCallLog支付回写日志表
+            </summary>
+        </member>
         <member name="P:Central.Control.WebApi.EFDbContext.CentralControlContext.YW_OrderProcess">
             <summary>
             YW_OrderProcess订单制作过程表
@@ -1462,9 +1538,16 @@
             <param name="req"></param>
             <returns></returns>
         </member>
+        <member name="M:Central.Control.WebApi.Service.Interface.IOrderService.AliPayProcess(System.String)">
+            <summary>
+            获取支付宝支付链接
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
         <member name="M:Central.Control.WebApi.Service.Interface.IOrderService.AliPayNotify">
             <summary>
-            支付宝支付回写
+            支付宝支付回写(已测试好,勿动)
             </summary>
             <returns></returns>
         </member>
@@ -1499,6 +1582,59 @@
             </summary>
             <returns></returns>
         </member>
+        <member name="T:Central.Control.WebApi.Service.Interface.IYWLogService">
+            <summary>
+            业务日志相关
+            </summary>
+        </member>
+        <member name="M:Central.Control.WebApi.Service.Interface.IYWLogService.WriteOrderLog(System.String,System.String,System.String,System.String)">
+            <summary>
+            写入订单日志
+            </summary>
+            <param name="orderId"></param>
+            <param name="title"></param>
+            <param name="content"></param>
+            <param name="opreater"></param>
+        </member>
+        <member name="M:Central.Control.WebApi.Service.Interface.IYWLogService.WritePayCallLog(System.String,System.String,Central.Control.WebApi.Enum.PayWayEnum,System.String)">
+            <summary>
+            写入支付回写日志
+            </summary>
+            <param name="paySerialId">支付流水号</param>
+            <param name="outTradeNo">外部订单号</param>
+            <param name="payWay">支付类型</param>
+            <param name="payResponse">回写原始内容</param>
+        </member>
+        <member name="T:Central.Control.WebApi.Service.YWLogService">
+            <summary>
+            业务日志相关
+            </summary>
+        </member>
+        <member name="M:Central.Control.WebApi.Service.YWLogService.#ctor(Central.Control.WebApi.EFDbContext.IDbContext,Central.Control.WebApi.Log4net.ILog4NetHelper)">
+            <summary>
+            
+            </summary>
+            <param name="dbContent"></param>
+            <param name="log4NetHelper"></param>
+        </member>
+        <member name="M:Central.Control.WebApi.Service.YWLogService.WriteOrderLog(System.String,System.String,System.String,System.String)">
+            <summary>
+            写入订单日志
+            </summary>
+            <param name="orderId"></param>
+            <param name="title"></param>
+            <param name="content"></param>
+            <param name="opreater"></param>
+        </member>
+        <member name="M:Central.Control.WebApi.Service.YWLogService.WritePayCallLog(System.String,System.String,Central.Control.WebApi.Enum.PayWayEnum,System.String)">
+            <summary>
+            写入支付回写日志
+            </summary>
+            <param name="paySerialId">支付流水号</param>
+            <param name="outTradeNo">外部订单号</param>
+            <param name="payWay">支付类型</param>
+            <param name="payResponse">回写原始内容</param>
+        </member>
         <member name="T:Central.Control.WebApi.Service.LoginService">
             <summary>
             
@@ -1533,13 +1669,19 @@
             支付宝回写地址
             </summary>
         </member>
-        <member name="M:Central.Control.WebApi.Service.OrderService.#ctor(Central.Control.WebApi.EFDbContext.IDbContext,Central.Control.WebApi.Service.Interface.IUserService,Central.Control.WebApi.Log4net.ILog4NetHelper)">
+        <member name="F:Central.Control.WebApi.Service.OrderService.payRedirectUrl">
+            <summary>
+            支付中间页地址
+            </summary>
+        </member>
+        <member name="M:Central.Control.WebApi.Service.OrderService.#ctor(Central.Control.WebApi.EFDbContext.IDbContext,Central.Control.WebApi.Service.Interface.IUserService,Central.Control.WebApi.Log4net.ILog4NetHelper,Central.Control.WebApi.Service.Interface.IYWLogService)">
             <summary>
             
             </summary>
             <param name="dbContent"></param>
             <param name="userService"></param>
             <param name="log4NetHelper"></param>
+            <param name="ywLogService"></param>
         </member>
         <member name="M:Central.Control.WebApi.Service.OrderService.Order(Central.Control.WebApi.Models.Request.OrderRequestDto)">
             <summary>
@@ -1556,9 +1698,16 @@
             <param name="req"></param>
             <returns></returns>
         </member>
+        <member name="M:Central.Control.WebApi.Service.OrderService.AliPayProcess(System.String)">
+            <summary>
+            获取支付宝支付链接
+            </summary>
+            <param name="id"></param>
+            <returns></returns>
+        </member>
         <member name="M:Central.Control.WebApi.Service.OrderService.AliPayNotify">
             <summary>
-            支付宝回写
+            支付宝支付回写(已测试好,勿动)
             </summary>
             <returns></returns>
         </member>

+ 9 - 0
Central.Control.WebApi/Central.Control.WebApi.csproj

@@ -217,9 +217,11 @@
     <Compile Include="Controllers\ProductController.cs" />
     <Compile Include="DbEntity\SYS_LoginSession.cs" />
     <Compile Include="DbEntity\YW_DevicePacking.cs" />
+    <Compile Include="DbEntity\YW_OrderLog.cs" />
     <Compile Include="DbEntity\YW_OrderProcess.cs" />
     <Compile Include="DbEntity\YW_Packing.cs" />
     <Compile Include="DbEntity\YW_PayCall.cs" />
+    <Compile Include="DbEntity\YW_PayCallLog.cs" />
     <Compile Include="EFDbContext\CentralControlContext.cs" />
     <Compile Include="EFDbContext\IDbContext.cs" />
     <Compile Include="Enum\OrderStatusEnum.cs" />
@@ -255,6 +257,8 @@
     <Compile Include="Service\Interface\IOrderService.cs" />
     <Compile Include="Service\Interface\IProductService.cs" />
     <Compile Include="Service\Interface\IUserService.cs" />
+    <Compile Include="Service\Interface\IYWLogService.cs" />
+    <Compile Include="Service\YWLogService.cs" />
     <Compile Include="Service\LoginService.cs" />
     <Compile Include="Service\OrderService.cs" />
     <Compile Include="Service\ProductService.cs" />
@@ -263,6 +267,11 @@
   <ItemGroup>
     <Content Include="favicon.ico" />
     <Content Include="Global.asax" />
+    <Content Include="Html\Error.html" />
+    <Content Include="Html\ErrorPayDevice.html" />
+    <Content Include="Html\img\error.png" />
+    <Content Include="Html\OrderNotExist.html" />
+    <Content Include="Html\img\warning.png" />
     <Content Include="Web.config" />
     <Content Include="Web.Debug.config">
       <DependentUpon>Web.config</DependentUpon>

+ 51 - 11
Central.Control.WebApi/Controllers/OrderController.cs

@@ -77,7 +77,31 @@ namespace Central.Control.WebApi.Controllers
         }
 
         /// <summary>
-        /// 支付宝支付回写
+        /// 支付跳转地址
+        /// </summary>
+        /// <returns></returns>
+        [AllowAnonymous]
+        [HttpGet]
+        [Route("payredirect/{id}")]
+        public RedirectResult PayRedirect(string id)
+        {
+            string userAgent = HttpContext.Current.Request.UserAgent;
+
+            string redirectUrl = "http://api.rgtech.ltd/html/errorpaydevice.html";
+            if (userAgent.ToLower().Contains("micromessenger"))
+            {
+                // 微信处理 微信支付暂接入所以暂时不管
+            }
+            else if (userAgent.ToLower().Contains("alipayclient"))
+            {
+                // 支付宝处理
+                redirectUrl = _orderService.AliPayProcess(id);
+            }
+            return this.Redirect(redirectUrl);
+        }
+
+        /// <summary>
+        /// 支付宝支付回写(已测试好,勿动)
         /// </summary>
         /// <returns></returns>
         [AllowAnonymous]
@@ -91,27 +115,43 @@ namespace Central.Control.WebApi.Controllers
         }
 
         /// <summary>
-        /// 支付宝支付回写
+        /// 支付测试
         /// </summary>
         /// <returns></returns>
-        [AllowAnonymous]
         [HttpGet]
-        [Route("payredirect")]
-        public RedirectResult PayRedirect(string url)
+        [Route("paytest")]
+        public ApiResult<AlipayF2FPrecreateResult> PayTest()
         {
-            return this.Redirect(url);
+            return _orderService.PayTest();
         }
 
         /// <summary>
-        /// 支付测试
+        /// app设备测试
         /// </summary>
         /// <returns></returns>
+        [AllowAnonymous]
         [HttpGet]
-        [Route("paytest")]
-        public ApiResult<AlipayF2FPrecreateResult> PayTest()
+        [Route("appdevicetest")]
+        public HttpResponseMessage AppDeviceTest()
         {
-            return _orderService.PayTest();
+            string userAgent =  HttpContext.Current.Request.UserAgent; ;
+
+            string result = "";
+            if (userAgent.ToLower().Contains("micromessenger"))
+            {
+                result = $"<h1>我是微信:{userAgent}</h1>";
+            }
+            else if (userAgent.ToLower().Contains("alipayclient"))
+            {
+                result = $"<h1>我是支付宝:{userAgent}</h1>";
+            }
+            else
+            {
+                result = $"<h1>请用微信或者支付宝扫码支付:{userAgent}</h1>";
+            }
+            HttpResponseMessage responseMessage = new HttpResponseMessage { Content = new StringContent(result, Encoding.GetEncoding("UTF-8"), "text/html") };
+            return responseMessage;
         }
-        
+
     }
 }

+ 6 - 0
Central.Control.WebApi/DbEntity/YW_Order.cs

@@ -26,6 +26,12 @@ namespace Central.Control.WebApi.DbEntity
 		[Required(AllowEmptyStrings = true)]
 		public string DeviceId { set; get; } = string.Empty;
 		/// <summary>
+		/// 订单名称
+		/// </summary>
+		[MaxLength(100)]
+		[Required(AllowEmptyStrings = true)]
+		public string Name { set; get; } = string.Empty;
+		/// <summary>
 		/// 订单金额
 		/// </summary>
 		public decimal Price { set; get; }

+ 40 - 0
Central.Control.WebApi/DbEntity/YW_OrderLog.cs

@@ -0,0 +1,40 @@
+using Ant.Core.SqlServer.BaseEntities;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Web;
+
+namespace Central.Control.WebApi.DbEntity
+{
+    /// <summary>
+    /// YW_OrderLog订单日志表
+    /// </summary>
+    public class YW_OrderLog : BaseEntity
+    {
+        /// <summary>
+        /// 主键ID
+        /// </summary>
+        [Key]
+        [MaxLength(50)]
+        public string Id { set; get; } = string.Empty;
+        /// <summary>
+        /// 订单id
+        /// </summary>
+        [MaxLength(50)]
+        [Required(AllowEmptyStrings = true)]
+        public string OrderId { set; get; } = string.Empty;
+        /// <summary>
+        /// 日志标题
+        /// </summary>
+        [MaxLength(50)]
+        [Required(AllowEmptyStrings = true)]
+        public string Title { set; get; } = string.Empty;
+        /// <summary>
+        /// 操作内容
+        /// </summary>
+        [MaxLength(500)]
+        [Required(AllowEmptyStrings = true)]
+        public string Content { set; get; } = string.Empty;
+    }
+}

+ 43 - 0
Central.Control.WebApi/DbEntity/YW_PayCallLog.cs

@@ -0,0 +1,43 @@
+using Ant.Core.SqlServer.BaseEntities;
+using Central.Control.WebApi.Enum;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Web;
+
+namespace Central.Control.WebApi.DbEntity
+{
+    /// <summary>
+    /// YW_PayCallLog支付回写日志表
+    /// </summary>
+    public class YW_PayCallLog : BaseEntity
+    {
+        /// <summary>
+        /// 主键ID
+        /// </summary>
+        [Key]
+        [MaxLength(50)]
+        public string Id { set; get; } = string.Empty;
+        /// <summary>
+        /// 支付流水号
+        /// </summary>
+        [MaxLength(100)]
+        [Required(AllowEmptyStrings = true)]
+        public string PaySerialId { set; get; } = string.Empty;
+        /// <summary>
+        /// 外部订单号
+        /// </summary>
+        [MaxLength(50)]
+        [Required(AllowEmptyStrings = true)]
+        public string OutTradeNo { set; get; } = string.Empty;
+        /// <summary>
+        /// 支付类型
+        /// </summary>
+        public PayWayEnum PayWay { set; get; } = PayWayEnum.UnKnow;
+        /// <summary>
+        /// 回写原始内容
+        /// </summary>
+        public string PayResponse { set; get; } = string.Empty;
+    }
+}

+ 10 - 0
Central.Control.WebApi/EFDbContext/CentralControlContext.cs

@@ -40,6 +40,11 @@ namespace Central.Control.WebApi.EFDbContext
         /// </summary>
         public DbSet<YW_OrderDetails> YW_ORDERDETAILS { get; set; }
 
+        /// <summary>
+        /// YW_OrderLog订单日志表
+        /// </summary>
+        public DbSet<YW_OrderLog> YW_OrderLog { get; set; }
+
         /// <summary>
         /// SYS_LoginSession系统登录信息
         /// </summary>
@@ -50,6 +55,11 @@ namespace Central.Control.WebApi.EFDbContext
         /// </summary>
         public DbSet<YW_PayCall> YW_PayCall { get; set; }
 
+        /// <summary>
+        /// YW_PayCallLog支付回写日志表
+        /// </summary>
+        public DbSet<YW_PayCallLog> YW_PayCallLog { get; set; }
+
         /// <summary>
         /// YW_OrderProcess订单制作过程表
         /// </summary>

+ 11 - 0
Central.Control.WebApi/Html/Error.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <title>错误</title>
+</head>
+<body style="text-align:center;margin-top:30%;font-size:xx-large">
+    <img src="img/error.png" style="border:none;outline:none;width:250px;height:250px;" />
+    <h2>系统异常</h2>
+</body>
+</html>

+ 11 - 0
Central.Control.WebApi/Html/ErrorPayDevice.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <title>支付方式</title>
+</head>
+<body style="text-align:center;margin-top:30%;font-size:xx-large">
+    <img src="img/warning.png" style="border:none;outline:none;width:250px;height:250px;" />
+    <h2>请使用 支付宝 扫码支付</h2>
+</body>
+</html>

+ 11 - 0
Central.Control.WebApi/Html/OrderNotExist.html

@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8" />
+    <title>订单</title>
+</head>
+<body style="text-align:center;margin-top:30%;font-size:xx-large">
+    <img src="img/warning.png" style="border:none;outline:none;width:250px;height:250px;" />
+    <h2>订单不存在</h2>
+</body>
+</html>

BIN
Central.Control.WebApi/Html/img/error.png


BIN
Central.Control.WebApi/Html/img/warning.png


+ 8 - 1
Central.Control.WebApi/Service/Interface/IOrderService.cs

@@ -35,7 +35,14 @@ namespace Central.Control.WebApi.Service.Interface
         ApiResult OrderProcess(OrderProcessRequestDto req);
 
         /// <summary>
-        /// 支付宝支付回写
+        /// 获取支付宝支付链接
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        string AliPayProcess(string id);
+
+        /// <summary>
+        /// 支付宝支付回写(已测试好,勿动)
         /// </summary>
         /// <returns></returns>
         string AliPayNotify();

+ 33 - 0
Central.Control.WebApi/Service/Interface/IYWLogService.cs

@@ -0,0 +1,33 @@
+using Central.Control.WebApi.Enum;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Central.Control.WebApi.Service.Interface
+{
+    /// <summary>
+    /// 业务日志相关
+    /// </summary>
+    public interface IYWLogService
+    {
+        /// <summary>
+        /// 写入订单日志
+        /// </summary>
+        /// <param name="orderId"></param>
+        /// <param name="title"></param>
+        /// <param name="content"></param>
+        /// <param name="opreater"></param>
+        void WriteOrderLog(string orderId, string title, string content, string opreater);
+
+        /// <summary>
+        /// 写入支付回写日志
+        /// </summary>
+        /// <param name="paySerialId">支付流水号</param>
+        /// <param name="outTradeNo">外部订单号</param>
+        /// <param name="payWay">支付类型</param>
+        /// <param name="payResponse">回写原始内容</param>
+        void WritePayCallLog(string paySerialId, string outTradeNo, PayWayEnum payWay, string payResponse);
+    }
+}

+ 128 - 24
Central.Control.WebApi/Service/OrderService.cs

@@ -21,6 +21,7 @@ using System.Collections.Specialized;
 using System.Configuration;
 using System.IO;
 using System.Linq;
+using System.Text;
 using System.Web;
 
 namespace Central.Control.WebApi.Service
@@ -37,10 +38,15 @@ namespace Central.Control.WebApi.Service
         /// 支付宝回写地址
         /// </summary>
         public readonly static string aliNotifyUrl = ConfigurationManager.AppSettings["aliNotifyUrl"].ToString();
+        /// <summary>
+        /// 支付中间页地址
+        /// </summary>
+        public readonly static string payRedirectUrl = ConfigurationManager.AppSettings["payredirecturl"].ToString();
 
         private readonly IDbContext _dbContent;
         private readonly IUserService _userService;
         private readonly ILog4NetHelper _log4NetHelper;
+        private readonly IYWLogService _ywLogService;
 
         /// <summary>
         /// 
@@ -48,14 +54,17 @@ namespace Central.Control.WebApi.Service
         /// <param name="dbContent"></param>
         /// <param name="userService"></param>
         /// <param name="log4NetHelper"></param>
+        /// <param name="ywLogService"></param>
         public OrderService(
             IDbContext dbContent,
             IUserService userService,
-            ILog4NetHelper log4NetHelper)
+            ILog4NetHelper log4NetHelper,
+            IYWLogService ywLogService)
         {
             _dbContent = dbContent;
             _userService = userService;
             _log4NetHelper = log4NetHelper;
+            _ywLogService = ywLogService;
         }
 
         /// <summary>
@@ -126,7 +135,7 @@ namespace Central.Control.WebApi.Service
             var orderId = IdGenerator.NewId();
             List<YW_OrderDetails> orderDetailAdds = new List<YW_OrderDetails>();
             List<YW_OrderProcess> orderProcessAdds = new List<YW_OrderProcess>();
-
+            StringBuilder orderName = new StringBuilder();
             foreach (var o in req.OrderInfo)
             {
                 var currentProduct = products.FirstOrDefault(p => p.Id == o.ProductId);
@@ -156,6 +165,10 @@ namespace Central.Control.WebApi.Service
                     Count = o.Count,
                     CreateBY = session.UserId
                 });
+                if (orderName.Length < 40)
+                {
+                    orderName.Append($"{currentProduct.Name},");
+                }
             }
             #endregion
 
@@ -163,6 +176,7 @@ namespace Central.Control.WebApi.Service
             YW_Order order = new YW_Order()
             {
                 Id = orderId,
+                Name = orderName.ToString().TrimEnd(','),
                 DeviceId = session.UserId,
                 Price = orderDetailAdds.Sum(p => p.Price * p.Count),
                 PayStatus = PayStatusEnum.UnPay,
@@ -177,7 +191,7 @@ namespace Central.Control.WebApi.Service
                 DeviceId = session.UserId,
                 CurrentOrderStatus = OrderStatusEnum.UnPay,
                 Message = "下单成功",
-                CreateBY = session.Id
+                CreateBY = session.UserId
             };
             #endregion
 
@@ -190,16 +204,14 @@ namespace Central.Control.WebApi.Service
             _dbContent.SaveChanges();
             #endregion
 
-            #region 5、支付宝支付--目前直接入支付宝支付测试,后期需要替换成中间页面
-
-
-
-            #endregion
+            // 写入订单日志
+            _ywLogService.WriteOrderLog(order.Id, "下单", "下单成功", session.UserId);
 
             return new ApiResult<OrderResponseDto>(new OrderResponseDto()
             {
                 OrderId = order.Id,
-                Price = order.Price
+                Price = order.Price,
+                QrCode = string.Format(payRedirectUrl, order.Id)
             });
         }
 
@@ -263,7 +275,7 @@ namespace Central.Control.WebApi.Service
             {
                 return new ApiResult(ApiStatusCode.InvalidParameter, "未支付或已取消订单不能回写流程");
             }
-            var seesion = _userService.GetLoginSession();
+            var session = _userService.GetLoginSession();
             // 修改订单状态
             order.OrderStatus = req.OrderStatus;
             // 记录订单流程
@@ -271,19 +283,99 @@ namespace Central.Control.WebApi.Service
             {
                 Id = IdGenerator.NewId(),
                 OrderId = req.OrderId,
-                DeviceId = seesion.UserId,
+                DeviceId = session.UserId,
                 CurrentOrderStatus = req.OrderStatus,
                 Message = req.Message,
-                CreateBY = seesion.UserId
+                CreateBY = session.UserId
             };
             _dbContent.Set<YW_OrderProcess>().Add(orderProcess);
             _dbContent.SaveChanges();
 
+            // 写入订单日志
+            _ywLogService.WriteOrderLog(order.Id, "流程回写", $"回写流程状态{req.OrderStatus.ToString()}", session.UserId);
+
             return new ApiResult();
         }
 
         /// <summary>
-        /// 支付宝回写
+        /// 获取支付宝支付链接
+        /// </summary>
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public string AliPayProcess(string id)
+        {
+            // 1、先查询订单是否存在
+            var order = _dbContent.Set<YW_Order>().FirstOrDefault(p => p.IsDelete == 0 && p.Id == id);
+            if (order == null)
+            {
+                return "http://api.rgtech.ltd/html/ordernotexist.html";
+            }
+            string result = "http://api.rgtech.ltd/html/error.html";
+            // 查询订单详情
+            var orderDetails = _dbContent.Set<YW_OrderDetails>().Where(p => p.IsDelete == 0 && p.OrderId == order.Id).ToList();
+
+            #region 拼写支付宝支付参数
+
+            AlipayTradePrecreateContentBuilder builder = new AlipayTradePrecreateContentBuilder();
+            //收款账号
+            builder.seller_id = AliPayConfig.pid;
+            //订单编号
+            builder.out_trade_no = order.Id;
+            //订单总金额
+            builder.total_amount = order.Price.ToString();
+            //参与优惠计算的金额
+            //builder.discountable_amount = "";
+            //不参与优惠计算的金额
+            //builder.undiscountable_amount = "";
+            //订单名称
+            builder.subject = order.Name;
+            //自定义超时时间
+            builder.timeout_express = "10m";
+            //订单描述
+            builder.body = "";
+            //门店编号,很重要的参数,可以用作之后的营销
+            builder.store_id = order.DeviceId;
+            //操作员编号,很重要的参数,可以用作之后的营销
+            //builder.operator_id = "test";
+
+            //传入商品信息详情
+            List<GoodsInfo> gList = orderDetails?.Select(od => new GoodsInfo()
+            {
+                goods_id = od.Id,
+                goods_name = od.Name,
+                price = od.Price.ToString(),
+                quantity = od.Count.ToString()
+            }).ToList() ?? new List<GoodsInfo>();
+            builder.goods_detail = gList;
+
+            //系统商接入可以填此参数用作返佣
+            //ExtendParams exParam = new ExtendParams();
+            //exParam.sysServiceProviderId = "20880000000000";
+            //builder.extendParams = exParam;
+
+            #endregion
+
+            //如果需要接收扫码支付异步通知,那么请把下面两行注释代替本行。
+            //推荐使用轮询撤销机制,不推荐使用异步通知,避免单边账问题发生。
+            AlipayF2FPrecreateResult precreateResult = serviceClient.tradePrecreate(builder, aliNotifyUrl);//商户接收异步通知的地址,采用异步回写通知
+
+            switch (precreateResult.Status)
+            {
+                case ResultEnum.SUCCESS:
+                    result = precreateResult.response.QrCode;
+                    break;
+                case ResultEnum.FAILED:
+                case ResultEnum.UNKNOWN:
+                default:
+                    // 请求失败,记录日志
+                    _log4NetHelper.Error($"[AliPayProcess]-tradePrecreate失败:{JsonConvert.SerializeObject(precreateResult)}");
+                    break;
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 支付宝支付回写(已测试好,勿动)
         /// </summary>
         /// <returns></returns>
         public string AliPayNotify()
@@ -303,6 +395,14 @@ namespace Central.Control.WebApi.Service
             if (verifyResult && CheckParams()) //验签成功 && 关键业务参数校验成功
             {
                 _log4NetHelper.Info("[AliPayNotify]-验签成功");
+
+                string paySerialId = HttpContext.Current.Request.Form["trade_no"] ?? string.Empty;
+                string outTradeNo = HttpContext.Current.Request.Form["out_trade_no"] ?? string.Empty;
+                string payResponse = JsonConvert.SerializeObject(sPara);
+
+                // 写入支付日志-里面有trycatch
+                _ywLogService.WritePayCallLog(paySerialId, outTradeNo, PayWayEnum.AliPay, payResponse);
+
                 PayStatusEnum payStatus = PayStatusEnum.Fail;
                 if (HttpContext.Current.Request.Form["trade_status"] == "TRADE_SUCCESS")
                 {
@@ -311,8 +411,8 @@ namespace Central.Control.WebApi.Service
 
                 PayWriteBackRequestDto payWriteBack = new PayWriteBackRequestDto()
                 {
-                    PaySerialId = HttpContext.Current.Request.Form["trade_no"] ?? string.Empty,
-                    OrderId = HttpContext.Current.Request.Form["out_trade_no"] ?? string.Empty,
+                    PaySerialId = paySerialId,
+                    OrderId = outTradeNo,
                     PayStatus = payStatus,
                     PayWay = PayWayEnum.AliPay,
                     BuyerId = HttpContext.Current.Request.Form["buyer_id"] ?? string.Empty,
@@ -322,7 +422,7 @@ namespace Central.Control.WebApi.Service
                     TotalAmount = ConvertHelper.ToDecimal(HttpContext.Current.Request.Form["total_amount"]),
                     PayAmount = ConvertHelper.ToDecimal(HttpContext.Current.Request.Form["buyer_pay_amount"]),
                     PayTime = ConvertHelper.ToDateTime(HttpContext.Current.Request.Form["gmt_payment"]),
-                    PayResponse = JsonConvert.SerializeObject(sPara)
+                    PayResponse = payResponse
                 };
                 // 回写到实际表中
                 var result = PayWriteBack(payWriteBack);
@@ -360,13 +460,17 @@ namespace Central.Control.WebApi.Service
             }
             if (order.Price != req.TotalAmount)
             {
-                // 需要写入订单日志------------------------
-                return new ApiResult(ApiStatusCode.InvalidParameter, $"回写总金额与订单金额不匹配,订单号{order.Id};订单价格{order.Price};支付流水号{req.PaySerialId};支付订单总金额{req.TotalAmount}");
+                // 写入订单日志
+                string msg = $"回写总金额与订单金额不匹配,订单号{order.Id};订单价格{order.Price};支付流水号{req.PaySerialId};支付订单总金额{req.TotalAmount}";
+                _ywLogService.WriteOrderLog(order.Id, "支付回写", msg, req.PayWay.ToString());
+                return new ApiResult(ApiStatusCode.InvalidParameter, msg);
             }
             if (order.Price != req.PayAmount)
             {
-                // 需要写入订单日志------------------------
-                return new ApiResult(ApiStatusCode.InvalidParameter, $"回写支付金额与订单金额不匹配,订单号{order.Id};订单价格{order.Price};支付流水号{req.PaySerialId};支付订单已付金额{req.PayAmount}");
+                // 写入订单日志
+                string msg = $"回写支付金额与订单金额不匹配,订单号{order.Id};订单价格{order.Price};支付流水号{req.PaySerialId};支付订单已付金额{req.PayAmount}";
+                _ywLogService.WriteOrderLog(order.Id, "支付回写", msg, req.PayWay.ToString());
+                return new ApiResult(ApiStatusCode.InvalidParameter, msg);
             }
             var status = GetStatusByPayWriteBack(req.PayStatus);
             // 修改订单状态
@@ -393,6 +497,9 @@ namespace Central.Control.WebApi.Service
             _dbContent.Set<YW_PayCall>().Add(payCall);
             _dbContent.SaveChanges();
 
+            // 记录订单日志
+            _ywLogService.WriteOrderLog(order.Id, "支付回写", "回写成功", req.PayWay.ToString());
+
             return new ApiResult();
         }
 
@@ -493,8 +600,6 @@ namespace Central.Control.WebApi.Service
 
         }
 
-
-
         /// <summary>
         /// 
         /// </summary>
@@ -506,7 +611,7 @@ namespace Central.Control.WebApi.Service
             OrderStatusEnum orderStatus = OrderStatusEnum.UnPay;
             switch (payStatus)
             {
-                case  PayStatusEnum.UnPay:// 成功
+                case  PayStatusEnum.Paid:// 成功
                     orderStatus = OrderStatusEnum.Paid;
                     break;
                 default:// 失败
@@ -516,7 +621,6 @@ namespace Central.Control.WebApi.Service
             return new Tuple<PayStatusEnum, OrderStatusEnum>(payStatus, orderStatus);
         }
 
-
         /// <summary>
         /// 获取支付宝POST过来通知消息,并以“参数名=参数值”的形式组成数组
         /// </summary>

+ 94 - 0
Central.Control.WebApi/Service/YWLogService.cs

@@ -0,0 +1,94 @@
+using Ant.Core.Utils;
+using Central.Control.WebApi.DbEntity;
+using Central.Control.WebApi.EFDbContext;
+using Central.Control.WebApi.Enum;
+using Central.Control.WebApi.Log4net;
+using Central.Control.WebApi.Service.Interface;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Web;
+
+namespace Central.Control.WebApi.Service
+{
+    /// <summary>
+    /// 业务日志相关
+    /// </summary>
+    public class YWLogService: IYWLogService
+    {
+        private readonly IDbContext _dbContent;
+        private readonly ILog4NetHelper _log4NetHelper;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="dbContent"></param>
+        /// <param name="log4NetHelper"></param>
+        public YWLogService(
+            IDbContext dbContent,
+            ILog4NetHelper log4NetHelper)
+        {
+            _dbContent = dbContent;
+            _log4NetHelper = log4NetHelper;
+        }
+
+        /// <summary>
+        /// 写入订单日志
+        /// </summary>
+        /// <param name="orderId"></param>
+        /// <param name="title"></param>
+        /// <param name="content"></param>
+        /// <param name="opreater"></param>
+        public void WriteOrderLog(string orderId, string title, string content, string opreater)
+        {
+            try
+            {
+                if (content == null) content = string.Empty;
+                YW_OrderLog orderLog = new YW_OrderLog()
+                {
+                    Id = IdGenerator.NewId(),
+                    OrderId = orderId ?? string.Empty,
+                    Title = title ?? string.Empty,
+                    Content = content.Length >= 500 ? content.Substring(0, 499) : content,
+                    CreateBY = opreater ?? string.Empty
+                };
+                _dbContent.Set<YW_OrderLog>().Add(orderLog);
+                _dbContent.SaveChanges();
+            }
+            catch (Exception ee)
+            {
+                _log4NetHelper.Error("[写入订单日志WriteOrderLogAsync]", ee);
+            }
+        }
+
+        /// <summary>
+        /// 写入支付回写日志
+        /// </summary>
+        /// <param name="paySerialId">支付流水号</param>
+        /// <param name="outTradeNo">外部订单号</param>
+        /// <param name="payWay">支付类型</param>
+        /// <param name="payResponse">回写原始内容</param>
+        public void WritePayCallLog(string paySerialId, string outTradeNo, PayWayEnum payWay, string payResponse)
+        {
+            try
+            {
+                YW_PayCallLog payCallLog = new YW_PayCallLog()
+                {
+                    Id = IdGenerator.NewId(),
+                    PaySerialId = paySerialId ?? string.Empty,
+                    OutTradeNo = outTradeNo ?? string.Empty,
+                    PayWay = payWay,
+                    PayResponse = payResponse ?? string.Empty,
+                    CreateBY = "支付回写"
+                };
+                _dbContent.Set<YW_PayCallLog>().Add(payCallLog);
+                _dbContent.SaveChanges();
+            }
+            catch (Exception ee)
+            {
+                _log4NetHelper.Error("[写入支付回写日志WritePayCallLog]", ee);
+            }
+        }
+
+    }
+}

+ 2 - 1
Central.Control.WebApi/Web.config

@@ -18,7 +18,8 @@
     <add key="UnobtrusiveJavaScriptEnabled" value="true" />
     <!--<add key="ImagePrefix" value="http://192.168.1.6:8001/" />-->
     <add key="ImagePrefix" value="http://192.168.3.10:8001" />
-    
+
+    <add key="payredirecturl" value="http://api.rgtech.ltd/api/order/payredirect/{0}" />
     
     <!-- alipay start -->
     

+ 0 - 0
Central.Control.WebApi/log/Logs_20220322.txt