From fdf165b0531b13c6ae5c70dd634d7357fe69be0b Mon Sep 17 00:00:00 2001 From: coolcalf <28551@qq.com> Date: Mon, 22 Jul 2024 17:37:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86=E5=BE=AE=E4=BF=A1=E6=94=AF=E4=BB=98?= =?UTF-8?q?=E5=85=B3=E9=97=AD=E7=8A=B6=E6=80=81(CLOSED)=E5=86=99=E5=85=A5?= =?UTF-8?q?=E5=88=B0=E6=94=AF=E4=BB=98=E8=AE=B0=E5=BD=95=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/Common/SysCommonService.cs | 2 ++ .../Service/Wechat/SysWechatPayService.cs | 35 ++++++++++++------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/Admin.NET/Admin.NET.Core/Service/Common/SysCommonService.cs b/Admin.NET/Admin.NET.Core/Service/Common/SysCommonService.cs index e4f34edf..4ce3d6bd 100644 --- a/Admin.NET/Admin.NET.Core/Service/Common/SysCommonService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Common/SysCommonService.cs @@ -91,6 +91,8 @@ public class SysCommonService : IDynamicApiController, ITransient // 接口分组/控制器信息 var controllerActionDescriptor = action.ActionDescriptor as ControllerActionDescriptor; + if (controllerActionDescriptor == null) + continue; var apiDescription = controllerActionDescriptor.ControllerTypeInfo.GetCustomAttribute(true); var controllerName = controllerActionDescriptor.ControllerName; if (!apiOuput.Children.Exists(u => u.Name == controllerName)) diff --git a/Admin.NET/Admin.NET.Core/Service/Wechat/SysWechatPayService.cs b/Admin.NET/Admin.NET.Core/Service/Wechat/SysWechatPayService.cs index 905974f6..4220ac1d 100644 --- a/Admin.NET/Admin.NET.Core/Service/Wechat/SysWechatPayService.cs +++ b/Admin.NET/Admin.NET.Core/Service/Wechat/SysWechatPayService.cs @@ -38,7 +38,10 @@ public class SysWechatPayService : IDynamicApiController, ITransient /// private WechatTenpayClient CreateTenpayClient() { - var cerFilePath = App.WebHostEnvironment.ContentRootPath + _wechatPayOptions.MerchantCertificatePrivateKey; + var cerFilePath = _wechatPayOptions.MerchantCertificatePrivateKey; + + if (!File.Exists(cerFilePath)) + throw Oops.Oh("商户证书文件不存在:" + cerFilePath); var tenpayClientOptions = new WechatTenpayClientOptions() { @@ -353,6 +356,12 @@ public class SysWechatPayService : IDynamicApiController, ITransient [DisplayName("微信支付订单号查询(校正)")] public async Task 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() { MerchantId = _wechatPayOptions.MerchantId, @@ -360,21 +369,18 @@ public class SysWechatPayService : IDynamicApiController, ITransient WechatpayCertificateSerialNumber = _wechatPayOptions.MerchantCertificateSerialNumber }; 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)) { - wechatPay.TransactionId = response.TransactionId; // 支付订单号 wechatPay.TradeType = response.TradeType; // 交易类型 wechatPay.TradeState = response.TradeState; // 交易状态 wechatPay.TradeStateDescription = response.TradeStateDescription; // 交易状态描述 - wechatPay.BankType = response.BankType; // 付款银行类型 - wechatPay.Total = response.Amount.Total; // 订单总金额 - wechatPay.PayerTotal = response.Amount.PayerTotal; // 用户支付金额 + wechatPay.BankType = response.BankType; // 付款银行类型 + wechatPay.PayerTotal = response.Amount?.PayerTotal; // 用户支付金额 wechatPay.SuccessTime = response.SuccessTime; // 支付完成时间 - await _sysWechatPayRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync(); return wechatPay.Adapt(); } @@ -391,6 +397,12 @@ public class SysWechatPayService : IDynamicApiController, ITransient [DisplayName("微信商户订单号查询(校正)")] public async Task 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() { MerchantId = _wechatPayOptions.MerchantId, @@ -398,7 +410,7 @@ public class SysWechatPayService : IDynamicApiController, ITransient WechatpayCertificateSerialNumber = _wechatPayOptions.MerchantCertificateSerialNumber }; 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); @@ -408,9 +420,8 @@ public class SysWechatPayService : IDynamicApiController, ITransient wechatPay.TradeType = response.TradeType; // 交易类型 wechatPay.TradeState = response.TradeState; // 交易状态 wechatPay.TradeStateDescription = response.TradeStateDescription; // 交易状态描述 - wechatPay.BankType = response.BankType; // 付款银行类型 - wechatPay.Total = response.Amount.Total; // 订单总金额 - wechatPay.PayerTotal = response.Amount.PayerTotal; // 用户支付金额 + wechatPay.BankType = response.BankType; // 付款银行类型 + wechatPay.PayerTotal = response.Amount?.PayerTotal; // 用户支付金额 wechatPay.SuccessTime = response.SuccessTime; // 支付完成时间 await _sysWechatPayRep.AsUpdateable(wechatPay).IgnoreColumns(true).ExecuteCommandAsync(); return wechatPay.Adapt();