diff --git a/CoreCms.Net.IServices/Pay/IAliPayServices.cs b/CoreCms.Net.IServices/Pay/IAliPayServices.cs index f79500ee..03939f9a 100644 --- a/CoreCms.Net.IServices/Pay/IAliPayServices.cs +++ b/CoreCms.Net.IServices/Pay/IAliPayServices.cs @@ -25,5 +25,16 @@ namespace CoreCms.Net.IServices /// 实体数据 /// Task PubPay(CoreCmsBillPayments entity); + + + /// + /// 用户退款 + /// + /// 退款单数据 + /// 支付单数据 + /// + Task Refund(CoreCmsBillRefund refundInfo, CoreCmsBillPayments paymentInfo); + + } } \ No newline at end of file diff --git a/CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs b/CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs index 46e294b7..39e1834a 100644 --- a/CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs +++ b/CoreCms.Net.Services/Bill/CoreCmsBillRefundServices.cs @@ -229,8 +229,7 @@ namespace CoreCms.Net.Services //支付宝退款 else if (panyMentsInfo.paymentCode == GlobalEnumVars.PaymentsTypes.alipay.ToString()) { - jm.status = false; - jm.msg = "支付宝退款未开通"; + jm = await _aliPayServices.Refund(info, panyMentsInfo); } //余额退款 else if (panyMentsInfo.paymentCode == GlobalEnumVars.PaymentsTypes.balancepay.ToString()) diff --git a/CoreCms.Net.Services/Pay/AliPayServices.cs b/CoreCms.Net.Services/Pay/AliPayServices.cs index 262fb6cd..3baf771b 100644 --- a/CoreCms.Net.Services/Pay/AliPayServices.cs +++ b/CoreCms.Net.Services/Pay/AliPayServices.cs @@ -28,6 +28,8 @@ using Essensoft.Paylink.WeChatPay; using Microsoft.Extensions.Options; using Newtonsoft.Json.Linq; using static Aliyun.OSS.Model.LiveChannelStat; +using Essensoft.Paylink.WeChatPay.V2.Request; +using Essensoft.Paylink.WeChatPay.V2; namespace CoreCms.Net.Services { @@ -72,8 +74,7 @@ namespace CoreCms.Net.Services - var config = await _alipayConfigServices.QueryByClauseAsync(p => - p.isDefault == true && p.isEnable == true && p.appType == tradeType); + var config = await _alipayConfigServices.QueryByClauseAsync(p => p.isDefault == true && p.isEnable == true && p.appType == tradeType); if (config == null) { jm.msg = "支付配置信息获取失败"; @@ -219,5 +220,75 @@ namespace CoreCms.Net.Services + /// + /// 用户退款 + /// + /// 退款单数据 + /// 支付单数据 + /// + public async Task Refund(CoreCmsBillRefund refundInfo, CoreCmsBillPayments paymentInfo) + { + var jm = new WebApiCallBack(); + + var tradeType = GlobalEnumVars.WeiChatPayTradeType.JSAPI.ToString(); + if (!string.IsNullOrEmpty(paymentInfo.parameters)) + { + var jObj = (JObject)JsonConvert.DeserializeObject(paymentInfo.parameters); + if (jObj != null && jObj.TryGetValue("trade_type", out var value)) + tradeType = PayHelper.GetWeiChatPayTradeType(value.ObjectToString()); + } + + var config = await _alipayConfigServices.QueryByClauseAsync(p => p.isDefault == true && p.isEnable == true && p.appType == tradeType); + if (config == null) + { + jm.msg = "支付配置信息获取失败"; + return jm; + } + + if (string.IsNullOrEmpty(config.refundUrl)) + { + jm.msg = "未获取到配置的退款通知地址"; + return jm; + } + + //构建linkPay请求配置实体 + var payOptions = new AlipayOptions + { + AppId = config.appId, + AlipayPublicKey = config.publicKey, + AppPrivateKey = config.privateKey, + ServerUrl = config.serverUrl, + SignType = config.signType, + AppPublicCert = config.appPublicCert, + AlipayPublicCert = config.alipayPublicCert, + AlipayRootCert = config.alipayRootCert + }; + + + var model = new AlipayTradeRefundModel + { + OutTradeNo = paymentInfo.paymentId, + TradeNo = paymentInfo.tradeNo, + RefundAmount = refundInfo.money.ToString(CultureInfo.InvariantCulture), + OutRequestNo = refundInfo.refundId, + RefundReason = "用户申请退款", + }; + + + var req = new AlipayTradeRefundRequest(); + req.SetBizModel(model); + + var response = await _client.ExecuteAsync(req, payOptions); + + jm.msg = !response.IsError ? "退款成功" : "退款失败"; + jm.status = !response.IsError; + jm.data = response; + + + return jm; + } + + + } } \ No newline at end of file diff --git a/CoreCms.Net.Web.Admin/wwwroot/views/financial/billrefund/audit.html b/CoreCms.Net.Web.Admin/wwwroot/views/financial/billrefund/audit.html index c204d319..d25d4bf6 100644 --- a/CoreCms.Net.Web.Admin/wwwroot/views/financial/billrefund/audit.html +++ b/CoreCms.Net.Web.Admin/wwwroot/views/financial/billrefund/audit.html @@ -1,5 +1,12 @@