From 3274bc9ca97ce02bd7eb86107898a40531057477 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期一, 09 六月 2025 16:37:48 +0800
Subject: [PATCH] pref:多次接收到支付回调的bug
---
LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs | 36 +++++++++++++++++++++++++-----------
LifePayment/LifePayment.Application/LifePay/LifePayService.cs | 2 +-
2 files changed, 26 insertions(+), 12 deletions(-)
diff --git a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
index 25fc798..7d0e1f1 100644
--- a/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
+++ b/LifePayment/LifePayment.Application/LifePay/LifePayService.cs
@@ -1306,7 +1306,7 @@
var order = await _lifePayOrderRepository.Where(x => x.OrderNo == orderNo).FirstOrDefaultAsync();
CheckExtensions.IfTrueThrowUserFriendlyException(order == null, "璁㈠崟涓嶅瓨鍦�");
- if (order.PayStatus == LifePayStatusEnum.宸叉敮浠�)
+ if (order.PayStatus != LifePayStatusEnum.鏈敮浠�)
{
return;
}
diff --git a/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
index 41be1d0..d5bead3 100644
--- a/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
+++ b/LifePayment/LifePayment.HttpApi/LifePay/WxPayNotifyController.cs
@@ -2,12 +2,14 @@
using LifePayment.Domain;
using LifePayment.Domain.Shared;
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.Uow;
namespace LifePayment.HttpApi
@@ -22,18 +24,21 @@
private readonly IWxPayApi _wxPayApi;
private readonly ILifePayService _lifePayService;
private readonly ILifePayOrderService _lifePayOrderService;
+ private readonly IDistributedCache<string> distributedCache;
private readonly ILogger<WxPayNotifyController> _logger;
public WxPayNotifyController(
IWxPayApi wxPayApi,
ILogger<WxPayNotifyController> logger,
ILifePayService lifePayService,
- ILifePayOrderService lifePayOrderService)
+ ILifePayOrderService lifePayOrderService,
+ IDistributedCache<string> distributedCache)
{
_wxPayApi = wxPayApi;
_logger = logger;
_lifePayService = lifePayService;
_lifePayOrderService = lifePayOrderService;
+ this.distributedCache = distributedCache;
}
/// <summary>
@@ -56,17 +61,26 @@
{
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
- });
+ await _lifePayService.LifePaySuccessHandler(wxPayNotice.OutTradeNo, wxPayNotice.TransactionId);
+
+ // 鎻掑叆鏀舵敮娴佹按
+ await _lifePayOrderService.AddLifePayExpensesReceipts(new AddLifePayExpensesReceiptsInput()
+ {
+ OrderNo = wxPayNotice.OutTradeNo,
+ OutOrderNo = wxPayNotice.TransactionId,
+ LifePayType = LifePayTypeEnum.WxPay,
+ ExpensesReceiptsType = ExpensesReceiptsTypeEnum.Expenses,
+ Amount = wxPayNotice.Amount.Total
+ });
+
+ distributedCache.Set(key, data, new DistributedCacheEntryOptions
+ {
+ AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(10)
+ });
+ }
}
}
}
--
Gitblit v1.9.1