diff --git a/CoreCms.Net.Configuration/GlobalEnumVars.cs b/CoreCms.Net.Configuration/GlobalEnumVars.cs index 7c080c00..26d3a510 100644 --- a/CoreCms.Net.Configuration/GlobalEnumVars.cs +++ b/CoreCms.Net.Configuration/GlobalEnumVars.cs @@ -3365,5 +3365,45 @@ namespace CoreCms.Net.Configuration #endregion + #region 支付宝 + + /// + /// 微信支付交易类型 + /// + public enum AliPayPayTradeType + { + /// + /// JSAPI(支付宝小程序支付) + /// + [Description("JSAPI(支付宝小程序支付)")] + JSAPI = 1, + + /// + /// JSAPI_PC(电脑网站支付) + /// + [Description("JSAPI_PC(电脑网站支付)")] + JSAPI_PC = 2, + + /// + /// NATIVE(扫码支付) + /// + [Description("NATIVE(扫码支付)")] + ScanQRCodes = 3, + + /// + /// APP(APP支付) + /// + [Description("APP(APP支付)")] + APP = 4, + + /// + /// MWEB(H5支付) + /// + [Description("MWEB(H5支付)")] + MWEB = 5 + } + + #endregion + } } diff --git a/CoreCms.Net.Services/Pay/AliPayServices.cs b/CoreCms.Net.Services/Pay/AliPayServices.cs index 9f6b2aca..20c9aa33 100644 --- a/CoreCms.Net.Services/Pay/AliPayServices.cs +++ b/CoreCms.Net.Services/Pay/AliPayServices.cs @@ -18,12 +18,15 @@ using System.Threading.Tasks; using NLog; using System; using System.Globalization; +using CoreCms.Net.Utility.Extensions; using Essensoft.Paylink.Alipay; using Essensoft.Paylink.Alipay.Domain; using Essensoft.Paylink.Alipay.Request; using Microsoft.Extensions.DependencyInjection; using Essensoft.Paylink.WeChatPay; using Microsoft.Extensions.Options; +using Newtonsoft.Json.Linq; +using static Aliyun.OSS.Model.LiveChannelStat; namespace CoreCms.Net.Services { @@ -57,32 +60,158 @@ namespace CoreCms.Net.Services var billPaymentsServices = container.ServiceProvider.GetService(); var payment = await billPaymentsServices.QueryByClauseAsync(p => p.paymentId == entity.paymentId); var allPayUrl = AppSettingsConstVars.PayCallBackAlipayUrl; - var allPayReturnUrl = AppSettingsConstVars.PayCallBackAlipayUrl; + var allPayReturnUrl = AppSettingsConstVars.PayCallBackAlipayRefundUrl; if (string.IsNullOrEmpty(allPayUrl)) { jm.msg = "未获取到配置的回调地址"; return jm; } - var model = new AlipayTradeAppPayModel + + + var tradeType = GlobalEnumVars.AliPayPayTradeType.ScanQRCodes.ToString(); + if (!string.IsNullOrEmpty(entity.parameters)) { - OutTradeNo = entity.paymentId, - Subject = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle, - ProductCode = entity.paymentCode, - TotalAmount = entity.money.ToString(CultureInfo.InvariantCulture), - Body = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle - }; - var req = new AlipayTradeAppPayRequest(); - req.SetBizModel(model); - req.SetNotifyUrl(allPayUrl); - Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝支付拼接APP入参", JsonConvert.SerializeObject(model)); - var response = await _client.SdkExecuteAsync(req, _optionsAccessor.Value); - Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝支付返回数据", JsonConvert.SerializeObject(response)); - jm.data = response.Body; - response.TradeNo = entity.paymentId; - jm.otherData = response; - jm.status = true; + var jobj = (JObject)JsonConvert.DeserializeObject(entity.parameters); + if (jobj != null && jobj.ContainsKey("trade_type")) + tradeType = GetTradeType(jobj["trade_type"].ObjectToString()); + } + + //扫码支付 + if (tradeType == GlobalEnumVars.AliPayPayTradeType.ScanQRCodes.ToString()) + { + + var model = new AlipayTradePrecreateModel + { + OutTradeNo = entity.paymentId, + Subject = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle, + TotalAmount = entity.money.ToString(CultureInfo.InvariantCulture), + Body = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle + }; + var req = new AlipayTradePrecreateRequest(); + req.SetBizModel(model); + req.SetNotifyUrl(allPayUrl); + req.SetReturnUrl(allPayReturnUrl); + + Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝ScanQRCodes支付拼接APP入参", JsonConvert.SerializeObject(model)); + var response = await _client.ExecuteAsync(req, _optionsAccessor.Value); + Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝ScanQRCodes支付返回数据", JsonConvert.SerializeObject(response)); + + + jm.data = response.Body; + //response.OutTradeNo = entity.paymentId; + jm.otherData = response; + jm.status = !response.IsError; + + } + //PC网站支付 + else if (tradeType == GlobalEnumVars.AliPayPayTradeType.JSAPI_PC.ToString()) + { + var model = new AlipayTradePagePayModel + { + OutTradeNo = entity.paymentId, + Subject = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle, + //ProductCode = "FAST_INSTANT_TRADE_PAY", + TotalAmount = entity.money.ToString(CultureInfo.InvariantCulture), + Body = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle + }; + var req = new AlipayTradePagePayRequest(); + req.SetBizModel(model); + req.SetNotifyUrl(allPayUrl); + req.SetReturnUrl(allPayReturnUrl); + + + Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝JSAPI_PC支付拼接APP入参", JsonConvert.SerializeObject(model)); + var response = await _client.PageExecuteAsync(req, _optionsAccessor.Value); + Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝JSAPI_PC支付返回数据", JsonConvert.SerializeObject(response)); + + + jm.data = response.Body; + response.TradeNo = entity.paymentId; + jm.otherData = response; + jm.status = !response.IsError; + + } + //APP支付 + else if (tradeType == GlobalEnumVars.AliPayPayTradeType.APP.ToString()) + { + var model = new AlipayTradeAppPayModel + { + OutTradeNo = entity.paymentId, + Subject = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle, + ProductCode = entity.paymentCode, + TotalAmount = entity.money.ToString(CultureInfo.InvariantCulture), + Body = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle + }; + var req = new AlipayTradeAppPayRequest(); + req.SetBizModel(model); + req.SetNotifyUrl(allPayUrl); + req.SetReturnUrl(allPayReturnUrl); + + + Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝APP支付拼接APP入参", JsonConvert.SerializeObject(model)); + var response = await _client.SdkExecuteAsync(req, _optionsAccessor.Value); + Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝APP支付返回数据", JsonConvert.SerializeObject(response)); + + + jm.data = response.Body; + response.TradeNo = entity.paymentId; + jm.otherData = response; + jm.status = !response.IsError; + + } + //H5支付 + else if (tradeType == GlobalEnumVars.AliPayPayTradeType.MWEB.ToString()) + { + var model = new AlipayTradeWapPayModel + { + OutTradeNo = entity.paymentId, + Subject = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle, + ProductCode = entity.paymentCode, + TotalAmount = entity.money.ToString(CultureInfo.InvariantCulture), + Body = entity.payTitle.Length > 40 ? entity.payTitle[..40] : entity.payTitle + }; + var req = new AlipayTradeWapPayRequest(); + req.SetBizModel(model); + req.SetNotifyUrl(allPayUrl); + req.SetReturnUrl(allPayReturnUrl); + + + Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝MWEB支付拼接APP入参", JsonConvert.SerializeObject(model)); + var response = await _client.PageExecuteAsync(req, _optionsAccessor.Value); + Loging.NLogUtil.WriteAll(LogLevel.Trace, Loging.LogType.Order, "支付宝MWEB支付返回数据", JsonConvert.SerializeObject(response)); + + + jm.data = response.Body; + response.TradeNo = entity.paymentId; + jm.otherData = response; + jm.status = !response.IsError; + + } + + return jm; } + + private static string GetTradeType(string tradeType) + { + if (tradeType != GlobalEnumVars.AliPayPayTradeType.JSAPI.ToString() && + tradeType != GlobalEnumVars.AliPayPayTradeType.JSAPI_PC.ToString() && + tradeType != GlobalEnumVars.AliPayPayTradeType.ScanQRCodes.ToString() && + tradeType != GlobalEnumVars.AliPayPayTradeType.APP.ToString() && + tradeType != GlobalEnumVars.AliPayPayTradeType.MWEB.ToString() + ) + { + return GlobalEnumVars.AliPayPayTradeType.JSAPI_PC.ToString(); + } + + //if (tradeType == GlobalEnumVars.AliPayPayTradeType.JSAPI_PC.ToString()) + //{ + // return GlobalEnumVars.AliPayPayTradeType.JSAPI_PC.ToString(); + //} + return tradeType; + } + + } } \ No newline at end of file