Browse Source

支付成功回写给课程状态

warr.qian 2 years ago
parent
commit
f222ba0e83
1 changed files with 18 additions and 7 deletions
  1. 18 7
      Service/PaymentService.cs

+ 18 - 7
Service/PaymentService.cs

@@ -14,11 +14,13 @@ using WingPaymentService.Common;
 using WingInterfaceLibrary.Enum;
 using WingInterfaceLibrary.Request;
 using WingPaymentService.Common.WeChat;
+using WingInterfaceLibrary.Request.Courses;
 
 namespace WingPaymentService.Service
 {
     public class PaymentService : JsonRpcService, IPaymentService
     {
+        private IEducationService _educationService;
         private IAuthenticationService _authenticationService;
         private IPaymentDBService _paymentDBService;
         private AlipayCommon _alipayCommon;
@@ -30,6 +32,7 @@ namespace WingPaymentService.Service
             base.Load(jsonRpcClientPool);
             _paymentDBService = GetProxy<IPaymentDBService>();
             _authenticationService = GetProxy<IAuthenticationService>();
+            _educationService = GetProxy<IEducationService>();
         }
         /// <summary>
         /// 购买接口
@@ -176,10 +179,11 @@ namespace WingPaymentService.Service
             var totalAmount = keyValuePairs.GetValueOrDefault("total_amount");
             var paymentRecordCode = keyValuePairs.GetValueOrDefault("pay_record_code");
             var payStatus = keyValuePairs.GetValueOrDefault("trade_status") == "TRADE_SUCCESS" ? WingInterfaceLibrary.Enum.PayStatusEnum.Paid : WingInterfaceLibrary.Enum.PayStatusEnum.NoPay;
-            await UpdatePayStatus(paymentRecordCode, payStatus, uriParams);
+            var payTime = DateTime.UtcNow;
+            await UpdatePayStatus(paymentRecordCode, payStatus, uriParams, payTime);
             if(payStatus == PayStatusEnum.Paid)
             {
-                return await UpdateOrderStatus(payOutTradeNo, payStatus, totalAmount);
+                return await UpdateOrderStatus(payOutTradeNo, payStatus, totalAmount, payTime);
             }
             return false;
         }
@@ -193,15 +197,17 @@ namespace WingPaymentService.Service
             var totalAmount = (double.Parse(paramValues.GetValueOrDefault("total_fee")?.ToString())/100).ToString("0.00");
             var payRecordCode = paramValues.GetValueOrDefault("pay_record_code")?.ToString();
             var payStatus = paramValues.GetValueOrDefault("result_code")?.ToString() == "SUCCESS" ? PayStatusEnum.Paid : PayStatusEnum.NoPay;
-            await UpdatePayStatus(payRecordCode, payStatus, request);
+            var payTime = DateTime.UtcNow;
+            await UpdatePayStatus(payRecordCode, payStatus, request, payTime);
             if(payStatus == PayStatusEnum.Paid)
             {
-                return await UpdateOrderStatus(payOutTradeNo, payStatus, totalAmount);
+                var result = await UpdateOrderStatus(payOutTradeNo, payStatus, totalAmount, payTime);
+                return result;
             }
             return false;
         }
 
-        private async Task<bool> UpdateOrderStatus(string orderCode, PayStatusEnum payStatus, string totalAmount)
+        private async Task<bool> UpdateOrderStatus(string orderCode, PayStatusEnum payStatus, string totalAmount, DateTime payTime)
         {
             var orderInfo = await _paymentDBService.GetOrderDetailAsync(new GetOrderDetailDBRequest{ OrderCode = orderCode});
             if(orderInfo.OrderAmount.ToString("0.00") != totalAmount)
@@ -213,14 +219,19 @@ namespace WingPaymentService.Service
                 OrderCode = orderCode,
                 PayStatus = payStatus
             });
+            await _educationService.PaymentCallbackAsync(new PaymentCallbackRequest{
+                PaymentOrderCode = orderCode,
+                PayStatus = payStatus,
+                PayTime = payTime
+            });
             return result.IsSuccess;
         }
 
-        private async Task<UpdatePaymentRecordResultDTO> UpdatePayStatus(string paymentRecordCode, PayStatusEnum payStatus, string payResContent)
+        private async Task<UpdatePaymentRecordResultDTO> UpdatePayStatus(string paymentRecordCode, PayStatusEnum payStatus, string payResContent, DateTime payTime)
         {
             var updateRecordInfo = new UpdatePaymentRecordDBRequest();
             updateRecordInfo.Code = paymentRecordCode;
-            updateRecordInfo.PayTime = DateTime.UtcNow;
+            updateRecordInfo.PayTime = payTime;
             updateRecordInfo.PayStatus = payStatus;
             updateRecordInfo.PayResContent = payResContent;
             return await _paymentDBService.UpdatePaymentRecordAsync(updateRecordInfo);