zhengyuxuan
2025-03-31 8eb5f9115334a665a297218dd23a83cfe5d165bd
fix:退款时间
5个文件已修改
167 ■■■■■ 已修改文件
LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/LifePay/LifePayService.cs 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application/LifePay/StatisticsService.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Domain/Ali/AliPayApi.cs 135 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
LifePayment/LifePayment.Application.Contracts/LifePay/LifePayOutput.cs
@@ -1235,4 +1235,14 @@
    /// 实际收入
    /// </summary>
    public decimal RealIncome { get; set; }
}
public class ReceiptsListOutPut
{
    /// <summary>
    /// 创建时间
    /// </summary>
    public DateTime CreationTime { get; set; }
    public decimal Amount { get; set; }
}
LifePayment/LifePayment.Application/LifePay/LifePayOrderService.cs
@@ -168,7 +168,7 @@
                        if (input.ExpensesReceiptsType == ExpensesReceiptsTypeEnum.Expenses)
                        {
                            var query = await _aliPayApi.OrderInQuiry(new OrderInQuiryInput() { OutTradeNo = input.OrderNo });
                            if (query.Code == AlipayResultCode.Success && (query.TradeStatus == AlipayStatus.TRADESUCCESS
                            if (query.Code == AlipayResultCode.Success && (query.TradeStatus == AlipayStatus.TRADESUCCESS
                                || query.TradeStatus == AlipayStatus.TRADECLOSED))
                            {
                                data.ExtraProperties = JsonConvert.SerializeObject(query);
@@ -182,7 +182,7 @@
                            if (query.Code == AlipayResultCode.Success && query.RefundStatus == AlipayRefundStatus.Success)
                            {
                                data.ExtraProperties = JsonConvert.SerializeObject(query);
                                //data.FinishTime = Convert.ToDateTime(query.SendPayDate);
                                data.FinishTime = Convert.ToDateTime(query.GmtRefundPay);
                                await _lifePayExpensesReceiptsRepository.InsertAsync(data);
                            }
                        }
LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -28,6 +28,7 @@
using NPOI.SS.Formula.Functions;
using StackExchange.Redis;
using static Volo.Abp.Identity.Settings.IdentitySettingNames;
using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
namespace LifePayment.Application;
@@ -841,6 +842,13 @@
    public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input)
    {
        var result = await _aliPayApi.QueryAlipayTradeRefund(input);
        var order = await _lifePayOrderRepository.Where(x => x.OrderNo == input.OutTradeNo).FirstOrDefaultAsync();
        if (result.Code == AlipayResultCode.Success && result.RefundStatus == AlipayRefundStatus.Success)
        {
            order.LifePayOrderStatus = LifePayOrderStatusEnum.已退款;
            order.LifePayRefundStatus = LifePayRefundStatusEnum.已退款;
        }
        return result;
    }
LifePayment/LifePayment.Application/LifePay/StatisticsService.cs
@@ -35,6 +35,11 @@
            _dallyStatisticsRepository = dallyStatisticsRepository;
        }
        /// <summary>
        /// 顶部统计
        /// </summary>
        /// <param name="channleId"></param>
        /// <returns></returns>
        public async Task<TopStatisticsOutput> GetTopStatistics(string channleId = "")
        {
            var today = DateTime.Now.Date;
@@ -119,5 +124,10 @@
                return topStatisticsOutput;
            }
        }
        //public async Task<ReceiptsListOutPut> GetReceiptsList()
        //{
        //}
    }
}
LifePayment/LifePayment.Domain/Ali/AliPayApi.cs
@@ -56,13 +56,13 @@
        /// <returns></returns>
        public async Task<AlipayTradeFastpayRefundQueryResponse> QueryAlipayTradeRefund(OrderInQuiryInput input)
        {
            AlipayTradeFastpayRefundQueryResponse response = await Factory.Payment.Common().QueryRefundAsync(input.OutTradeNo, input.OutTradeNo);
            AlipayTradeFastpayRefundQueryResponse response = await QueryTradeRefund(input.OutTradeNo, input.OutTradeNo);
            return response;
        }
        public async Task<AlipayTradeRefundResponse> TradeRefund(AlipayTradeRefundRequest input)
        {
            AlipayTradeRefundResponse response = await TradeRefund(input.OutTradeNo,input.OutRefundNo, input.RefundAmount);
            AlipayTradeRefundResponse response = await TradeRefund(input.OutTradeNo, input.OutRefundNo, input.RefundAmount);
            return response;
        }
