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