From 7a540f529d2c9a541993bc9818cad9c9093fec91 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期三, 03 十二月 2025 11:04:35 +0800
Subject: [PATCH] fix: bug
---
LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs | 138 +++++++++++++++++++++++++++++++++++++--------
1 files changed, 113 insertions(+), 25 deletions(-)
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
index 5411b49..cf0adc1 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
@@ -1,14 +1,20 @@
-锘縰sing LifePayment.Application.Contracts;
+锘縰sing Alipay.AopSdk.Core.Domain;
+using LifePayment.Application.Contracts;
using LifePayment.Domain;
using LifePayment.Domain.Shared;
+using Medallion.Threading;
using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Distributed;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using System;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.Mvc;
+using Volo.Abp.Caching;
+using Volo.Abp.DistributedLocking;
using Volo.Abp.Uow;
+using ZeroD.Util;
namespace LifePayment.HttpApi
{
@@ -22,18 +28,24 @@
private readonly IWxPayApi _wxPayApi;
private readonly ILifePayService _lifePayService;
private readonly ILifePayOrderService _lifePayOrderService;
+ private readonly IDistributedCache<string> distributedCache;
+ private readonly IAbpDistributedLock distributedLock;
private readonly ILogger<WxPayNotifyController> _logger;
public WxPayNotifyController(
IWxPayApi wxPayApi,
ILogger<WxPayNotifyController> logger,
ILifePayService lifePayService,
- ILifePayOrderService lifePayOrderService)
+ ILifePayOrderService lifePayOrderService,
+ IDistributedCache<string> distributedCache,
+ IAbpDistributedLock distributedLock)
{
_wxPayApi = wxPayApi;
_logger = logger;
_lifePayService = lifePayService;
_lifePayOrderService = lifePayOrderService;
+ this.distributedCache = distributedCache;
+ this.distributedLock = distributedLock;
}
/// <summary>
@@ -42,34 +54,70 @@
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
- [UnitOfWork]
+ [UnitOfWork(false)]
public async Task<WxRechargeNotifyResult> WxRechargeNotify(WxRechargeNotifyInput input)
{
try
{
- _logger.LogError($"鐢熸椿绠″寰俊鍏呭�煎洖璋冮�氱煡锛氳繘鍏ュ井淇″洖璋�");
+ var req = input.ToJson();
+ _logger.LogInformation($"鐢熸椿绠″寰俊鍏呭�煎洖璋冮�氱煡锛氳繘鍏ュ井淇″洖璋�:" + req);
var data = _wxPayApi.AesGcmDecrypt(input.Resource.AssociatedData, input.Resource.Nonce, input.Resource.Ciphertext);
+ _logger.LogInformation($"鐢熸椿绠″寰俊鍏呭�煎洖璋冮�氱煡data锛�" + data);
var wxPayNotice = JsonConvert.DeserializeObject<WxPayNotice>(data);
- if (wxPayNotice.OutTradeNo.Contains("JF") )
+ await using var orderLock = await distributedLock.TryAcquireAsync($"LockKey:UpdateOrder:{wxPayNotice.OutTradeNo}", TimeSpan.FromSeconds(60));
+ _logger.LogInformation($"閿侊細LockKey:UpdateOrder:{wxPayNotice.OutTradeNo} - {orderLock != null}");
+
+ if (wxPayNotice.OutTradeNo.Contains("JF"))
{
if (wxPayNotice.TradeState == LifePaymentConstant.WxPayStatus.鏀粯鎴愬姛)
{
- await _lifePayService.LifePaySuccessHandler(wxPayNotice.OutTradeNo, wxPayNotice.TransactionId);
- await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+
+ var key = $"WxRechargeNotify_{wxPayNotice.OutTradeNo}";
+ if (string.IsNullOrWhiteSpace(distributedCache.Get(key)))
{
- OrderNo = wxPayNotice.OutTradeNo,
- OutOrderNo = wxPayNotice.TransactionId,
- LifePayType = LifePayTypeEnum.WxPay,
- ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses,
- Amount = wxPayNotice.Amount.Total
- });
+ _logger.LogInformation("姝e湪澶勭悊鍥炶皟");
+ await _lifePayService.LifePaySuccessHandler(wxPayNotice.OutTradeNo, wxPayNotice.TransactionId);
+ _logger.LogInformation("宸插鐞嗗洖璋�");
+
+ // 鎻掑叆鏀舵敮娴佹按
+ await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+ {
+ OrderNo = wxPayNotice.OutTradeNo,
+ OutOrderNo = wxPayNotice.TransactionId,
+ LifePayType = LifePayTypeEnum.WxPay,
+ ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses,
+ Amount = wxPayNotice.Amount.Total
+ });
+ _logger.LogInformation("宸叉彃鍏ユ敹鏀祦姘�");
+
+ distributedCache.Set(key, data, new DistributedCacheEntryOptions
+ {
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
+ });
+
+ await CurrentUnitOfWork.SaveChangesAsync();
+ _logger.LogInformation("浜嬪姟瀹屾垚");
+ }
+ else
+ {
+ _logger.LogInformation("宸茶繃婊ら噸澶嶈姹�");
+ }
}
+ else
+ {
+ _logger.LogInformation("浜ゆ槗鐘舵�佷笉绗﹀悎瑙勫垯");
+ }
+ }
+ else
+ {
+ _logger.LogInformation("璁㈠崟鍙蜂笉绗﹀悎瑙勫垯");
}
}
catch (Exception ex)
{
await CurrentUnitOfWork.RollbackAsync();
+ _logger.LogError($"寰俊鏀粯鍥炶皟寮傚父锛歿ex.Message}", ex);
return new WxRechargeNotifyResult
{
Code = "FAIL",
@@ -94,35 +142,42 @@
{
try
{
- _logger.LogError($"寰俊閫�娆惧洖璋冮�氱煡锛氳繘鍏ュ井淇″洖璋�");
+ var req = input.ToJson();
+ _logger.LogError($"寰俊閫�娆惧洖璋冮�氱煡锛氳繘鍏ュ井淇″洖璋冿細" + req);
var data = _wxPayApi.AesGcmDecrypt(input.Resource.AssociatedData, input.Resource.Nonce, input.Resource.Ciphertext);
+ _logger.LogError($"寰俊閫�娆惧洖璋冮�氱煡data锛�" + data);
var wxPayNotice = JsonConvert.DeserializeObject<WxPayDomesticRefundsNotice>(data);
if (wxPayNotice.OutTradeNo.Contains("JF"))
{
- if (wxPayNotice.RefundStatus == LifePaymentConstant.WxPayRefundStatus.閫�娆炬垚鍔�)
- {
-
- }
+
switch (wxPayNotice.RefundStatus)
{
case LifePaymentConstant.WxPayRefundStatus.閫�娆炬垚鍔�:
+ await _lifePayService.LifePayRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.宸查��娆�);
+ // 鎻掑叆鏀舵敮娴佹按
+ await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+ {
+ OrderNo = wxPayNotice.OutTradeNo,
+ OutRefundNo = wxPayNotice.OutRefundNo,
+ OutOrderNo = wxPayNotice.TransactionId,
+ LifePayType = LifePayTypeEnum.WxPay,
+ ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts,
+ Amount = wxPayNotice.Amount.Total
+ });
+ break;
case LifePaymentConstant.WxPayRefundStatus.閫�娆惧叧闂�:
- await _lifePayService.WxPayDomesticRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.宸查��娆�);
- break;
case LifePaymentConstant.WxPayRefundStatus.閫�娆惧鐞嗕腑:
- await _lifePayService.WxPayDomesticRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.閫�娆句腑);
- break;
case LifePaymentConstant.WxPayRefundStatus.閫�娆惧紓甯�:
- await _lifePayService.WxPayDomesticRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.閫�娆句腑);
+ await _lifePayService.LifePayRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.閫�娆句腑);
break;
- default : await _lifePayService.WxPayDomesticRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.閫�娆句腑);break;
+ default: await _lifePayService.LifePayRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.閫�娆句腑); break;
}
}
}
catch (Exception ex)
{
-
+ _logger.LogError($"寰俊閫�娆惧洖璋冮�氱煡閿欒锛�" + ex.Message);
return new WxRechargeNotifyResult
{
Code = "FAIL",
@@ -135,5 +190,38 @@
Code = "SUCCESS",
};
}
+
+ [HttpPost]
+ [UnitOfWork]
+ public async Task WxPayDomesticRefundsNotifyImp(WxPayDomesticRefundsNotice input)
+ {
+ var wxPayNotice = input;
+ if (wxPayNotice.OutTradeNo.Contains("JF"))
+ {
+
+ switch (wxPayNotice.RefundStatus)
+ {
+ case LifePaymentConstant.WxPayRefundStatus.閫�娆炬垚鍔�:
+ await _lifePayService.LifePayRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.宸查��娆�);
+ // 鎻掑叆鏀舵敮娴佹按
+ await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+ {
+ OrderNo = wxPayNotice.OutTradeNo,
+ OutRefundNo = wxPayNotice.OutRefundNo,
+ OutOrderNo = wxPayNotice.TransactionId,
+ LifePayType = LifePayTypeEnum.WxPay,
+ ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Receipts,
+ Amount = wxPayNotice.Amount.Total
+ });
+ break;
+ case LifePaymentConstant.WxPayRefundStatus.閫�娆惧叧闂�:
+ case LifePaymentConstant.WxPayRefundStatus.閫�娆惧鐞嗕腑:
+ case LifePaymentConstant.WxPayRefundStatus.閫�娆惧紓甯�:
+ await _lifePayService.LifePayRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.閫�娆句腑);
+ break;
+ default: await _lifePayService.LifePayRefundsHandler(wxPayNotice.OutTradeNo, LifePayRefundStatusEnum.閫�娆句腑); break;
+ }
+ }
+ }
}
}
\ No newline at end of file
--
Gitblit v1.9.1