930 lines
48 KiB
C#
930 lines
48 KiB
C#
using Newtonsoft.Json;
|
||
using System;
|
||
|
||
namespace libESPay
|
||
{
|
||
public class ESPayService
|
||
{
|
||
#region 客无忧直连交易
|
||
|
||
#region 方法 -> 客无忧条码支付
|
||
/// <summary>
|
||
/// 客无忧条码支付
|
||
/// </summary>
|
||
/// <param name="merchantCode">客无忧商户号</param>
|
||
/// <param name="merchantKey">客无忧商户密钥 预留</param>
|
||
/// <param name="authCode">用户支付授权码</param>
|
||
/// <param name="orderCode">系统交易订单号</param>
|
||
/// <param name="oderAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string KwyPayScan(string merchantCode, string merchantKey,
|
||
string authCode, string orderCode, string oderAmount)
|
||
{
|
||
//初始化交易配置
|
||
KwyPay.KwyPayConfig _PayConfig = new KwyPay.KwyPayConfig(
|
||
PayUtils.MobilePayConfig.KWYPay.ApiOpenID, PayUtils.MobilePayConfig.KWYPay.ApiKey,
|
||
PayUtils.MobilePayConfig.KWYPay.ApiOrganization, PayUtils.MobilePayConfig.KWYPay.ApiURL);
|
||
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
|
||
try
|
||
{
|
||
//发起交易请求并返回结果
|
||
return KwyPayServiceResult(orderCode, KwyPay.KwyPayAPI.MicroPay(
|
||
_PayConfig, _PayMerchant, authCode, orderCode, oderAmount));
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return JsonConvert.SerializeObject(new PayModel.PayResultModel
|
||
{
|
||
result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString(),
|
||
trade_no = "",
|
||
trade_num = orderCode,
|
||
result_desc = $"系统异常:{ex.Message}"
|
||
});
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 客无忧支付查询
|
||
/// <summary>
|
||
/// 客无忧支付查询
|
||
/// </summary>
|
||
/// <param name="merchantCode">客无忧商户号</param>
|
||
/// <param name="merchantKey">客无忧商户密钥 预留</param>
|
||
/// <param name="merchantOrderCode">系统交易订单号
|
||
/// 注:与平台订单号必填一项</param>
|
||
/// <param name="platformOrderCode">平台订单号
|
||
/// 注:与系统交易订单号必填一项</param>
|
||
/// <param name="payAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string KwyPayQuery(string merchantCode, string merchantKey,
|
||
string merchantOrderCode, string platformOrderCode, string payAmount)
|
||
{
|
||
//初始化交易配置
|
||
KwyPay.KwyPayConfig _PayConfig = new KwyPay.KwyPayConfig(
|
||
PayUtils.MobilePayConfig.KWYPay.ApiOpenID, PayUtils.MobilePayConfig.KWYPay.ApiKey,
|
||
PayUtils.MobilePayConfig.KWYPay.ApiOrganization, PayUtils.MobilePayConfig.KWYPay.ApiURL);
|
||
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
try
|
||
{
|
||
//发起交易查询并返回结果
|
||
return KwyPayServiceResult(merchantOrderCode, KwyPay.KwyPayAPI.OrderQuery(
|
||
_PayConfig, _PayMerchant, merchantOrderCode, platformOrderCode, payAmount));
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return JsonConvert.SerializeObject(new PayModel.PayResultModel
|
||
{
|
||
result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString(),
|
||
trade_no = "",
|
||
trade_num = merchantOrderCode,
|
||
result_desc = $"系统异常:{ex.Message}"
|
||
});
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 客无忧支付退款
|
||
/// <summary>
|
||
/// 客无忧支付退款
|
||
/// </summary>
|
||
/// <param name="merchantCode">客无忧商户号</param>
|
||
/// <param name="merchantKey">客无忧商户密钥 预留</param>
|
||
/// <param name="refundOrderCode">系统退款订单号</param>
|
||
/// <param name="platformOrderCode">平台订单号(原流水号)</param>
|
||
/// <param name="payAmount">退款金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string KwyPayRefund(string merchantCode, string merchantKey,
|
||
string refundOrderCode, string platformOrderCode, string payAmount)
|
||
{
|
||
//初始化交易配置
|
||
KwyPay.KwyPayConfig _PayConfig = new KwyPay.KwyPayConfig(
|
||
PayUtils.MobilePayConfig.KWYPay.ApiOpenID, PayUtils.MobilePayConfig.KWYPay.ApiKey,
|
||
PayUtils.MobilePayConfig.KWYPay.ApiOrganization, PayUtils.MobilePayConfig.KWYPay.ApiURL);
|
||
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
try
|
||
{
|
||
//发起交易退款并返回结果
|
||
KwyPay.Model.QueryResultModel queryResultModel = KwyPay.KwyPayAPI.RefundPrice(
|
||
_PayConfig, _PayMerchant, platformOrderCode, "", refundOrderCode, payAmount);
|
||
if (queryResultModel == null)
|
||
{
|
||
//参数缺失返回
|
||
return JsonConvert.SerializeObject(new PayModel.PayResultModel
|
||
{
|
||
result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString(),
|
||
trade_no = "",
|
||
trade_num = refundOrderCode,
|
||
result_desc = "交易请求参数缺失"
|
||
});
|
||
}
|
||
if (queryResultModel.errcode == "0")
|
||
{
|
||
//退款成功返回
|
||
return JsonConvert.SerializeObject(new PayModel.PayResultModel
|
||
{
|
||
result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString(),
|
||
trade_no = "",
|
||
trade_num = refundOrderCode,
|
||
result_desc = "SUCCESS"
|
||
});
|
||
}
|
||
else
|
||
{
|
||
//退款失败返回
|
||
return JsonConvert.SerializeObject(new PayModel.PayResultModel
|
||
{
|
||
result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString(),
|
||
trade_no = "",
|
||
trade_num = refundOrderCode,
|
||
result_desc = queryResultModel.errmsg
|
||
});
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
return JsonConvert.SerializeObject(new PayModel.PayResultModel
|
||
{
|
||
result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString(),
|
||
trade_no = "",
|
||
trade_num = refundOrderCode,
|
||
result_desc = $"系统异常:{ex.Message}"
|
||
});
|
||
}
|
||
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 判断交易结果,返回JSON串
|
||
/// <summary>
|
||
/// 判断交易结果,返回JSON串
|
||
/// </summary>
|
||
/// <param name="orderCode">交易订单号</param>
|
||
/// <param name="queryResultModel">平台返回结果</param>
|
||
/// <returns></returns>
|
||
private static string KwyPayServiceResult(string orderCode, KwyPay.Model.QueryResultModel queryResultModel)
|
||
{
|
||
PayModel.PayResultModel payResult = new PayModel.PayResultModel();
|
||
if (queryResultModel == null)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = "交易请求参数缺失";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
if (queryResultModel.errcode == "0")
|
||
{
|
||
switch (queryResultModel.order_info.pay_status)
|
||
{
|
||
case "已支付":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = queryResultModel.order_info.transaction_id;
|
||
payResult.trade_num = queryResultModel.order_info.out_no;
|
||
payResult.result_desc = "SUCCESS";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "支付中":
|
||
case "用户支付中":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.订单待支付).ToString();
|
||
payResult.trade_no = queryResultModel.order_info.transaction_id;
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = "USERPAYING";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "已退款":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = queryResultModel.order_info.transaction_id;
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = queryResultModel.order_info.pay_status;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
default:
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = queryResultModel.order_info.transaction_id;
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = queryResultModel.order_info.pay_status;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = queryResultModel.errmsg;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#endregion
|
||
|
||
#region 银联(众码)直连交易
|
||
|
||
#region 方法 -> 银联条码支付
|
||
/// <summary>
|
||
/// 银联条码支付
|
||
/// </summary>
|
||
/// <param name="merchantCode">银联平台商户号</param>
|
||
/// <param name="merchantKey">银联平台商户密钥</param>
|
||
/// <param name="authCode">用户支付授权码</param>
|
||
/// <param name="orderCode">系统交易订单号</param>
|
||
/// <param name="oderAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string UnionPayScan(string merchantCode, string merchantKey,
|
||
string authCode, string orderCode, string oderAmount)
|
||
{
|
||
//初始化交易配置
|
||
UnionPay.UnionPayConfig _PayConfig = new UnionPay.UnionPayConfig(
|
||
PayUtils.MobilePayConfig.UnionPay.ApiAPPID, PayUtils.MobilePayConfig.UnionPay.ApiKey,
|
||
PayUtils.MobilePayConfig.UnionPay.ApiOrganization, PayUtils.MobilePayConfig.UnionPay.ApiURL);
|
||
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
PayModel.PayResultModel payResult = new PayModel.PayResultModel();
|
||
try
|
||
{
|
||
DateTime _PayTime = DateTime.Now;
|
||
//创建交易并返回结果
|
||
UnionPay.Model.ScanResultModel _ScanResult = UnionPay.UnionPayAPI.MerchantScanPay(
|
||
_PayConfig, _PayMerchant, authCode, "127.0.0.1", orderCode, "服务区商品", oderAmount,
|
||
_PayTime.ToString("yyyyMMddHHmmss"), _PayTime.AddMinutes(5).ToString("yyyyMMddHHmmss"));
|
||
if (_ScanResult == null)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = "交易请求参数缺失";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
if (_ScanResult.status == "0")
|
||
{
|
||
if (_ScanResult.result_code == "0")
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = _ScanResult.transaction_id;
|
||
payResult.trade_num = _ScanResult.out_trade_no;
|
||
payResult.result_desc = "SUCCESS";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.订单待支付).ToString();
|
||
payResult.trade_no = _ScanResult.transaction_id;
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = _ScanResult.err_msg;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = _ScanResult.err_msg;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = $"系统异常:{ex.Message}";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 银联支付查询
|
||
/// <summary>
|
||
/// 银联支付查询
|
||
/// </summary>
|
||
/// <param name="merchantCode">银联平台商户号</param>
|
||
/// <param name="merchantKey">银联平台商户密钥</param>
|
||
/// <param name="merchantOrderCode">系统交易订单号
|
||
/// 注:与平台订单号必填一项</param>
|
||
/// <param name="platformOrderCode">平台订单号
|
||
/// 注:与系统交易订单号必填一项</param>
|
||
/// <param name="payAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string UnionPayQuery(string merchantCode, string merchantKey,
|
||
string merchantOrderCode, string platformOrderCode, string payAmount)
|
||
{
|
||
//初始化交易配置
|
||
UnionPay.UnionPayConfig _PayConfig = new UnionPay.UnionPayConfig(
|
||
PayUtils.MobilePayConfig.UnionPay.ApiAPPID, PayUtils.MobilePayConfig.UnionPay.ApiKey,
|
||
PayUtils.MobilePayConfig.UnionPay.ApiOrganization, PayUtils.MobilePayConfig.UnionPay.ApiURL);
|
||
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
PayModel.PayResultModel payResult = new PayModel.PayResultModel();
|
||
try
|
||
{
|
||
UnionPay.Model.QueryResultModel _QueryResult = UnionPay.UnionPayAPI.QueryPay(
|
||
_PayConfig, _PayMerchant, merchantOrderCode, platformOrderCode, payAmount);
|
||
if (_QueryResult == null)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = merchantOrderCode;
|
||
payResult.result_desc = "交易请求参数缺失";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
|
||
if (_QueryResult.status != "0")
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = merchantOrderCode;
|
||
payResult.result_desc = _QueryResult.message;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
|
||
if (_QueryResult.result_code != "0")
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = merchantOrderCode;
|
||
payResult.result_desc = _QueryResult.err_msg;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
|
||
switch (_QueryResult.trade_state.ToUpper())
|
||
{
|
||
case "SUCCESS":
|
||
case "REFUND":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = _QueryResult.transaction_id;
|
||
payResult.trade_num = _QueryResult.out_trade_no;
|
||
payResult.result_desc = "SUCCESS";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "USERPAYING":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.订单待支付).ToString();
|
||
payResult.trade_no = _QueryResult.transaction_id;
|
||
payResult.trade_num = _QueryResult.out_trade_no;
|
||
payResult.result_desc = _QueryResult.trade_state_desc;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "NOTPAY":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.未支付).ToString();
|
||
payResult.trade_no = _QueryResult.transaction_id;
|
||
payResult.trade_num = _QueryResult.out_trade_no;
|
||
payResult.result_desc = _QueryResult.trade_state_desc;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "CLOSED":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.已关闭).ToString();
|
||
payResult.trade_no = _QueryResult.transaction_id;
|
||
payResult.trade_num = _QueryResult.out_trade_no;
|
||
payResult.result_desc = _QueryResult.trade_state_desc;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "REVOKED":
|
||
case "REVERSE":
|
||
case "REVOKED/REVERSE":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.已撤销).ToString();
|
||
payResult.trade_no = _QueryResult.transaction_id;
|
||
payResult.trade_num = _QueryResult.out_trade_no;
|
||
payResult.result_desc = _QueryResult.trade_state_desc;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "PAYERROR":
|
||
default:
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = _QueryResult.transaction_id;
|
||
payResult.trade_num = _QueryResult.out_trade_no;
|
||
payResult.result_desc = _QueryResult.trade_state_desc;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = merchantOrderCode;
|
||
payResult.result_desc = $"系统异常:{ex.Message}";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 银联支付退款
|
||
/// <summary>
|
||
/// 银联支付退款
|
||
/// </summary>
|
||
/// <param name="merchantCode">银联平台商户号</param>
|
||
/// <param name="merchantKey">银联平台商户密钥</param>
|
||
/// <param name="refundOrderCode">系统退款订单号</param>
|
||
/// <param name="platformOrderCode">平台订单号(原流水号)</param>
|
||
/// <param name="payAmount">退款金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string UnionPayRefund(string merchantCode, string merchantKey,
|
||
string refundOrderCode, string platformOrderCode, string payAmount)
|
||
{
|
||
//初始化交易配置
|
||
UnionPay.UnionPayConfig _PayConfig = new UnionPay.UnionPayConfig(
|
||
PayUtils.MobilePayConfig.UnionPay.ApiAPPID, PayUtils.MobilePayConfig.UnionPay.ApiKey,
|
||
PayUtils.MobilePayConfig.UnionPay.ApiOrganization, PayUtils.MobilePayConfig.UnionPay.ApiURL);
|
||
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
PayModel.PayResultModel payResult = new PayModel.PayResultModel();
|
||
try
|
||
{
|
||
UnionPay.Model.RefundResultModel _RefundResult = UnionPay.UnionPayAPI.RefundPay(
|
||
_PayConfig, _PayMerchant, platformOrderCode, "", refundOrderCode, payAmount);
|
||
if (_RefundResult == null)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = "交易请求参数缺失";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
if (_RefundResult.status != "0")
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = _RefundResult.message;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
if (_RefundResult.result_code == "0")
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = _RefundResult.refund_id;
|
||
payResult.trade_num = _RefundResult.out_refund_no;
|
||
payResult.result_desc = "SUCCESS";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = _RefundResult.refund_id;
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = _RefundResult.err_code;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = $"系统异常:{ex.Message}";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 银联支付退款查询
|
||
/// <summary>
|
||
/// 银联支付退款查询
|
||
/// </summary>
|
||
/// <param name="merchantCode">银联平台商户号</param>
|
||
/// <param name="merchantKey">银联平台商户密钥</param>
|
||
/// <param name="platformOrderCode">平台订单号</param>
|
||
/// <param name="merchantOrderCode">商户订单号</param>
|
||
/// <param name="platformRefundCode">平台退款单号</param>
|
||
/// <param name="refundOrderCode">商户退款单号</param>
|
||
/// <param name="payAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string UnionPayRefundQuery(string merchantCode, string merchantKey,
|
||
string platformOrderCode, string merchantOrderCode, string platformRefundCode,
|
||
string refundOrderCode, string payAmount)
|
||
{
|
||
//初始化交易配置
|
||
UnionPay.UnionPayConfig _PayConfig = new UnionPay.UnionPayConfig(
|
||
PayUtils.MobilePayConfig.UnionPay.ApiAPPID, PayUtils.MobilePayConfig.UnionPay.ApiKey,
|
||
PayUtils.MobilePayConfig.UnionPay.ApiOrganization, PayUtils.MobilePayConfig.UnionPay.ApiURL);
|
||
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
PayModel.PayResultModel payResult = new PayModel.PayResultModel();
|
||
|
||
try
|
||
{
|
||
UnionPay.Model.RefundQueryResultModel _RefundQueryResult = UnionPay.UnionPayAPI.RefundQuery(
|
||
_PayConfig, _PayMerchant, platformOrderCode, merchantOrderCode, platformRefundCode, refundOrderCode);
|
||
if (_RefundQueryResult == null)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = "交易请求参数缺失";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
if (_RefundQueryResult.status != "0")
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = _RefundQueryResult.message;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
if (_RefundQueryResult.result_code != "0")
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = _RefundQueryResult.refund_id_0;
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = _RefundQueryResult.err_code;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
switch (_RefundQueryResult.refund_status_0)
|
||
{
|
||
case "SUCCESS":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = _RefundQueryResult.refund_id_0;
|
||
payResult.trade_num = _RefundQueryResult.out_refund_no_0;
|
||
payResult.result_desc = "SUCCESS";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "PROCESSING":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.订单待支付).ToString();
|
||
payResult.trade_no = _RefundQueryResult.refund_id_0;
|
||
payResult.trade_num = _RefundQueryResult.out_refund_no_0;
|
||
payResult.result_desc = _RefundQueryResult.refund_status_0;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "CHANGE":
|
||
case "FAIL":
|
||
case "NOTSURE":
|
||
default:
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = _RefundQueryResult.refund_id_0;
|
||
payResult.trade_num = _RefundQueryResult.out_refund_no_0;
|
||
payResult.result_desc = _RefundQueryResult.refund_status_0;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = $"系统异常:{ex.Message}";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#endregion
|
||
|
||
#region 联动优势(南京银行)直连交易
|
||
#region 方法 -> 联动优势(南京银行)条码支付
|
||
/// <summary>
|
||
/// 联动优势(南京银行)条码支付
|
||
/// </summary>
|
||
/// <param name="merchantCode">客无忧商户号</param>
|
||
/// <param name="merchantKey">客无忧商户密钥 预留</param>
|
||
/// <param name="authCode">用户支付授权码</param>
|
||
/// <param name="orderCode">系统交易订单号</param>
|
||
/// <param name="oderAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string IRichPayScan(string merchantCode, string merchantKey,
|
||
string authCode, string orderCode, string oderAmount)
|
||
{
|
||
IRichPay.IRichPayConfig _PayConfig = new IRichPay.IRichPayConfig(
|
||
PayUtils.MobilePayConfig.IRichPay.ApiAPPID, PayUtils.MobilePayConfig.IRichPay.ApiKey,
|
||
PayUtils.MobilePayConfig.IRichPay.ApiOrganization, PayUtils.MobilePayConfig.IRichPay.ApiURL);
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
PayModel.PayResultModel payResult = new PayModel.PayResultModel();
|
||
try
|
||
{
|
||
//创建交易并返回结果
|
||
IRichPay.Model.IRichPayResultModel _IRichPayResult = IRichPay.IRichPayAPI.BeScanPay(
|
||
_PayConfig, _PayMerchant, authCode, orderCode, oderAmount);
|
||
if (_IRichPayResult != null)
|
||
{
|
||
switch (_IRichPayResult.status)
|
||
{
|
||
case "00":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = _IRichPayResult.data.orderid;
|
||
payResult.trade_num = _IRichPayResult.data.orderid;
|
||
payResult.result_desc = "SUCCESS";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "500":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.订单待支付).ToString();
|
||
payResult.trade_no = _IRichPayResult.data.orderid;
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = _IRichPayResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "01":
|
||
default:
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = _IRichPayResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = "该门店未配置商户号信息";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = orderCode;
|
||
payResult.result_desc = ex.Message;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 联动优势(南京银行)支付查询
|
||
/// <summary>
|
||
/// 联动优势(南京银行)支付查询
|
||
/// </summary>
|
||
/// <param name="merchantCode">联动优势(南京银行)商户号</param>
|
||
/// <param name="merchantKey">联动优势(南京银行)商户密钥 预留</param>
|
||
/// <param name="merchantOrderCode">系统交易订单号
|
||
/// 注:与平台订单号必填一项</param>
|
||
/// <param name="platformOrderCode">平台订单号
|
||
/// 注:与系统交易订单号必填一项</param>
|
||
/// <param name="payAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string IRichPayQuery(string merchantCode, string merchantKey,
|
||
string merchantOrderCode, string platformOrderCode, string payAmount)
|
||
{
|
||
IRichPay.IRichPayConfig _PayConfig = new IRichPay.IRichPayConfig(
|
||
PayUtils.MobilePayConfig.IRichPay.ApiAPPID, PayUtils.MobilePayConfig.IRichPay.ApiKey,
|
||
PayUtils.MobilePayConfig.IRichPay.ApiOrganization, PayUtils.MobilePayConfig.IRichPay.ApiURL);
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
PayModel.PayResultModel payResult = new PayModel.PayResultModel();
|
||
try
|
||
{
|
||
IRichPay.Model.IRichPayResultModel _QueryResult = IRichPay.IRichPayAPI.QueryPay(
|
||
_PayConfig, _PayMerchant, merchantOrderCode, platformOrderCode, payAmount);
|
||
if (_QueryResult != null)
|
||
{
|
||
if (_QueryResult.status == "00")
|
||
{
|
||
switch (_QueryResult.data.orderstatus)
|
||
{
|
||
case "2":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = _QueryResult.data.orderid;
|
||
payResult.trade_num = _QueryResult.data.orderid;
|
||
payResult.result_desc = "SUCCESS";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "1":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.订单待支付).ToString();
|
||
payResult.trade_no = _QueryResult.data.orderid;
|
||
payResult.trade_num = _QueryResult.data.orderid;
|
||
payResult.result_desc = _QueryResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "5":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.已关闭).ToString();
|
||
payResult.trade_no = _QueryResult.data.orderid;
|
||
payResult.trade_num = _QueryResult.data.orderid;
|
||
payResult.result_desc = _QueryResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "4":
|
||
case "7":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.已撤销).ToString();
|
||
payResult.trade_no = _QueryResult.data.orderid;
|
||
payResult.trade_num = _QueryResult.data.orderid;
|
||
payResult.result_desc = _QueryResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "3":
|
||
default:
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = _QueryResult.data.orderid;
|
||
payResult.trade_num = _QueryResult.data.orderid;
|
||
payResult.result_desc = _QueryResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.result_desc = _QueryResult.msg;
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = merchantOrderCode;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.result_desc = "该门店未配置商户号信息";
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = merchantOrderCode;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString();
|
||
payResult.result_desc = ex.Message;
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = merchantOrderCode;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 联动优势(南京银行)支付退款
|
||
/// <summary>
|
||
/// 联动优势(南京银行)支付退款
|
||
/// </summary>
|
||
/// <param name="merchantCode">联动优势(南京银行)平台商户号</param>
|
||
/// <param name="merchantKey">联动优势(南京银行)平台商户密钥</param>
|
||
/// <param name="refundOrderCode">系统退款订单号</param>
|
||
/// <param name="platformOrderCode">平台订单号(原流水号)</param>
|
||
/// <param name="payAmount">退款金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string IRichPayRefund(string merchantCode, string merchantKey,
|
||
string refundOrderCode, string platformOrderCode, string payAmount)
|
||
{
|
||
IRichPay.IRichPayConfig _PayConfig = new IRichPay.IRichPayConfig(
|
||
PayUtils.MobilePayConfig.IRichPay.ApiAPPID, PayUtils.MobilePayConfig.IRichPay.ApiKey,
|
||
PayUtils.MobilePayConfig.IRichPay.ApiOrganization, PayUtils.MobilePayConfig.IRichPay.ApiURL);
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
PayModel.PayResultModel payResult = new PayModel.PayResultModel();
|
||
try
|
||
{
|
||
IRichPay.Model.IRichPayResultModel _RefundResult = IRichPay.IRichPayAPI.PayRefund(
|
||
_PayConfig, _PayMerchant, platformOrderCode, platformOrderCode, refundOrderCode, payAmount);
|
||
if (_RefundResult != null)
|
||
{
|
||
switch (_RefundResult.status)
|
||
{
|
||
case "00":
|
||
case "02":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = _RefundResult.data.refundorderid;
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = "SUCCESS";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
//case "02":
|
||
//_PayQueryResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.转入退款).ToString();
|
||
//_PayQueryResult.trade_no = "";
|
||
//_PayQueryResult.trade_num = refund_order_no;
|
||
//_PayQueryResult.result_desc = _RefundResult.msg;
|
||
//return JsonConvert.SerializeObject(payResult);
|
||
case "01":
|
||
default:
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = _RefundResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.result_desc = "该门店未配置商户号信息";
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString();
|
||
payResult.result_desc = ex.Message;
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
#endregion
|
||
|
||
#region 方法 -> 联动优势(南京银行)支付退款查询
|
||
/// <summary>
|
||
/// 联动优势(南京银行)支付退款查询
|
||
/// </summary>
|
||
/// <param name="merchantCode">联动优势(南京银行)平台商户号</param>
|
||
/// <param name="merchantKey">联动优势(南京银行)平台商户密钥</param>
|
||
/// <param name="platformOrderCode">平台订单号</param>
|
||
/// <param name="merchantOrderCode">商户订单号</param>
|
||
/// <param name="platformRefundCode">平台退款单号</param>
|
||
/// <param name="refundOrderCode">商户退款单号</param>
|
||
/// <param name="payAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
public static string IRichPayRefundQuery(string merchantCode, string merchantKey,
|
||
string platformOrderCode, string merchantOrderCode, string platformRefundCode,
|
||
string refundOrderCode, string payAmount)
|
||
{
|
||
IRichPay.IRichPayConfig _PayConfig = new IRichPay.IRichPayConfig(
|
||
PayUtils.MobilePayConfig.IRichPay.ApiAPPID, PayUtils.MobilePayConfig.IRichPay.ApiKey,
|
||
PayUtils.MobilePayConfig.IRichPay.ApiOrganization, PayUtils.MobilePayConfig.IRichPay.ApiURL);
|
||
PayUtils.MobilePayConfig.PayMerchant _PayMerchant = new PayUtils.MobilePayConfig.PayMerchant
|
||
{
|
||
MerchantCode = merchantCode,
|
||
MerchantKey = merchantKey
|
||
};
|
||
PayModel.PayResultModel payResult = new PayModel.PayResultModel();
|
||
try
|
||
{
|
||
IRichPay.Model.IRichPayResultModel _RefundQueryResult = IRichPay.IRichPayAPI.PayQueryRefund(
|
||
_PayConfig, _PayMerchant, merchantOrderCode, platformOrderCode, payAmount);
|
||
if (_RefundQueryResult != null)
|
||
{
|
||
if (_RefundQueryResult.status == "00")
|
||
{
|
||
switch (_RefundQueryResult.data.orderstatus)
|
||
{
|
||
case "1":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.订单待支付).ToString();
|
||
payResult.trade_no = _RefundQueryResult.data.refundorderid;
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = _RefundQueryResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "5":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.已关闭).ToString();
|
||
payResult.trade_no = _RefundQueryResult.data.refundorderid;
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = _RefundQueryResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "4":
|
||
case "7":
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付成功).ToString();
|
||
payResult.trade_no = _RefundQueryResult.data.refundorderid;
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = "SUCCESS";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
case "2":
|
||
case "3":
|
||
default:
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.支付失败).ToString();
|
||
payResult.trade_no = _RefundQueryResult.data.refundorderid;
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = _RefundQueryResult.data.tips;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = _RefundQueryResult.msg;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.请求参数错误).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = "该门店未配置商户号信息";
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
payResult.result_code = ((int)PayUtils.MobilePayConfig.ResultCode.系统异常).ToString();
|
||
payResult.trade_no = "";
|
||
payResult.trade_num = refundOrderCode;
|
||
payResult.result_desc = ex.Message;
|
||
return JsonConvert.SerializeObject(payResult);
|
||
}
|
||
}
|
||
#endregion
|
||
#endregion
|
||
}
|
||
}
|