将微信支付关闭状态(CLOSED)写入到支付记录中

This commit is contained in:
coolcalf 2024-07-22 17:37:19 +08:00
parent 1d0a22572d
commit fdf165b053
2 changed files with 25 additions and 12 deletions

View File

@ -91,6 +91,8 @@ public class SysCommonService : IDynamicApiController, ITransient
// 接口分组/控制器信息 // 接口分组/控制器信息
var controllerActionDescriptor = action.ActionDescriptor as ControllerActionDescriptor; var controllerActionDescriptor = action.ActionDescriptor as ControllerActionDescriptor;
if (controllerActionDescriptor == null)
continue;
var apiDescription = controllerActionDescriptor.ControllerTypeInfo.GetCustomAttribute<ApiDescriptionSettingsAttribute>(true); var apiDescription = controllerActionDescriptor.ControllerTypeInfo.GetCustomAttribute<ApiDescriptionSettingsAttribute>(true);
var controllerName = controllerActionDescriptor.ControllerName; var controllerName = controllerActionDescriptor.ControllerName;
if (!apiOuput.Children.Exists(u => u.Name == controllerName)) if (!apiOuput.Children.Exists(u => u.Name == controllerName))

View File

@ -38,7 +38,10 @@ public class SysWechatPayService : IDynamicApiController, ITransient
/// <returns></returns> /// <returns></returns>
private WechatTenpayClient CreateTenpayClient() private WechatTenpayClient CreateTenpayClient()
{ {
var cerFilePath = App.WebHostEnvironment.ContentRootPath + _wechatPayOptions.MerchantCertificatePrivateKey; var cerFilePath = _wechatPayOptions.MerchantCertificatePrivateKey;
if (!File.Exists(cerFilePath))
throw Oops.Oh<Exception>("商户证书文件不存在:" + cerFilePath);
var tenpayClientOptions = new WechatTenpayClientOptions() var tenpayClientOptions = new WechatTenpayClientOptions()
{ {
@ -353,6 +356,12 @@ public class SysWechatPayService : IDynamicApiController, ITransient
[DisplayName("微信支付订单号查询(校正)")] [DisplayName("微信支付订单号查询(校正)")]
public async Task<WechatPayOutput> GetPayTransactionByIdAsync(string transactionId) public async Task<WechatPayOutput> GetPayTransactionByIdAsync(string transactionId)
{ {
if (string.IsNullOrEmpty(transactionId))
throw Oops.Oh("TransactionId 不能为空");
if (string.IsNullOrEmpty(_wechatPayOptions.MerchantId) || string.IsNullOrEmpty(_wechatPayOptions.MerchantCertificateSerialNumber))
throw Oops.Oh("商户号或证书序列号不能为空,请检查支付配置");
var request = new GetPayTransactionByIdRequest() var request = new GetPayTransactionByIdRequest()
{ {
MerchantId = _wechatPayOptions.MerchantId, MerchantId = _wechatPayOptions.MerchantId,
@ -360,21 +369,18 @@ public class SysWechatPayService : IDynamicApiController, ITransient
WechatpayCertificateSerialNumber = _wechatPayOptions.MerchantCertificateSerialNumber WechatpayCertificateSerialNumber = _wechatPayOptions.MerchantCertificateSerialNumber
}; };
var response = await _wechatTenpayClient.ExecuteGetPayTransactionByIdAsync(request); var response = await _wechatTenpayClient.ExecuteGetPayTransactionByIdAsync(request);
if (response.TradeState == "SUCCESS") if (response.TradeState == "SUCCESS" || response.TradeState == "CLOSED")
{ {
// 修正订单支付状态 // 修正订单支付状态
var wechatPay = await _sysWechatPayRep.GetFirstAsync(u => u.TransactionId == transactionId && u.MerchantId == request.MerchantId); var wechatPay = await _sysWechatPayRep.GetFirstAsync(u => u.TransactionId == request.TransactionId && u.MerchantId == request.MerchantId);
if (wechatPay != null && string.IsNullOrEmpty(wechatPay.TradeState)) if (wechatPay != null && string.IsNullOrEmpty(wechatPay.TradeState))
{ {
wechatPay.TransactionId = response.TransactionId; // 支付订单号
wechatPay.TradeType = response.TradeType; // 交易类型 wechatPay.TradeType = response.TradeType; // 交易类型
wechatPay.TradeState = response.TradeState; // 交易状态 wechatPay.TradeState = response.TradeState; // 交易状态
wechatPay.TradeStateDescription = response.TradeStateDescription; // 交易状态描述 wechatPay.TradeStateDescription = response.TradeStateDescription; // 交易状态描述
wechatPay.BankType = response.BankType; // 付款银行类型 wechatPay.BankType = response.BankType; // 付款银行类型
wechatPay.Total = response.Amount.Total; // 订单总金额 wechatPay.PayerTotal = response.Amount?.PayerTotal; // 用户支付金额
wechatPay.PayerTotal = response.Amount.PayerTotal; // 用户支付金额
wechatPay.SuccessTime = response.SuccessTime; // 支付完成时间 wechatPay.SuccessTime = response.SuccessTime; // 支付完成时间
await _sysWechatPayRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync(); await _sysWechatPayRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
return wechatPay.Adapt<WechatPayOutput>(); return wechatPay.Adapt<WechatPayOutput>();
} }
@ -391,6 +397,12 @@ public class SysWechatPayService : IDynamicApiController, ITransient
[DisplayName("微信商户订单号查询(校正)")] [DisplayName("微信商户订单号查询(校正)")]
public async Task<WechatPayOutput> GetPayTransactionByOutTradeNumberAsync(string outTradeNumber) public async Task<WechatPayOutput> GetPayTransactionByOutTradeNumberAsync(string outTradeNumber)
{ {
if (string.IsNullOrEmpty(outTradeNumber))
throw Oops.Oh("商户订单号(OutTradeNumber)不能为空");
if (string.IsNullOrEmpty(_wechatPayOptions.MerchantId) || string.IsNullOrEmpty(_wechatPayOptions.MerchantCertificateSerialNumber))
throw Oops.Oh("商户号或证书序列号不能为空,请检查支付配置");
var request = new GetPayTransactionByOutTradeNumberRequest() var request = new GetPayTransactionByOutTradeNumberRequest()
{ {
MerchantId = _wechatPayOptions.MerchantId, MerchantId = _wechatPayOptions.MerchantId,
@ -398,7 +410,7 @@ public class SysWechatPayService : IDynamicApiController, ITransient
WechatpayCertificateSerialNumber = _wechatPayOptions.MerchantCertificateSerialNumber WechatpayCertificateSerialNumber = _wechatPayOptions.MerchantCertificateSerialNumber
}; };
var response = await _wechatTenpayClient.ExecuteGetPayTransactionByOutTradeNumberAsync(request); var response = await _wechatTenpayClient.ExecuteGetPayTransactionByOutTradeNumberAsync(request);
if (response.TradeState == "SUCCESS") if (response.TradeState == "SUCCESS" || response.TradeState == "CLOSED")
{ {
// 修正订单支付状态 // 修正订单支付状态
var wechatPay = await _sysWechatPayRep.GetFirstAsync(u => u.OutTradeNumber == outTradeNumber && u.MerchantId == request.MerchantId); var wechatPay = await _sysWechatPayRep.GetFirstAsync(u => u.OutTradeNumber == outTradeNumber && u.MerchantId == request.MerchantId);
@ -408,9 +420,8 @@ public class SysWechatPayService : IDynamicApiController, ITransient
wechatPay.TradeType = response.TradeType; // 交易类型 wechatPay.TradeType = response.TradeType; // 交易类型
wechatPay.TradeState = response.TradeState; // 交易状态 wechatPay.TradeState = response.TradeState; // 交易状态
wechatPay.TradeStateDescription = response.TradeStateDescription; // 交易状态描述 wechatPay.TradeStateDescription = response.TradeStateDescription; // 交易状态描述
wechatPay.BankType = response.BankType; // 付款银行类型 wechatPay.BankType = response.BankType; // 付款银行类型
wechatPay.Total = response.Amount.Total; // 订单总金额 wechatPay.PayerTotal = response.Amount?.PayerTotal; // 用户支付金额
wechatPay.PayerTotal = response.Amount.PayerTotal; // 用户支付金额
wechatPay.SuccessTime = response.SuccessTime; // 支付完成时间 wechatPay.SuccessTime = response.SuccessTime; // 支付完成时间
await _sysWechatPayRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync(); await _sysWechatPayRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync();
return wechatPay.Adapt<WechatPayOutput>(); return wechatPay.Adapt<WechatPayOutput>();