From 4cb523bee320f335100c63df4c8f51ed09fca9eb Mon Sep 17 00:00:00 2001 From: lingling <kety1122@163.com> Date: 星期四, 20 三月 2025 16:47:07 +0800 Subject: [PATCH] Merge branch 'master' of http://120.26.58.240:8888/r/LifePaymentApi --- LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs | 10 LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs | 2 LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml | 183 +++++++++++++ LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs | 64 ++++ LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs | 23 + LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs | 4 LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs | 41 +++ LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs | 10 LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs | 2 LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs | 197 +++++++++++++++ LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs | 15 + LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs | 1 LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs | 2 LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs | 16 + LifePayment/LifePayment.Domain/Ali/AliPayApi.cs | 6 LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs | 25 + LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml | 7 LifePayment/LifePayment.Application/LifePay/LifePayService.cs | 125 ++++++++- LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs | 4 19 files changed, 696 insertions(+), 41 deletions(-) diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs index 00d88e3..5fd06b6 100644 --- a/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs +++ b/LifePayment/LifePayment.Application.Contracts/LifePay/ILifePayService.cs @@ -10,6 +10,10 @@ public interface ILifePayService : IApplicationService { + + + //Task<ElectricParValueResponse> GetTopStatistics(); + /// <summary> /// 鑾峰彇鐢佃垂闈㈠�� /// </summary> @@ -54,8 +58,10 @@ /// <param name="orderNo"></param> /// <param name="acoolyOrderNo"></param> /// <param name="status"></param> + /// <param name="acoolyStatus"></param> + /// <param name="payAmount"></param> /// <returns></returns> - Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status); + Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount); /// <summary> /// 鍒涘缓鐢熸椿缂磋垂璇濊垂璁㈠崟 @@ -188,6 +194,14 @@ /// <returns></returns> Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input); + + /// <summary> + /// 鑾峰彇璁㈠崟璇︽儏 + /// </summary> + /// <param name="orderNo"></param> + /// <returns></returns> + Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo); + /// <summary> /// 鏍规嵁璁㈠崟鍙疯幏鍙栨敮浠樼姸鎬� /// </summary> diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs index b9f5cef..5d12f06 100644 --- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs +++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayInput.cs @@ -293,6 +293,7 @@ public string RefundCheckRemark { get; set; } } + public class RefundUserLifePayOrderInput : ChannelsBaseInput { public Guid Id { get; set; } @@ -403,7 +404,8 @@ /// <summary> /// 娉ㄥ唽鏃堕棿 /// </summary> - public DateTime? CreationTime { get; set; } + public DateTime? CreationTimeBegin { get; set; } + public DateTime? CreationTimeEnd { get; set; } } public class Model_UserAccountExtraProperties diff --git a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs index b1fc7b3..6bbd71c 100644 --- a/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs +++ b/LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs @@ -181,6 +181,11 @@ public decimal RechargeAmount { get; set; } /// <summary> + /// 瀹為檯鍏呭�奸噾棰� + /// </summary> + public decimal? ActualRechargeAmount { get; set; } + + /// <summary> /// 浼樻儬閲戦 /// </summary> public decimal DiscountAmount { get; set; } @@ -194,6 +199,12 @@ /// 鏀粯鏃堕棿 /// </summary> public DateTime? PayTime { get; set; } + + + /// <summary> + /// 骞冲彴鎵f閲戦 + /// </summary> + public decimal? PlatformDeductionAmount { get; set; } /// <summary> /// 鏀粯鐘舵�� @@ -230,13 +241,30 @@ /// </summary> public DateTime? RefundTime { get; set; } - + /// <summary> + /// 鐢宠閫�娆惧師鍥� + /// </summary> public string RefundApplyRemark { get; set; } + /// <summary> + /// 椹冲洖鍘熷洜 + /// </summary> public string RefundCheckRemark { get; set; } + /// <summary> + /// 渚涘簲鍟嗚鍗曞彿 + /// </summary> public string ACOOLYOrderNo { get; set; } + /// <summary> + /// 渚涘簲鍟嗚鍗曠姸鎬� + /// </summary> + public ACOOLYStatusEnum? ACOOLYStatus { get; set; } + + /// <summary> + /// 骞冲彴閫�娆剧姸鎬� + /// </summary> + public LifePayRefundStatusEnum? LifePayRefundStatus { get; set; } } public class LifePayOrderListTemplate @@ -424,6 +452,158 @@ public string ACOOLYOrderNo { get; set; } } +public class LifePayOrderOutput +{ + public Guid Id { get; set; } + + /// <summary> + /// 鐢ㄦ埛璐﹀彿 + /// </summary> + public string UserPhoneNumber { get; set; } + + public string UserName { get; set; } + + public string LifePayChannle { get; set; } + /// <summary> + /// 鐢熸椿缂磋垂鏀粯绫诲瀷 + /// </summary> + public LifePayTypeEnum? LifePayType { get; set; } + + /// <summary> + /// 璁㈠崟绫诲瀷 + /// </summary> + public LifePayOrderTypeEnum LifePayOrderType { get; set; } + + /// <summary> + /// 璁㈠崟鍙� + /// </summary> + public string OrderNo { get; set; } + + /// <summary> + /// 鍏呭�奸噾棰� + /// </summary> + public decimal RechargeAmount { get; set; } + + /// <summary> + /// 浼樻儬閲戦 + /// </summary> + public decimal DiscountAmount { get; set; } + + /// <summary> + /// 瀹炰粯閲戦 + /// </summary> + public decimal PayAmount { get; set; } + + /// <summary> + /// 鏀粯鏃堕棿 + /// </summary> + public DateTime? PayTime { get; set; } + + /// <summary> + /// 鏀粯鐘舵�� + /// </summary> + public LifePayStatusEnum PayStatus { get; set; } + + /// <summary> + /// 璁㈠崟鐘舵�� + /// </summary> + public LifePayOrderStatusEnum LifePayOrderStatus { get; set; } + + /// <summary> + /// 瀹屾垚鏃堕棿 + /// </summary> + public DateTime? FinishTime { get; set; } + + /// <summary> + /// 澶栭儴璁㈠崟鍙� + /// </summary> + public string OutOrderNo { get; set; } + + /// <summary> + /// 璁㈠崟璇︾粏鏁版嵁 + /// </summary> + public string OrderParamDetailJsonStr { get; set; } + + /// <summary> + /// 涓嬪崟鏃堕棿 + /// </summary> + public DateTime? CreationTime { get; set; } + + /// <summary> + /// 閫�娆炬椂闂� + /// </summary> + public DateTime? RefundTime { get; set; } + + /// <summary> + /// 閫�娆惧嚟璇� + /// </summary> + public string RefundCredentialsImgUrl { get; set; } + + + public string RefundApplyRemark { get; set; } + + public string RefundCheckRemark { get; set; } + + /// <summary> + /// 娓犻亾娴佹按鍙� + /// </summary> + public string ACOOLYOrderNo { get; set; } + + /// <summary> + /// 骞冲彴閫�娆剧姸鎬� + /// </summary> + public LifePayRefundStatusEnum? LifePayRefundStatus { get; set; } + + + /// <summary> + /// 瀹為檯鍏呭�奸噾棰� + /// </summary> + public decimal? ActualRechargeAmount { get; set; } + + /// <summary> + /// 閫�娆鹃噾棰� + /// </summary> + public decimal? RefundPrice { get; set; } + + /// <summary> + /// 骞冲彴鎶樻墸姣斾緥 + /// </summary> + public decimal? PlatformRate { get; set; } + + /// <summary> + /// 骞冲彴鎵f閲戦 + /// </summary> + public decimal? PlatformPrice { get; set; } + + /// <summary> + /// 娓犻亾鎶樻墸 + /// </summary> + public decimal? ChannleRate { get; set; } + + + /// <summary> + /// 娓犻亾浣i噾姣斾緥 + /// </summary> + public decimal? ChannlesRakeRate { get; set; } + + /// <summary> + /// 娓犻亾浣i噾 + /// </summary> + public decimal? ChannlesRakePrice { get; set; } + + /// <summary> + /// 鎵嬬画璐规瘮渚� + /// </summary> + public decimal PremiumRate { get; set; } + + /// <summary> + /// 鎵嬬画璐� + /// </summary> + public decimal PremiumPrice { get; set; } + + public decimal? Profit { get; set; } +} + public class CreateLifePayOrderOutput { public string OrderNo { get; set; } @@ -504,4 +684,19 @@ public DateTime CreationTime { get; set; } public bool IsDeleted { get; set; } +} + +public class TopStatisticsOutput +{ + /// <summary> + /// 璐︽埛浣欓 + /// </summary> + public string Amount { get; set; } + + /// <summary> + /// 绱鏀舵 + /// </summary> + public string AccumulatedReceipts { get; set; } + + } \ No newline at end of file diff --git a/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs b/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs index 89d0e22..2dbdc47 100644 --- a/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs +++ b/LifePayment/LifePayment.Application.Contracts/User/CreateBackClientUserInput.cs @@ -15,6 +15,7 @@ /// 鎵嬫満鍙� /// </summary> public string PhoneNumber { get; set; } + public string Password { get; set; } /// <summary> /// 璐︽埛 diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs index 4a42663..037418e 100644 --- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs +++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs @@ -19,7 +19,10 @@ using Volo.Abp.EventBus.Distributed; using Z.EntityFramework.Plus; using ZeroD.Util; +using Alipay.EasySDK.Payment.Common.Models; using static LifePayment.Domain.Shared.LifePaymentConstant; +using ZeroD.Util.Fadd; +using Nest; namespace LifePayment.Application; @@ -166,7 +169,8 @@ { return await _channelFilter.GetChannelLifePayUserFilter(_lifePayUserRepository).Where(x => x.IsDeleted == false) .WhereIf(!string.IsNullOrEmpty(input.QueryCondition), x => x.PhoneNumber.Contains(input.QueryCondition) || x.Name.Contains(input.QueryCondition)) - .WhereIf(input.CreationTime.HasValue, x => x.CreationTime.ToString("yyyy-MM-dd") == input.CreationTime.Value.ToString("yyyy-MM-dd")) + .WhereIf(input.CreationTimeBegin.HasValue, x => x.CreationTime >= input.CreationTimeBegin) + .WhereIf(input.CreationTimeEnd.HasValue, x => x.CreationTime <= input.CreationTimeEnd) .Select(x => new UserListOutput() { @@ -218,7 +222,6 @@ /// <returns></returns> public async Task<PageOutput<LifePayOrderListOutput>> GetLifePayOrderPage(QueryLifePayOrderListInput input) { - var result = await (from a in _channelFilter.GetChannelLifePayOrderFilter(_lifePayOrderRepository) .WhereIf(input.BeginFinishTime.HasValue, x => x.FinishTime >= input.BeginFinishTime) .WhereIf(input.EndFinishTime.HasValue, x => x.FinishTime <= input.EndFinishTime) @@ -254,8 +257,62 @@ RefundCheckRemark = a.RefundCheckRemark, RefundApplyRemark = a.RefundApplyRemark, RefundTime = a.RefundTime, - ChannelName = b.ChannlesName + ChannelName = b.ChannlesName, + ActualRechargeAmount = a.ActualRechargeAmount, + PlatformDeductionAmount = a.PlatformDeductionAmount, + ACOOLYStatus = a.ACOOLYStatus, + LifePayRefundStatus = a.LifePayRefundStatus, }).GetPageResult(input.PageModel); + + return result; + } + + public async Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo) + { + var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); + var platformRate = await _lifePayRateRepository.FirstOrDefaultAsync(r => r.RateType == LifePayRateTypeEnum.渚涘簲鍟嗘姌鎵d环); + var channle = await _lifePayChannlesRep.FirstOrDefaultAsync(r => r.ChannlesNum == order.ChannelId); + var premium = await _lifePayPremiumRepository.Where(x => x.IsDeleted == false && x.PremiumType == order.LifePayType).FirstOrDefaultAsync(); + CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); + var user = await _lifePayUserRepository.FirstOrDefaultAsync(x => x.Id == order.UserId); + + var channlesRakePrice = (order.PayAmount - (order.PlatformDeductionAmount == null ? 0 : order.PlatformDeductionAmount)) * channle.ChannlesRakeRate / 100; + var result = new LifePayOrderOutput() + { + UserName = user.Name, + UserPhoneNumber = user.PhoneNumber, + DiscountAmount = order.DiscountAmount, + FinishTime = order.FinishTime, + Id = order.Id, + OutOrderNo = order.OutOrderNo, + LifePayChannle = channle.ChannlesName, + LifePayOrderStatus = order.LifePayOrderStatus, + LifePayOrderType = order.LifePayOrderType, + LifePayType = order.LifePayType, + OrderNo = order.OrderNo, + PayAmount = order.PayAmount, + RechargeAmount = order.RechargeAmount, + PayStatus = order.PayStatus, + PayTime = order.PayTime, + OrderParamDetailJsonStr = order.OrderParamDetailJsonStr, + RefundCredentialsImgUrl = order.RefundCredentialsImgUrl.GetOssPath(), + CreationTime = order.CreationTime, + RefundCheckRemark = order.RefundCheckRemark, + RefundApplyRemark = order.RefundApplyRemark, + RefundTime = order.RefundTime, + ACOOLYOrderNo = order.ACOOLYOrderNo, + LifePayRefundStatus = order.LifePayRefundStatus, + ActualRechargeAmount = order.ActualRechargeAmount, + RefundPrice = order.RefundPrice, + PlatformRate = platformRate.Rate, + PlatformPrice = order.PlatformDeductionAmount, + ChannleRate = channle.ChannlesRate, + ChannlesRakeRate = channle.ChannlesRakeRate, + ChannlesRakePrice = channlesRakePrice.HasValue ? 0 : Math.Round(channlesRakePrice.Value, 2), + PremiumRate = premium == null ? 0 : premium.Rate, + PremiumPrice = premium == null ? 0 : Math.Round(order.PayAmount * premium.Rate, 2), + Profit = (order.PayAmount - order.PlatformDeductionAmount) * (1.00m - channle.ChannlesRakeRate / 100) - (premium == null ? 0 : Math.Round(order.PayAmount * premium.Rate, 2)) + }; return result; } @@ -336,6 +393,8 @@ return result; } + + /// <summary> /// 鏍规嵁璁㈠崟鍙疯幏鍙栨敮浠樼姸鎬� @@ -549,7 +608,7 @@ var orderInput = new CreateLifePayOrderInput { - OrderNo = CreateOrderNo(), + OrderNo = channle.ChannlesNum + CreateOrderNo(), LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�, LifePayOrderType = LifePayOrderTypeEnum.璇濊垂璁㈠崟, //LifePayType = input.LifePayType, @@ -593,7 +652,7 @@ var orderInput = new CreateLifePayOrderInput { - OrderNo = CreateOrderNo(), + OrderNo = channle.ChannlesNum + CreateOrderNo(), LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�, LifePayOrderType = LifePayOrderTypeEnum.鐢佃垂璁㈠崟, // LifePayType = input.LifePayType, @@ -637,7 +696,7 @@ var orderInput = new CreateLifePayOrderInput { - OrderNo = CreateOrderNo(), + OrderNo = channle.ChannlesNum + CreateOrderNo(), LifePayOrderStatus = LifePayOrderStatusEnum.寰呯‘璁�, LifePayOrderType = LifePayOrderTypeEnum.鐕冩皵璁㈠崟, // LifePayType = input.LifePayType, @@ -967,7 +1026,7 @@ /// <param name="orderNo"></param> /// <param name="outOrderNo"></param> /// <returns></returns> - public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status) + public async Task ACOOLYOrderNotifyHandler(string orderNo, string acoolyOrderNo, LifePayOrderStatusEnum status, ACOOLYStatusEnum acoolyStatus, decimal payAmount) { var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync(); CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�"); @@ -978,6 +1037,8 @@ } order.LifePayOrderStatus = status; + order.ACOOLYStatus = acoolyStatus; + order.PlatformDeductionAmount = payAmount; if (acoolyOrderNo.IsNotNullOrEmpty()) { order.ACOOLYOrderNo = acoolyOrderNo; @@ -1017,15 +1078,44 @@ throw new UserFriendlyException("褰撳墠璁㈠崟鐘舵�佹棤娉曢��娆�"); } - /// TODO 閫�娆捐姹傚畬鎴愬悗濡備綍鎿嶄綔 - /// var refundResult = await WxPayDomesticRefunds(order.OrderNo, order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100)); + switch (order.LifePayType) + { + case LifePayTypeEnum.WxPay: + var wxRefundResult = await WxPayDomesticRefunds(order.OrderNo, order.RefundApplyRemark, Convert.ToInt32(order.PayAmount * 100), Convert.ToInt32(order.PayAmount * 100)); + if (wxRefundResult.Status == "SUCCESS") + { + order.PayStatus = LifePayStatusEnum.宸查��娆�; + order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; + } + else if (wxRefundResult.Status == "PROCESSING") + { + order.PayStatus = LifePayStatusEnum.閫�娆句腑; + order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑; + } + else + { + throw new UserFriendlyException("閫�娆惧け璐�"); + } - order.PayStatus = LifePayStatusEnum.宸查��娆�; - order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; + break; + case LifePayTypeEnum.AliPay: + var aliRefundResult = await AliTradeRefund(new AlipayTradeRefundRequest() { OutTradeNo = order.OrderNo, RefundAmount = order.PayAmount.ToString() }); + if (aliRefundResult.Code != AlipayResultCode.Success) + { + throw new UserFriendlyException("閫�娆惧け璐�"); + } + + order.PayStatus = LifePayStatusEnum.宸查��娆�; + order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�; + break; + default: throw new UserFriendlyException("閫�娆惧け璐�"); + } + order.RefundCredentialsImgUrl = input.RefundCredentialsImgUrl; order.RefundCheckRemark = input.RefundCheckRemark; order.RefundTime = DateTime.Now; order.RefundCheckUserId = CurrentUser.Id; + order.RefundPrice = order.PayAmount; await _lifePayOrderRepository.UpdateAsync(order); @@ -1065,7 +1155,7 @@ order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆惧緟瀹℃牳; order.RefundApplyRemark = input.RefundApplyRemark; - order.RefundTime = DateTime.Now; + order.RefundApplyTime = DateTime.Now; await _lifePayOrderRepository.UpdateAsync(order); } @@ -1099,7 +1189,10 @@ return res; } - + private async Task<AlipayTradeRefundResponse> AliTradeRefund(AlipayTradeRefundRequest input) + { + return await _aliPayApi.TradeRefund(input); + } public async Task<int> AddUpdateUserAccount(AddUpdateUserAccountInput input) { @@ -1371,10 +1464,10 @@ private (decimal PayAmont, decimal DiscountAmount, decimal RechargeAmount) CalculateAmount(decimal amount, decimal rate) { /// 姝e父鏀粯 - var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero); + //var payAmount = decimal.Round(amount * rate / 100, 2, MidpointRounding.AwayFromZero); /// 1鍒嗛挶鏀粯 - //decimal payAmount = 0.01m; + decimal payAmount = 0.01m; CheckExtensions.IfTrueThrowUserFriendlyException(payAmount < 0.01m, "鏀粯閲戦閿欒"); @@ -1494,7 +1587,6 @@ CheckExtensions.IfTrueThrowUserFriendlyException(amount <= 0, CustomeErrorMessage.SometingMustSometing, "鑾峰彇鏀粯浜岀淮鐮佹椂閲戦", "澶т簬0"); - var res = await _wxPayApi.PayTransactionsH5(new PayTransactionsNativeH5 { Appid = _wxPayOptions.AppID, @@ -1547,6 +1639,7 @@ return res.QrCode; } + /// <summary> /// 鏋勯�犲緟绛惧悕瀛楃涓� /// </summary> diff --git a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs index 8d96436..8ed9b72 100644 --- a/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs +++ b/LifePayment/LifePayment.Domain.Shared/ACOOLY/ACOOLYConstant.cs @@ -62,5 +62,20 @@ public const string PROCESSING = "PROCESSING"; } + public static class Status + { + public const string 鍏呭�兼垚鍔� = "SUCCESS"; + + public const string 鍏呭�间腑 = "PROCESSING"; + + public const string 鍏呭�煎け璐� = "FAIL"; + + public const string 閫�娆句腑 = "REFUNDING"; + + public const string 閫�娆惧畬鎴� = "REFUND_CLOSE"; + + public const string 澶辫触鍏抽棴 = "FAIL_CLOSE"; + } + public const string NotifyUrl = "/api/ACOOLYNotify/ACOOLYNotify"; } diff --git a/LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs b/LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs index cd0fbd3..d8f195a 100644 --- a/LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs +++ b/LifePayment/LifePayment.Domain.Shared/Ali/GetPayQrCodeInput.cs @@ -25,4 +25,14 @@ /// </summary> public string OutTradeNo { get; set; } } + + public class AlipayTradeRefundRequest + { + /// <summary> + /// 浜ゆ槗鍒涘缓鏃朵紶鍏ョ殑鍟嗘埛璁㈠崟鍙� + /// </summary> + public string OutTradeNo { get; set; } + + public string RefundAmount { get; set; } + } } \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs index 69ba26d..585f39d 100644 --- a/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs +++ b/LifePayment/LifePayment.Domain.Shared/Enum/LifePay/LifePayEnum.cs @@ -35,7 +35,10 @@ 寰呴��娆� = 30, [Description("宸查��娆�")] - 宸查��娆� = 40, + 宸查��娆� = 40, + + [Description("閫�娆句腑")] + 閫�娆句腑 = 50, } public enum LifePayOrderStatusEnum @@ -57,6 +60,26 @@ [Description("閫�娆惧け璐�")] 閫�娆惧け璐� = 60, + + + [Description("閫�娆句腑")] + 閫�娆句腑 = 70, +} + +public enum ACOOLYStatusEnum +{ + [Description("鍏呭�间腑")] + 鍏呭�间腑 = 10, + [Description("鍏呭�兼垚鍔�")] + 鍏呭�兼垚鍔� = 20, + [Description("宸插畬鎴�")] + 宸插畬鎴� = 30, + [Description("閮ㄥ垎鍏呭�兼垚鍔�")] + 閮ㄥ垎鍏呭�兼垚鍔� = 40, + [Description("鍏呭�煎け璐�")] + 鍏呭�煎け璐� = 50, + [Description("宸查��娆�")] + 宸查��娆� = 60, } public enum LifePayRefundStatusEnum diff --git a/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs b/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs index 88a9193..d9e2d8b 100644 --- a/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs +++ b/LifePayment/LifePayment.Domain.Shared/WeChat/WxPayPostBaseModel.cs @@ -600,11 +600,6 @@ /// </summary> public class WxPayDomesticRefundsRequest { - /// <summary> - /// 寰俊鏀粯璁㈠崟鍙� 鍜宱ut_trade_no蹇呴』浜岄�変竴杩涜浼犲弬 - /// </summary> - [JsonProperty("transaction_id")] - public string TransactionId { get; set; } /// <summary> /// 鍟嗘埛璁㈠崟鍙� 鍜宱ut_trade_no蹇呴』浜岄�変竴杩涜浼犲弬 @@ -630,11 +625,6 @@ [JsonProperty("notify_url")] public string NotifyUrl { get; set; } - /// <summary> - /// 閫�娆捐祫閲戞潵婧� - /// </summary> - [JsonProperty("funds_account")] - public string FundsAccount { get; set; } /// <summary> /// 閲戦淇℃伅 蹇呭~ diff --git a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs index 40ccd7c..a64cc72 100644 --- a/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs +++ b/LifePayment/LifePayment.Domain/Ali/AliPayApi.cs @@ -33,5 +33,11 @@ AlipayTradeQueryResponse response = Factory.Payment.Common().Query(input.OutTradeNo); return response; } + + public async Task<AlipayTradeRefundResponse> TradeRefund(AlipayTradeRefundRequest input) + { + AlipayTradeRefundResponse response = Factory.Payment.Common().Refund(input.OutTradeNo,input.RefundAmount); + return response; + } } } \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs b/LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs index 7598a2f..482b9fe 100644 --- a/LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs +++ b/LifePayment/LifePayment.Domain/Ali/AlipayApiConstant.cs @@ -26,6 +26,8 @@ internal const string DataBillErceiptApply = "alipay.data.bill.ereceiptagent.apply"; internal const string DataBillEreceiptQuery = "alipay.data.bill.accountbookereceipt.query"; internal const string DataDataserviceBillDownloadUrlQuery = "alipay.data.dataservice.bill.downloadurl.query"; + + } public class AlipayResultCode diff --git a/LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs b/LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs index 13d9afd..8759070 100644 --- a/LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs +++ b/LifePayment/LifePayment.Domain/Ali/IAliPayApi.cs @@ -11,5 +11,7 @@ Task<AlipayTradePrecreateResponse> GetAliPayQRCode(GetPayQrCodeInput input); AlipayTradeQueryResponse OrderInQuiry(OrderInQuiryInput input); + + Task<AlipayTradeRefundResponse> TradeRefund(AlipayTradeRefundRequest input); } } \ No newline at end of file diff --git a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs b/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs index f48715e..11f6a11 100644 --- a/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs +++ b/LifePayment/LifePayment.Domain/LifePay/LifePayOrder.cs @@ -38,6 +38,8 @@ /// </summary> public decimal RechargeAmount { get; set; } + + /// <summary> /// 浼樻儬閲戦 /// </summary> @@ -47,6 +49,11 @@ /// 瀹炰粯閲戦 /// </summary> public decimal PayAmount { get; set; } + + /// <summary> + /// 骞冲彴鎵f閲戦 + /// </summary> + public decimal? PlatformDeductionAmount { get; set; } /// <summary> /// 鏀粯鏃堕棿 @@ -74,6 +81,11 @@ public LifePayOrderStatusEnum LifePayOrderStatus { get; set; } /// <summary> + /// 骞冲彴鐘舵�� + /// </summary> + public ACOOLYStatusEnum? ACOOLYStatus { get; set; } + + /// <summary> /// 瀹屾垚鏃堕棿 /// </summary> public DateTime? FinishTime { get; set; } @@ -98,12 +110,41 @@ /// </summary> public DateTime? RefundTime { get; set; } + /// <summary> + /// 閫�娆剧敵璇峰師鍥� + /// </summary> public string RefundApplyRemark { get; set; } + /// <summary> + /// 閫�娆剧敵璇锋椂闂� + /// </summary> + public DateTime? RefundApplyTime { get; set; } + + /// <summary> + /// 椹冲洖鍘熷洜 + /// </summary> public string RefundCheckRemark { get; set; } + /// <summary> + /// 閫�娆惧鏍镐汉 + /// </summary> public Guid? RefundCheckUserId { get; set; } public string? ChannelId { get; set; } + + /// <summary> + /// 閫�娆鹃噾棰� + /// </summary> + public decimal? RefundPrice { get; set; } + + /// <summary> + /// 瀹為檯鍏呭�奸噾棰� + /// </summary> + public decimal? ActualRechargeAmount { get; set; } + + /// <summary> + /// 骞冲彴閫�娆剧姸鎬� + /// </summary> + public LifePayRefundStatusEnum? LifePayRefundStatus { get; set; } } } \ No newline at end of file diff --git a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml index d63ca45..760101a 100644 --- a/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml +++ b/LifePayment/LifePayment.Host/LifePaymentService.HttpApi.xml @@ -124,6 +124,13 @@ <param name="input"></param> <returns></returns> </member> + <member name="M:LifePayment.HttpApi.LifePayController.GetLifePayOrderDetail(System.String)"> + <summary> + 鑾峰彇璁㈠崟璇︽儏 + </summary> + <param name="orderNo"></param> + <returns></returns> + </member> <member name="M:LifePayment.HttpApi.LifePayController.GetUserLifePayOrderPage(LifePayment.Application.Contracts.QueryLifePayOrderListInput)"> <summary> 鑾峰彇鎴戠殑璁㈠崟鍒嗛〉鏁版嵁 diff --git a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml index 0dad992..863e3a7 100644 --- a/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml +++ b/LifePayment/LifePayment.Host/LifePaymentServices.Application.Contracts.xml @@ -42,13 +42,15 @@ <param name="outOrderNo"></param> <returns></returns> </member> - <member name="M:LifePayment.Application.Contracts.ILifePayService.ACOOLYOrderNotifyHandler(System.String,System.String,LifePayment.Domain.Shared.LifePayOrderStatusEnum)"> + <member name="M:LifePayment.Application.Contracts.ILifePayService.ACOOLYOrderNotifyHandler(System.String,System.String,LifePayment.Domain.Shared.LifePayOrderStatusEnum,LifePayment.Domain.Shared.ACOOLYStatusEnum,System.Decimal)"> <summary> 鏀粯鎴愬姛鍥炶皟澶勭悊 </summary> <param name="orderNo"></param> <param name="acoolyOrderNo"></param> <param name="status"></param> + <param name="acoolyStatus"></param> + <param name="payAmount"></param> <returns></returns> </member> <member name="M:LifePayment.Application.Contracts.ILifePayService.CreateLifePayPhoneOrder(LifePayment.Application.Contracts.CreateLifePayOrderInput{LifePayment.Application.Contracts.LifePhoneData})"> @@ -173,6 +175,13 @@ 鑾峰彇璁㈠崟鍒嗛〉鏁版嵁 </summary> <param name="input"></param> + <returns></returns> + </member> + <member name="M:LifePayment.Application.Contracts.ILifePayService.GetLifePayOrderDetail(System.String)"> + <summary> + 鑾峰彇璁㈠崟璇︽儏 + </summary> + <param name="orderNo"></param> <returns></returns> </member> <member name="M:LifePayment.Application.Contracts.ILifePayService.GetPayStatusByOrderNo(System.String)"> @@ -501,7 +510,7 @@ 鎵嬫満鍙�/鐢ㄦ埛鍚� </summary> </member> - <member name="P:LifePayment.Application.Contracts.QueryUserPageInput.CreationTime"> + <member name="P:LifePayment.Application.Contracts.QueryUserPageInput.CreationTimeBegin"> <summary> 娉ㄥ唽鏃堕棿 </summary> @@ -621,6 +630,11 @@ 鍏呭�奸噾棰� </summary> </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.ActualRechargeAmount"> + <summary> + 瀹為檯鍏呭�奸噾棰� + </summary> + </member> <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.DiscountAmount"> <summary> 浼樻儬閲戦 @@ -634,6 +648,11 @@ <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.PayTime"> <summary> 鏀粯鏃堕棿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.PlatformDeductionAmount"> + <summary> + 骞冲彴鎵f閲戦 </summary> </member> <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.PayStatus"> @@ -669,6 +688,31 @@ <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RefundTime"> <summary> 閫�娆炬椂闂� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RefundApplyRemark"> + <summary> + 鐢宠閫�娆惧師鍥� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.RefundCheckRemark"> + <summary> + 椹冲洖鍘熷洜 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.ACOOLYOrderNo"> + <summary> + 渚涘簲鍟嗚鍗曞彿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.ACOOLYStatus"> + <summary> + 渚涘簲鍟嗚鍗曠姸鎬� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderListOutput.LifePayRefundStatus"> + <summary> + 骞冲彴閫�娆剧姸鎬� </summary> </member> <member name="P:LifePayment.Application.Contracts.LifePayOrderListTemplate.CreationTime"> @@ -786,6 +830,131 @@ 娓犻亾娴佹按鍙� </summary> </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.LifePayType"> + <summary> + 鐢熸椿缂磋垂鏀粯绫诲瀷 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.LifePayOrderType"> + <summary> + 璁㈠崟绫诲瀷 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.OrderNo"> + <summary> + 璁㈠崟鍙� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RechargeAmount"> + <summary> + 鍏呭�奸噾棰� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.DiscountAmount"> + <summary> + 浼樻儬閲戦 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PayAmount"> + <summary> + 瀹炰粯閲戦 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PayTime"> + <summary> + 鏀粯鏃堕棿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PayStatus"> + <summary> + 鏀粯鐘舵�� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.LifePayOrderStatus"> + <summary> + 璁㈠崟鐘舵�� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.FinishTime"> + <summary> + 瀹屾垚鏃堕棿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.OrderParamDetailJsonStr"> + <summary> + 璁㈠崟璇︾粏鏁版嵁 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.CreationTime"> + <summary> + 涓嬪崟鏃堕棿 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundTime"> + <summary> + 閫�娆炬椂闂� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundCredentialsImgUrl"> + <summary> + 閫�娆惧嚟璇� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ACOOLYOrderNo"> + <summary> + 娓犻亾娴佹按鍙� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.LifePayRefundStatus"> + <summary> + 骞冲彴閫�娆剧姸鎬� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ActualRechargeAmount"> + <summary> + 瀹為檯鍏呭�奸噾棰� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.RefundPrice"> + <summary> + 閫�娆鹃噾棰� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PlatformRate"> + <summary> + 骞冲彴鎶樻墸姣斾緥 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PlatformPrice"> + <summary> + 骞冲彴鎵f閲戦 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ChannleRate"> + <summary> + 娓犻亾鎶樻墸 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ChannlesRakeRate"> + <summary> + 娓犻亾浣i噾姣斾緥 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.ChannlesRakePrice"> + <summary> + 娓犻亾浣i噾 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PremiumRate"> + <summary> + 鎵嬬画璐规瘮渚� + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.LifePayOrderOutput.PremiumPrice"> + <summary> + 鎵嬬画璐� + </summary> + </member> <member name="P:LifePayment.Application.Contracts.UserLifePayOrderRefundOutput.Id"> <summary> 璁㈠崟缂栧彿 @@ -851,6 +1020,16 @@ 鍒涘缓鏃堕棿 </summary> </member> + <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.Amount"> + <summary> + 璐︽埛浣欓 + </summary> + </member> + <member name="P:LifePayment.Application.Contracts.TopStatisticsOutput.AccumulatedReceipts"> + <summary> + 绱鏀舵 + </summary> + </member> <member name="P:LifePayment.Application.Contracts.RecordOperateHistoryEto.RelationId"> <summary> 鍏宠仈鍏崇郴ID diff --git a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs index 8e0e2b9..f9c6aca 100644 --- a/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs +++ b/LifePayment/LifePayment.HttpApi/LifePay/ACOOLYNotifyController.cs @@ -53,7 +53,9 @@ var baseInfo = JsonConvert.DeserializeObject<ACOOLYRequestBaseResponse>(body); var orderNo = string.Empty; var status = LifePayOrderStatusEnum.寰呯‘璁�; + var acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�; var acoolyOrderNo = string.Empty; + decimal payAmount = 0; _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙被鍨嬶細" + baseInfo.Service); _logger.LogError("ACOOLY鍥炶皟鍐呭锛�" + body); switch (baseInfo.Service) @@ -62,29 +64,33 @@ var confirmElectricOrderResponse = JsonConvert.DeserializeObject<ConfirmElectricOrderResponse>(body); orderNo = confirmElectricOrderResponse.ElectricChargeOrder.OutOrderNo; acoolyOrderNo = confirmElectricOrderResponse.ElectricChargeOrder.BusiOrderNo; + payAmount = confirmElectricOrderResponse.ElectricChargeOrder.PayAmount; _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmElectricOrderResponse.ElectricChargeOrder.Status); - /// TODO 鐘舵�佷笉姝g‘ if (!confirmElectricOrderResponse.Success || (confirmElectricOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmElectricOrderResponse.Code != ACOOLYConstant.Code.PROCESSING)) { status = LifePayOrderStatusEnum.宸插け璐�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�; } else - if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Code.SUCCESS) + if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�) { status = LifePayOrderStatusEnum.宸插畬鎴�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�; } else - if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Code.PROCESSING) + if (confirmElectricOrderResponse.ElectricChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑) { status = LifePayOrderStatusEnum.寰呯‘璁�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑; } else { status = LifePayOrderStatusEnum.宸插け璐�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�; } break; @@ -92,35 +98,81 @@ var confirmPhoneOrderResponse = JsonConvert.DeserializeObject<ConfirmPhoneOrderResponse>(body); orderNo = confirmPhoneOrderResponse.PhoneChargeOrder.OutOrderNo; acoolyOrderNo = confirmPhoneOrderResponse.PhoneChargeOrder.BusiOrderNo; + payAmount = confirmPhoneOrderResponse.PhoneChargeOrder.PayAmount; _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmPhoneOrderResponse.PhoneChargeOrder.Status); if (!confirmPhoneOrderResponse.Success || (confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmPhoneOrderResponse.Code != ACOOLYConstant.Code.PROCESSING)) { status = LifePayOrderStatusEnum.宸插け璐�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�; } else - if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Code.SUCCESS) + if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�) { status = LifePayOrderStatusEnum.宸插畬鎴�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�; } else - if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Code.PROCESSING) + if (confirmPhoneOrderResponse.PhoneChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑) { status = LifePayOrderStatusEnum.寰呯‘璁�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑; } else { status = LifePayOrderStatusEnum.宸插け璐�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�; } break; + case ACOOLYConstant.Sevice.ConfirmGasOrder: + var confirmGasOrderResponse = JsonConvert.DeserializeObject<ConfirmGasOrderResponse>(body); + orderNo = confirmGasOrderResponse.GasChargeOrder.OutOrderNo; + acoolyOrderNo = confirmGasOrderResponse.GasChargeOrder.BusiOrderNo; + payAmount = confirmGasOrderResponse.GasChargeOrder.PayAmount; + _logger.LogError("ACOOLY鍥炶皟閫氬鐞嗙粨鏋滅姸鎬侊細" + confirmGasOrderResponse.GasChargeOrder.Status); + if (!confirmGasOrderResponse.Success + || (confirmGasOrderResponse.Code != ACOOLYConstant.Code.SUCCESS && confirmGasOrderResponse.Code != ACOOLYConstant.Code.PROCESSING)) + { + status = LifePayOrderStatusEnum.宸插け璐�; + } + else + if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�兼垚鍔�) + { + status = LifePayOrderStatusEnum.宸插畬鎴�; + // TODO 纭浠�涔堟儏鍐典笅鍙互鍒ゆ柇鏄儴鍒嗗厖鍊兼垚鍔� + + //if (confirmGasOrderResponse.GasChargeOrder.ParValue == confirmGasOrderResponse.GasChargeOrder.PayAmount) + //{ + + // acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�; + //} + //else + //{ + // acoolyStatus = ACOOLYStatusEnum.閮ㄥ垎鍏呭�兼垚鍔�; + //} + acoolyStatus = ACOOLYStatusEnum.鍏呭�兼垚鍔�; + } + else + + if (confirmGasOrderResponse.GasChargeOrder.Status == ACOOLYConstant.Status.鍏呭�间腑) + { + status = LifePayOrderStatusEnum.寰呯‘璁�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�间腑; + } + else + { + status = LifePayOrderStatusEnum.宸插け璐�; + acoolyStatus = ACOOLYStatusEnum.鍏呭�煎け璐�; + } + break; default: break; } - await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status); + await _lifePayService.ACOOLYOrderNotifyHandler(orderNo, acoolyOrderNo, status, acoolyStatus, payAmount); } } } \ No newline at end of file diff --git a/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs index e057499..28aee15 100644 --- a/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs +++ b/LifePayment/LifePayment.HttpApi/LifePay/AliPayNotifyController.cs @@ -51,7 +51,7 @@ //var serializeRequest = "{\"gmt_create\":\"2025-02-25 13:18:59\",\"charset\":\"UTF-8\",\"seller_email\":\"zfb1@818nb.com\",\"subject\":\"鐢熸椿缂磋垂-璇濊垂\",\"sign\":\"Sp06G1GxrAfDvoHPz9l3DJ20SxhvRzEGFeCGu4LHrSWmEG4OY7MHMx+iJi54ETbdXV0YsyDH9JZD7PWN3HCpEq/wGO4Wh4VSYSe7lqxD6r4f/HFiB0YlrdQoSzjZgYPzLjy6bcdlKRRHOeDkgs2i7TfvIsxWxHs9t0xuS0RlkpdZfb7d7m0EuZ/3v2Cbsj5AHjxb1S2PkO0oQyriYgGQdmkPqILZHwieST+tNEHS4dGFKYu2nkfctAGjWIDv/hKQNY7jEUxsEeG0SnK4TPU8zNplFR9/aKM0Wfwp1pdlaiP2u/d8vOtNh5q+emvaYbKrUkIEFBok8pDLNDta7ZjtVw==\",\"invoice_amount\":\"0.01\",\"buyer_open_id\":\"071xYXDfXBLAI9U11jg_WrH1K6hWq8HYGz0u85xBivf3Sce\",\"notify_id\":\"2025022501222131904087711494539601\",\"fund_bill_list\":\"[{\\\"amount\\\":\\\"0.01\\\",\\\"fundChannel\\\":\\\"ALIPAYACCOUNT\\\"}]\",\"notify_type\":\"trade_status_sync\",\"trade_status\":\"TRADE_SUCCESS\",\"receipt_amount\":\"0.01\",\"buyer_pay_amount\":\"0.01\",\"app_id\":\"2021004171602214\",\"sign_type\":\"RSA2\",\"seller_id\":\"2088050542042301\",\"gmt_payment\":\"2025-02-25 13:19:03\",\"notify_time\":\"2025-02-25 13:44:34\",\"merchant_app_id\":\"2021004171602214\",\"version\":\"1.0\",\"out_trade_no\":\"JF202502251318555214671\",\"total_amount\":\"0.01\",\"trade_no\":\"2025022522001487711401331043\",\"auth_app_id\":\"2021004171602214\",\"buyer_logon_id\":\"130****2238\",\"point_amount\":\"0.00\"}"; var input = JsonConvert.DeserializeObject<AliRechargeNotifyInput>(serializeRequest); - if (input.OutTradeNo.StartsWith("JF") && Regex.IsMatch(input.OutTradeNo, @"^JF\d+$")) + if (input.OutTradeNo.Contains("JF")) { if (input.TradeStatus == LifePaymentConstant.AliPayStatus.鏀粯鎴愬姛) { @@ -72,7 +72,7 @@ [AllowAnonymous] public async Task<ContentResult> TestAliRechargeNotify(string outTradeNo, string tradeNo, bool success) { - if (outTradeNo.StartsWith("JF") && Regex.IsMatch(outTradeNo, @"^JF\d+$")) + if (outTradeNo.Contains("JF")) { if (success) { diff --git a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs index 78fcb0a..0f24eca 100644 --- a/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs +++ b/LifePayment/LifePayment.HttpApi/LifePay/LifePayController.cs @@ -36,6 +36,17 @@ #region 鏌ヨ /// <summary> + /// 鑾峰彇椤堕儴缁熻鏁版嵁 + /// </summary> + /// <returns></returns> + //[HttpGet] + //[AllowAnonymous] + //public async Task<TopStatisticsOutput> GetTopStatistics() + //{ + // return await _lifePayService.GetTopStatistics(); + //} + + /// <summary> /// 鑾峰彇鐢佃垂闈㈠�� /// </summary> /// <returns></returns> @@ -181,6 +192,18 @@ } /// <summary> + /// 鑾峰彇璁㈠崟璇︽儏 + /// </summary> + /// <param name="orderNo"></param> + /// <returns></returns> + [HttpGet] + public async Task<LifePayOrderOutput> GetLifePayOrderDetail(string orderNo) + { + return await _lifePayService.GetLifePayOrderDetail(orderNo); + } + + + /// <summary> /// 鑾峰彇鎴戠殑璁㈠崟鍒嗛〉鏁版嵁 /// </summary> /// <param name="input"></param> diff --git a/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs index 54d3114..430f3ac 100644 --- a/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs +++ b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs @@ -48,7 +48,7 @@ var data = _wxPayApi.AesGcmDecrypt(input.Resource.AssociatedData, input.Resource.Nonce, input.Resource.Ciphertext); var wxPayNotice = JsonConvert.DeserializeObject<WxPayNotice>(data); - if (wxPayNotice.OutTradeNo.StartsWith("JF") && Regex.IsMatch(wxPayNotice.OutTradeNo, @"^JF\d+$")) + if (wxPayNotice.OutTradeNo.Contains("JF") ) { if (wxPayNotice.TradeState == LifePaymentConstant.WxPayStatus.鏀粯鎴愬姛) { -- Gitblit v1.9.1