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#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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
}
}