You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

446 lines
17 KiB
C#

9 months ago
using POSV.Entity;
using POSV.Entity.Pormotion;
using POSV.Proxy.ThirdPartyPayMent;
using POSV.ShoppingCart;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace POSV.Member
{
public class RechargeSaomaUtils
{
/// <summary>
/// 微信支付是否合法
/// </summary>
/// <param name="payCode"></param>
/// <param name="payMode"></param>
/// <returns></returns>
public static Tuple<bool, string> VerifyWxPay(string payCode, PayMode payMode)
{
Tuple<bool, string> result = null;
if (string.IsNullOrEmpty(payCode) || payCode.Length != 18)
{
result = new Tuple<bool, string>(false, "微信付款码非法...");
return result;
}
var parameter = payMode.Body;
if (parameter == null || parameter.Count == 0)
{
result = new Tuple<bool, string>(false, "尚未配置微信支付参数...");
return result;
}
string appId = parameter.ContainsKey("appid") ? parameter["appid"].ToString() : "";
string mchId = parameter.ContainsKey("mchid") ? parameter["mchid"].ToString() : "";
string subMchId = parameter.ContainsKey("submchid") ? parameter["submchid"].ToString() : "";
string key = parameter.ContainsKey("appsecret") ? parameter["appsecret"].ToString() : "";
if (string.IsNullOrEmpty(appId) || string.IsNullOrEmpty(mchId) || string.IsNullOrEmpty(key))
{
result = new Tuple<bool, string>(false, "微信支付参数配置不完整...");
return result;
}
result = new Tuple<bool, string>(true, "微信参数校验成功");
return result;
}
/// <summary>
/// 支付宝支付是否合法
/// </summary>
/// <param name="payCode"></param>
/// <param name="payMode"></param>
/// <returns></returns>
public static Tuple<bool, string> VerifyAliPay(string payCode, PayMode payMode)
{
Tuple<bool, string> result = null;
if (string.IsNullOrEmpty(payCode) || (payCode.Length < 16 || payCode.Length > 24))
{
result = new Tuple<bool, string>(false, "支付宝付款码非法...");
return result;
}
var parameter = payMode.Body;
if (parameter == null || parameter.Count == 0)
{
result = new Tuple<bool, string>(false, "尚未配置支付宝参数...");
return result;
}
string appId = parameter.ContainsKey("appid") ? parameter["appid"].ToString() : "";
string privateKey = parameter.ContainsKey("privatekey") ? parameter["privatekey"].ToString() : "";
string appAuthToken = parameter.ContainsKey("appAuthToken") ? parameter["appAuthToken"].ToString() : "";
string storeNo = parameter.ContainsKey("storeNo") ? parameter["storeNo"].ToString() : "";
if (string.IsNullOrEmpty(appId) || string.IsNullOrEmpty(privateKey))
{
result = new Tuple<bool, string>(false, "支付宝支付参数配置不完整...");
return result;
}
result = new Tuple<bool, string>(true, "支付宝参数校验成功");
return result;
}
/// <summary>
/// 支付渠道
/// </summary>
/// <param name="payCode"></param>
/// <param name="payMode"></param>
/// <returns></returns>
public static Tuple<bool, string, PayChannelEnum> VerifyInputValue(string payCode, PayMode payMode)
{
Tuple<bool, string, PayChannelEnum> result = null;
PayChannelEnum _payChannel = PayChannelEnum.;
bool isVerify = false;
var parameter = payMode.Body;
if (parameter == null || parameter.Count == 0)
{
result = new Tuple<bool, string, PayChannelEnum>(isVerify, "尚未配置支付参数...", _payChannel);
return result;
}
else
{
//获取支付渠道
string channel = (parameter.ContainsKey("channel") ? parameter["channel"].ToString() : "").ToLower();
//没有配置支付渠道,默认原生支付,兼容处理
if (string.IsNullOrEmpty(channel))
{
result = new Tuple<bool, string, PayChannelEnum>(isVerify, "尚未配置支付参数...", _payChannel);
_payChannel = PayChannelEnum.;
}
else
{
switch (channel)
{
case "alipay":
case "wxpay":
case "subalipay":
case "subwxpay":
{
_payChannel = PayChannelEnum.;
}
break;
case "leshua":
{
_payChannel = PayChannelEnum.;
}
break;
case "saobei":
{
_payChannel = PayChannelEnum.;
}
break;
#region subin 2023-07-07 add
case "allinpay":
{
_payChannel = PayChannelEnum.;
}
break;
#endregion
}
}
switch (_payChannel)
{
case PayChannelEnum.:
{
switch (payMode.No)
{
case "04":
{
isVerify = VerifyAliPay(payCode, payMode).Item1;
}
break;
case "05":
{
isVerify = VerifyWxPay(payCode, payMode).Item1;
}
break;
default:
{
isVerify = false;
}
break;
}
}
break;
case PayChannelEnum.:
{
isVerify = VerifySAOBEIPay(payCode, payMode).Item1;
}
break;
case PayChannelEnum.:
{
isVerify = VerifyLeShuaPay(PayChannelEnum., payMode).Item1;
}
break;
#region subin 2023-07-07 add
case PayChannelEnum.:
{
isVerify = VerifyAllinPay(payCode, payMode).Item1;
}
break;
#endregion
}
}
result = new Tuple<bool, string, PayChannelEnum>(isVerify, "获取支付参数状态", _payChannel);
return result;
}
/// <summary>
/// 扫呗支付参数
/// </summary>
/// <param name="payCode"></param>
/// <param name="payMode"></param>
/// <returns></returns>
private static Tuple<bool, string> VerifySAOBEIPay(string payCode, PayMode payMode)
{
Tuple<bool, string> result = null;
if (string.IsNullOrEmpty(payCode))
{
result = new Tuple<bool, string>(false, "付款码非法...");
return result;
}
var parameter = payMode.Body;
string merchant_no = parameter.ContainsKey("merchant_no") ? parameter["merchant_no"].ToString() : "";
string terminal_id = parameter.ContainsKey("terminal_id") ? parameter["terminal_id"].ToString() : "";
string signKey = parameter.ContainsKey("signKey") ? parameter["signKey"].ToString() : "";
string gatewayUrl = parameter.ContainsKey("gatewayUrl") ? parameter["gatewayUrl"].ToString() : "";
if (string.IsNullOrEmpty(merchant_no) || string.IsNullOrEmpty(terminal_id) || string.IsNullOrEmpty(signKey) || string.IsNullOrEmpty(gatewayUrl))
{
result = new Tuple<bool, string>(false, "扫呗支付参数配置不完整...");
return result;
}
result = new Tuple<bool, string>(true, "扫呗支付参数校验成功");
return result;
}
private static Tuple<bool, string> VerifyLeShuaPay(PayChannelEnum payChannel, PayMode payMode)
{
return PayMentOperation.VerifyPay(payChannel, payMode);
}
/// <summary>
/// 根据扫描码适配支付方式
///
/// 支付宝授权码25~30开头的长度为16~24位的数字
///
/// 微信授权码 18位纯数字以10、11、12、13、14、15开头
///
/// </summary>
/// <param name="payCode"></param>
/// <returns></returns>
public static Tuple<bool, string, PayMode> GetPayMode(string payCode)
{
Tuple<bool, string, PayMode> resultPayMode = null;
PayMode result = null;
//第一步先取总部设置
if (!string.IsNullOrEmpty(payCode) && payCode.Length >= 16)
{
string prefix = payCode.Substring(0, 2);
switch (prefix)
{
case "10":
case "11":
case "12":
case "13":
case "14":
case "15":
{
List<string> signs = new List<string>();
signs.Add("wxpay");
signs.Add("subwxpay");
//微信
RechargeParameter parameter = OrderUtils.GetRechargeParameter(signs);
if (parameter != null && parameter.Body != null)
{
result = new PayMode();
result.No = "05";
result.Name = "微信支付";
result.Body = parameter.Body;
//result.Body = null;
}
}
break;
case "25":
case "26":
case "27":
case "28":
case "29":
case "30":
{
List<string> signs = new List<string>();
signs.Add("alipay");
signs.Add("subalipay");
//支付宝
RechargeParameter parameter = OrderUtils.GetRechargeParameter(signs);
if (parameter != null && parameter.Body != null)
{
result = new PayMode();
result.No = "04";
result.Name = "支付宝";
result.Body = parameter.Body;
//result.Body = null;
}
}
break;
}
}
if (result != null)
{
resultPayMode = new Tuple<bool, string, PayMode>(true, "获取支付参数状态", result);
return resultPayMode;
}
//zhangy 2020-04-23 不理解
//如果总部参数不存在,第二步取门店设置
if (!string.IsNullOrEmpty(payCode) && payCode.Length >= 16)
{
string prefix = payCode.Substring(0, 2);
switch (prefix)
{
case "10":
case "11":
case "12":
case "13":
case "14":
case "15":
{
//微信
result = OrderUtils.GetPayMode("05");
}
break;
case "25":
case "26":
case "27":
case "28":
case "29":
case "30":
{
//支付宝
result = OrderUtils.GetPayMode("04");
}
break;
case "62":
{
//云闪付
result = OrderUtils.GetPayMode("07");
}
break;
}
}
resultPayMode = new Tuple<bool, string, PayMode>(true, "获取支付参数状态", result);
return resultPayMode;
}
/// <summary>
/// 根据扫描码适配支付方式
///
/// 支付宝授权码25~30开头的长度为16~24位的数字
///
/// 微信授权码 18位纯数字以10、11、12、13、14、15开头
///
/// </summary>
/// <param name="payCode"></param>
/// <returns></returns>
public static Tuple<bool, string, PayMode> GetPayModeOrder(string payCode)
{
Tuple<bool, string, PayMode> resultPayMode = null;
PayMode result = null;
if (!string.IsNullOrEmpty(payCode) && payCode.Length >= 16)
{
string prefix = payCode.Substring(0, 2);
switch (prefix)
{
case "10":
case "11":
case "12":
case "13":
case "14":
case "15":
{
//微信
result = OrderUtils.GetPayMode("05");
}
break;
case "25":
case "26":
case "27":
case "28":
case "29":
case "30":
{
//支付宝
result = OrderUtils.GetPayMode("04");
}
break;
case "62":
{
//云闪付
result = OrderUtils.GetPayMode("07");
}
break;
#region subin
case "50":
{
result = OrderUtils.GetPayMode("50");
}
break;
#endregion
}
}
resultPayMode = new Tuple<bool, string, PayMode>(true, "获取支付参数状态", result);
return resultPayMode;
}
#region subin 2023-06-20 通联支付
private static Tuple<bool, string> VerifyAllinPay(string payCode, PayMode payMode)
{
Tuple<bool, string> result = null;
if (string.IsNullOrEmpty(payCode))
{
result = new Tuple<bool, string>(false, "付款码非法...");
return result;
}
var parameter = payMode.Body;
//通联支付参数
string appId = parameter.ContainsKey("appId") ? parameter["appId"].ToString() : "";
string appKey = parameter.ContainsKey("appKey") ? parameter["appKey"].ToString() : "";
string url = parameter.ContainsKey("gatewayUrl") ? parameter["gatewayUrl"].ToString() : "";
string payuserid = parameter.ContainsKey("payuserid") ? parameter["payuserid"].ToString() : "";
if (string.IsNullOrEmpty(appId) || string.IsNullOrEmpty(appKey) || string.IsNullOrEmpty(url))
{
result = new Tuple<bool, string>(false, "通联支付参数配置不完整...");
return result;
}
if (string.IsNullOrEmpty(payuserid))
{
result = new Tuple<bool, string>(false, "通联支付参数未配置门店付款会员号...");
return result;
}
result = new Tuple<bool, string>(true, "通联支付参数校验成功");
return result;
}
#endregion
}
}