@@ -196,5 +196,136 @@
            throw new TeaUnretryableException(_lastRequest, innerException);
        }
        private async Task<AlipayTradeFastpayRefundQueryResponse> QueryTradeRefund(string outTradeNo, string outRequestNo)
        {
            Dictionary<string, object> runtime_ = new Dictionary<string, object>
        {
            {
                "ignoreSSL",
                _kernel.GetConfig("ignoreSSL")
            },
            {
                "httpProxy",
                _kernel.GetConfig("httpProxy")
            },
            { "connectTimeout", 15000 },
            { "readTimeout", 15000 },
            {
                "retry",
                new Dictionary<string, int?> { { "maxAttempts", 0 } }
            }
        };
            TeaRequest _lastRequest = null;
            Exception innerException = null;
            long _now = DateTime.Now.Millisecond;
            int _retryTimes = 0;
            while (TeaCore.AllowRetry((IDictionary)runtime_["retry"], _retryTimes, _now))
            {
                if (_retryTimes > 0)
                {
                    int backoffTime = TeaCore.GetBackoffTime((IDictionary)runtime_["backoff"], _retryTimes);
                    if (backoffTime > 0)
                    {
                        TeaCore.Sleep(backoffTime);
                    }
                }
                _retryTimes++;
                try
                {
                    TeaRequest teaRequest = new TeaRequest();
                    Dictionary<string, string> dictionary = new Dictionary<string, string>
                {
                    { "method", "alipay.trade.fastpay.refund.query" },
                    {
                        "app_id",
                        _kernel.GetConfig("appId")
                    },
                    {
                        "timestamp",
                        _kernel.GetTimestamp()
                    },
                    { "format", "json" },
                    { "version", "1.0" },
                    {
                        "alipay_sdk",
                        _kernel.GetSdkVersion()
                    },
                    { "charset", "UTF-8" },
                    {
                        "sign_type",
                        _kernel.GetConfig("signType")
                    },
                    {
                        "app_cert_sn",
                        _kernel.GetMerchantCertSN()
                    },
                    {
                        "alipay_root_cert_sn",
                        _kernel.GetAlipayRootCertSN()
                    }
                };
                    var queryOptions = new string[] { "gmt_refund_pay" };
                    Dictionary<string, object> bizParams = new Dictionary<string, object>
                {
                    { "out_trade_no", outTradeNo },
                    { "out_request_no", outRequestNo },
                    { "query_options", queryOptions }
                };
                    Dictionary<string, string> dictionary2 = new Dictionary<string, string>();
                    teaRequest.Protocol = _kernel.GetConfig("protocol");
                    teaRequest.Method = "POST";
                    teaRequest.Pathname = "/gateway.do";
                    teaRequest.Headers = new Dictionary<string, string>
                {
                    {
                        "host",
                        _kernel.GetConfig("gatewayHost")
                    },
                    { "content-type", "application/x-www-form-urlencoded;charset=utf-8" }
                };
                    teaRequest.Query = _kernel.SortMap(TeaConverter.merge<string>(new object[3]
                    {
                    new Dictionary<string, string> {
                    {
                        "sign",
                        _kernel.Sign(dictionary, bizParams, dictionary2, _kernel.GetConfig("merchantPrivateKey"))
                    } },
                    dictionary,
                    dictionary2
                    }));
                    teaRequest.Body = TeaCore.BytesReadable(_kernel.ToUrlEncodedRequestBody(bizParams));
                    _lastRequest = teaRequest;
                    TeaResponse response = await TeaCore.DoActionAsync(teaRequest, runtime_);
                    Dictionary<string, object> respMap = await _kernel.ReadAsJsonAsync(response, "alipay.trade.fastpay.refund.query");
                    if (_kernel.IsCertMode())
                    {
                        if (_kernel.Verify(respMap, _kernel.ExtractAlipayPublicKey(_kernel.GetAlipayCertSN(respMap))))
                        {
                            return TeaModel.ToObject<AlipayTradeFastpayRefundQueryResponse>(_kernel.ToRespModel(respMap));
                        }
                    }
                    else if (_kernel.Verify(respMap, _kernel.GetConfig("alipayPublicKey")))
                    {
                        return TeaModel.ToObject<AlipayTradeFastpayRefundQueryResponse>(_kernel.ToRespModel(respMap));
                    }
                    throw new TeaException(new Dictionary<string, string> { { "message", "验签失败,请检查支付宝公钥设置是否正确。" } });
                }
                catch (Exception ex)
                {
                    if (TeaCore.IsRetryable(ex))
                    {
                        innerException = ex;
                        continue;
                    }
                    throw ex;
                }
            }
            throw new TeaUnretryableException(_lastRequest, innerException);
        }
    }
}