From 8f5a78cae00812ec9eef16936a7d2b53a90892f0 Mon Sep 17 00:00:00 2001
From: zhengyuxuan <zhengyuxuan1995>
Date: 星期二, 01 四月 2025 09:21:26 +0800
Subject: [PATCH] fix:支付宝退款查询接口
---
LifePayment/LifePayment.Application/LifePay/LifePayService.cs | 75 ++++++++++++++++++++++++++++++-------
1 files changed, 61 insertions(+), 14 deletions(-)
diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
index e847711..e6551c4 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -28,6 +28,8 @@
using NPOI.SS.Formula.Functions;
using StackExchange.Redis;
using static Volo.Abp.Identity.Settings.IdentitySettingNames;
+using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
+using LifePayment.Application.LifePay;
namespace LifePayment.Application;
@@ -45,6 +47,8 @@
private readonly IRepository<LifePayChannles, Guid> _lifePayChannlesRep;
private readonly IRepository<LifePayAccount, Guid> _lifePayAccount;
private readonly IRepository<OperateHistory, Guid> _operateHistory;
+ private readonly IRepository<LifePayChannlesRake, Guid> _lifePayChannlesRakeRepository;
+ private readonly ILifePayOrderService _lifePayOrderService;
private readonly IDataFilter dataFilter;
private readonly IChannelFilter _channelFilter;
private readonly IAliPayApi _aliPayApi;
@@ -63,7 +67,9 @@
IRepository<LifePayUser, Guid> lifePayUserRepository,
IRepository<LifePayPremium, Guid> lifePayPremiumRepository,
IRepository<LifePayIntroInfo, Guid> lifePayIntroInfoRepository,
+ IRepository<LifePayChannlesRake, Guid> lifePayChannlesRakeRepository,
IRepository<OperateHistory, Guid> operateHistory,
+ ILifePayOrderService lifePayOrderService,
IAliPayApi aliPayApi,
IAlipayInterfaceManager aliPayInterfaceManager,
IWxPayApi wxPayApi,
@@ -79,9 +85,11 @@
_lifePayRateRepository = lifePayRateRepository;
_lifePayOrderRepository = lifePayOrderRepository;
_lifePayUserRepository = lifePayUserRepository;
+ _lifePayChannlesRakeRepository = lifePayChannlesRakeRepository;
_lifePayPremiumRepository = lifePayPremiumRepository;
_lifePayIntroInfoRepository = lifePayIntroInfoRepository;
_aliPayApi = aliPayApi;
+ _lifePayOrderService = lifePayOrderService;
_alipayInterfaceManager = aliPayInterfaceManager;
_wxPayApi = wxPayApi;
_wxPayOptions = wxPayOptions.Value;
@@ -829,6 +837,7 @@
public async Task<AlipayTradeQueryResponse> QueryAlipayTrade(OrderInQuiryInput input)
{
var result = await _aliPayApi.OrderInQuiry(input);
+
return result;
}
@@ -839,7 +848,22 @@
/// <returns></returns>
public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input)
{
+ var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OutTradeNo).FirstOrDefaultAsync();
+ input.OutRefundNo = order.RefundOrderNo;
var result = await _aliPayApi.QueryAlipayTradeRefund(input);
+ if (result.Code == AlipayResultCode.Success && result.RefundStatus == AlipayRefundStatus.Success)
+ {
+ order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
+ order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�;
+ await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+ {
+ OrderNo = result.OutTradeNo,
+ OutOrderNo = result.TradeNo,
+ LifePayType = LifePayTypeEnum.AliPay,
+ ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts
+ });
+ }
+
return result;
}
@@ -858,10 +882,12 @@
/// </summary>
/// <param name="outTradeNo"></param>
/// <returns></returns>
- public async Task WxPayTradeQuery(string outTradeNo)
+ public async Task<WxPayTradeQueryReponse> WxPayTradeQuery(string outTradeNo)
{
- await _wxPayApi.WxPayTradeQuery(outTradeNo);
+ return await _wxPayApi.WxPayTradeQuery(outTradeNo);
}
+
+
#endregion
@@ -1052,8 +1078,8 @@
//var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type);
var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, res.PayAmount, ip, input.H5Type);
#else
- //var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, 0.01m, ip, input.H5Type);
- var payUrl = await GetPayQRCode(order.LifePayType.Value, order.OrderNo, desc, order.PayAmount??0, ip, input.H5Type);
+ //var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, 0.01m, ip, input.H5Type);
+ var payUrl = await GetPayQRCode(res.LifePayType, res.OrderNo, res.Desc, res.PayAmount, ip, input.H5Type);
#endif
return payUrl;
@@ -1307,7 +1333,7 @@
await _lifePayOrderRepository.UpdateAsync(order);
}
- public async Task WxPayDomesticRefundsHandler(string orderNo, LifePayRefundStatusEnum refundStatus)
+ public async Task LifePayRefundsHandler(string orderNo, LifePayRefundStatusEnum refundStatus)
{
var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
@@ -1325,6 +1351,7 @@
}
}
+
/// <summary>
/// ACOOLYO璁㈠崟閫氱煡澶勭悊
/// </summary>
@@ -1336,10 +1363,10 @@
var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
- //if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
- //{
- // return;
- //}
+ if (order.LifePayOrderStatus >= LifePayOrderStatusEnum.宸插畬鎴�)
+ {
+ return;
+ }
order.PlatformDeductionAmount = payAmount;
if (acoolyOrderNo.IsNotNullOrEmpty())
@@ -1361,6 +1388,27 @@
order.ACOOLYStatus = acoolyStatus;
order.FinishTime = DateTime.Now;
await _lifePayOrderRepository.UpdateAsync(order);
+
+ if (order.LifePayOrderStatus == LifePayOrderStatusEnum.宸插畬鎴�)
+ {
+ /// 姣涘埄
+ var grossProfit = order.RechargeAmount * (order.ChannleRate - order.PlatformRate) / 100;
+ /// 娓犻亾浣i噾 锛�(鍏呭�奸潰棰� * 娓犻亾鎶樻墸姣斾緥)-(鍏呭�奸潰棰� * 骞冲彴鎶樻墸姣斾緥)锛�* 浣i噾姣斾緥
+ var channlesRakePrice = grossProfit * (order.ChannlesRakeRate) / 100;
+ if (channlesRakePrice.HasValue)
+ {
+ LifePayChannlesRake lifePayChannlesRake = new LifePayChannlesRake()
+ {
+ OrderNo = order.OrderNo,
+ PayAmount = order.PayAmount.Value,
+ ChannlesRakeRate = order.ChannlesRakeRate.Value,
+ ChannlesRakePrice = channlesRakePrice.Value,
+ FinishTime = order.FinishTime.Value,
+ ChannelId = order.ChannelId,
+ };
+ await _lifePayChannlesRakeRepository.InsertAsync(lifePayChannlesRake);
+ }
+ }
}
/// <summary>
@@ -1395,7 +1443,6 @@
}
var outRefundNo = order.ChannelId + CreateRefundOrderNo();
- order.RefundOrderNo = outRefundNo;
switch (order.LifePayType)
{
case LifePayTypeEnum.WxPay:
@@ -1424,12 +1471,13 @@
throw new UserFriendlyException("閫�娆惧け璐�:" + aliRefundResult.SubMsg);
}
- order.LifePayOrderStatus = LifePayOrderStatusEnum.宸查��娆�;
- order.LifePayRefundStatus = LifePayRefundStatusEnum.宸查��娆�;
+ order.LifePayOrderStatus = LifePayOrderStatusEnum.閫�娆句腑;
+ order.LifePayRefundStatus = LifePayRefundStatusEnum.閫�娆句腑;
break;
default: throw new UserFriendlyException("閫�娆惧け璐�");
}
+ order.RefundOrderNo = outRefundNo;
order.RefundCredentialsImgUrl = input.RefundCredentialsImgUrl;
order.RefundCheckRemark = input.RefundCheckRemark;
order.RefundTime = DateTime.Now;
@@ -1563,7 +1611,7 @@
await _lifePayAccount.InsertAsync(userAccount);
}
- if (input.LifePayType == LifePayOrderTypeEnum.PhoneOrder)
+ if (input.LifePayType == LifePayOrderTypeEnum.PhoneOrder || input.LifePayType == LifePayOrderTypeEnum.ElectricOrder)
{
var extraProperties = JsonConvert.DeserializeObject<Model_UserAccountExtraProperties>(input.ExtraProperties);
if (!string.IsNullOrEmpty(extraProperties.Name) && extraProperties.Phone == user.PhoneNumber)
@@ -2004,7 +2052,6 @@
string message = $"{method}\n{uri}\n{timestamp}\n{nonce}\n{body}\n";
return message;
}
-
private async Task<IQueryable<LifePayOrderListOutput>> GetLifePayOrderListFilter(QueryLifePayOrderListInput input)
{
--
Gitblit v1.9.1