226 lines
11 KiB
C#
226 lines
11 KiB
C#
using Newtonsoft.Json;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Security.Cryptography;
|
||
using System.Text;
|
||
using WebService.SDK.PayCommon;
|
||
|
||
namespace WebService.SDK.Uphicoo
|
||
{
|
||
public class UphicooAPI
|
||
{
|
||
#region 嗨客付款码支付接口
|
||
/// <summary>
|
||
/// 嗨客付款码支付接口
|
||
/// </summary>
|
||
/// <param name="payConfig">接口配置</param>
|
||
/// <param name="merchantInfo">平台商户信息</param>
|
||
/// <param name="authCode">用户付款授权码</param>
|
||
/// <param name="merchantOrderCode">商户交易订单号</param>
|
||
/// <param name="payAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
|
||
public static Model.UphicoobarcodeModel UphicooBarcode(UphicooConfig payConfig,
|
||
MobilePayConfig.PayMerchant merchantInfo, string authCode,
|
||
string merchantOrderCode, string payAmount)
|
||
{
|
||
//验证交易接口配置
|
||
if (payConfig == null)
|
||
{
|
||
return default(Model.UphicoobarcodeModel);
|
||
}
|
||
//验证交易金额
|
||
if (!decimal.TryParse(payAmount, out decimal _PayAmount) || _PayAmount <= 0)
|
||
{
|
||
return default(Model.UphicoobarcodeModel);
|
||
}
|
||
//生成交易报文体参数
|
||
Dictionary<string, string> _ApiDictionary = new Dictionary<string, string>
|
||
{
|
||
{ "appid", payConfig.PlatformAPPID },//应用的APPID
|
||
{ "timestamp" ,CommonHelper.ConvertDataTimeLong(DateTime.Now).ToString()},//时间戳
|
||
{ "merchant_num", merchantInfo.MerchantCode}, //商户编号
|
||
{ "store_num",merchantInfo.MerchantShopCode}, //门店编号
|
||
{ "staff_num", merchantInfo.MerchantUserCode}, //员工编号
|
||
{ "merchant_order_no" ,merchantOrderCode}, //商户订单号
|
||
{ "auth_code" ,authCode}, //付款码
|
||
{ "amount" ,payAmount} //交易金额
|
||
};
|
||
//发送给第三方的交易参数日志
|
||
_ApiDictionary.Add("sign", ApiParamSign(_ApiDictionary, payConfig.PlatformKey));
|
||
LogHelper.WriteReceiveLog("支付反扫-传第三方参数:" +
|
||
_ApiDictionary.Select(pair => pair.Key + "=" + pair.Value).
|
||
DefaultIfEmpty("").Aggregate((a, b) => a + "&" + b));
|
||
//调用接口请求交易并返回结果(json方式)
|
||
return JsonConvert.DeserializeObject<Model.UphicoobarcodeModel>(CommonHelper.HttpUrlPost(
|
||
JsonConvert.SerializeObject(_ApiDictionary), payConfig.BarcodeUphicooURL,
|
||
"application/json", payConfig.PlatformTimeout));
|
||
}
|
||
#endregion
|
||
|
||
#region 嗨客平台订单查询
|
||
/// <summary>
|
||
/// 嗨客平台订单查询
|
||
/// </summary>
|
||
/// <param name="payConfig">接口配置</param>
|
||
/// <param name="merchantInfo">平台商户信息</param>
|
||
/// <param name="merchantOrderCode">商户交易订单号</param>
|
||
/// <param name="payAmount">交易金额(元)</param>
|
||
/// <returns></returns>
|
||
public static Model.UphicooqueryModel UphicooQuery(UphicooConfig payConfig,
|
||
MobilePayConfig.PayMerchant merchantInfo,
|
||
string merchantOrderCode, string platformOrderCode, string payAmount)
|
||
{
|
||
//验证交易接口配置
|
||
if (payConfig == null)
|
||
{
|
||
return default(Model.UphicooqueryModel);
|
||
}
|
||
//验证交易参数
|
||
if (merchantInfo == null || string.IsNullOrWhiteSpace(merchantInfo.MerchantCode))
|
||
{
|
||
return default(Model.UphicooqueryModel);
|
||
}
|
||
//生成交易报文体参数
|
||
Dictionary<string, string> _ApiDictionary = new Dictionary<string, string>
|
||
{
|
||
{ "appid", payConfig.PlatformAPPID },//应用的APPID
|
||
{ "timestamp" ,CommonHelper.ConvertDataTimeLong(DateTime.Now).ToString()},//时间戳
|
||
{ "merchant_num", merchantInfo.MerchantCode}, //商户编号
|
||
{ "merchant_order_no" ,merchantOrderCode} //商户订单号
|
||
};
|
||
//验证商户订单号
|
||
if (!string.IsNullOrEmpty(platformOrderCode) && platformOrderCode != merchantOrderCode)
|
||
{
|
||
_ApiDictionary.Add("order_number", platformOrderCode);//平台订单号
|
||
}
|
||
//发送给第三方的交易参数日志
|
||
_ApiDictionary.Add("sign", ApiParamSign(_ApiDictionary, payConfig.PlatformKey));
|
||
LogHelper.WriteReceiveLog("支付反扫-传第三方参数:" +
|
||
_ApiDictionary.Select(pair => pair.Key + "=" + pair.Value).
|
||
DefaultIfEmpty("").Aggregate((a, b) => a + "&" + b));
|
||
//调用接口请求交易并返回结果(json方式)
|
||
return JsonConvert.DeserializeObject<Model.UphicooqueryModel>(CommonHelper.HttpUrlPost(
|
||
JsonConvert.SerializeObject(_ApiDictionary), payConfig.QueryUphicooURL,
|
||
"application/json", payConfig.PlatformTimeout));
|
||
}
|
||
#endregion
|
||
|
||
#region 嗨客交易退款接口
|
||
/// <summary>
|
||
/// 嗨客交易退款接口
|
||
/// </summary>
|
||
/// <param name="payConfig">接口配置</param>
|
||
/// <param name="merchantInfo">平台商户信息</param>
|
||
/// <param name="platformOrderCode">平台订单号(原流水号)
|
||
/// 注:与商户订单号必填一项</param>
|
||
/// <param name="merchantOrderCode">商户订单号(原流水号)
|
||
/// 注:与平台订单号必填一项</param>
|
||
/// <param name="refundOrderCode">退款订单号</param>
|
||
/// <param name="payAmount">退款金额(元)</param>
|
||
/// <returns></returns>
|
||
public static Model.UphicoorefundModel UphicooRefund(UphicooConfig payConfig,
|
||
MobilePayConfig.PayMerchant merchantInfo,
|
||
string platformOrderCode, string refundOrderCode, string payAmount)
|
||
{
|
||
//验证交易接口配置
|
||
if (payConfig == null)
|
||
{
|
||
return default(Model.UphicoorefundModel);
|
||
}
|
||
//验证交易金额
|
||
if (merchantInfo == null || string.IsNullOrWhiteSpace(merchantInfo.MerchantCode))
|
||
{
|
||
return default(Model.UphicoorefundModel);
|
||
}
|
||
//生成交易报文体参数
|
||
Dictionary<string, string> _ApiDictionary = new Dictionary<string, string>
|
||
{
|
||
{ "appid", payConfig.PlatformAPPID },//应用的APPID
|
||
{ "timestamp" ,CommonHelper.ConvertDataTimeLong(DateTime.Now).ToString()},//时间戳
|
||
{ "merchant_num", merchantInfo.MerchantCode}, //商户编号
|
||
{ "staff_num", merchantInfo.MerchantUserCode },//收银员编号
|
||
{ "store_num", merchantInfo.MerchantShopCode },//门店编号
|
||
{ "merchant_refund_no", refundOrderCode }, //商家退款单号
|
||
{ "order_number", platformOrderCode },//扫码交易流水号
|
||
{ "amount", payAmount},//退款金额
|
||
{ "remark", ""} //退款备注
|
||
};
|
||
//发送给第三方的交易参数日志
|
||
_ApiDictionary.Add("sign", ApiParamSign(_ApiDictionary, payConfig.PlatformKey));
|
||
LogHelper.WriteReceiveLog("支付退款-传第三方参数:" +
|
||
_ApiDictionary.Select(pair => pair.Key + "=" + pair.Value.ToString()).
|
||
DefaultIfEmpty("").Aggregate((a, b) => a + "&" + b));
|
||
//调用接口请求交易并返回结果(json方式)
|
||
return JsonConvert.DeserializeObject<Model.UphicoorefundModel>(CommonHelper.HttpUrlPost(
|
||
JsonConvert.SerializeObject(_ApiDictionary), payConfig.RefundUphicooURL,
|
||
"application/json", payConfig.PlatformTimeout));
|
||
}
|
||
#endregion
|
||
|
||
#region 嗨客交易退款查询接口
|
||
/// <summary>
|
||
/// 嗨客交易退款查询接口
|
||
/// </summary>
|
||
/// <param name="payConfig">接口配置</param>
|
||
/// <param name="merchantInfo">平台商户信息</param>
|
||
/// <param name="merchantOrderCode">商户交易订单号</param>
|
||
/// <param name="platformOrderCode">平台交易订单号</param>
|
||
/// <param name="payAmount">交易金额</param>
|
||
public static Model.UphicooreFundqueryModel UphicooRefundquery(UphicooConfig payConfig,
|
||
MobilePayConfig.PayMerchant merchantInfo, string merchantOrderCode,
|
||
string platformOrderCode, string payAmount)
|
||
{
|
||
//验证交易接口配置
|
||
if (payConfig == null)
|
||
{
|
||
return default(Model.UphicooreFundqueryModel);
|
||
}
|
||
//验证交易参数信息
|
||
if (merchantInfo == null || string.IsNullOrWhiteSpace(merchantInfo.MerchantCode))
|
||
{
|
||
return default(Model.UphicooreFundqueryModel);
|
||
}
|
||
//生成交易报文体参数
|
||
Dictionary<string, string> _ApiDictionary = new Dictionary<string, string>
|
||
{
|
||
{ "appid", payConfig.PlatformAPPID },//应用的APPID
|
||
{ "timestamp" ,CommonHelper.ConvertDataTimeLong(DateTime.Now).ToString()},//时间戳
|
||
{ "merchant_num", merchantInfo.MerchantCode}, //商户编号
|
||
{ "refund_no", platformOrderCode }, //平台退款单号
|
||
{ "merchant_refund_no", merchantOrderCode} //商户退款单号
|
||
};
|
||
//发送给第三方的交易参数日志
|
||
_ApiDictionary.Add("sign", ApiParamSign(_ApiDictionary, payConfig.PlatformKey));
|
||
LogHelper.WriteReceiveLog("支付退款-传第三方参数:" +
|
||
_ApiDictionary.Select(pair => pair.Key + "=" + pair.Value.ToString()).
|
||
DefaultIfEmpty("").Aggregate((a, b) => a + "&" + b));
|
||
//调用接口请求交易并返回结果(json方式)
|
||
return JsonConvert.DeserializeObject<Model.UphicooreFundqueryModel>(CommonHelper.HttpUrlPost(
|
||
JsonConvert.SerializeObject(_ApiDictionary), payConfig.RefundqueryPriceURL,
|
||
"application/json", payConfig.PlatformTimeout));
|
||
}
|
||
#endregion
|
||
|
||
#region 嗨客支付平台参数签名
|
||
/// <summary>
|
||
/// 嗨客支付平台参数签名
|
||
/// </summary>
|
||
/// <param name="signParm">待签名参数集</param>
|
||
/// <param name="MD5Key">签名密钥</param>
|
||
/// <returns></returns>
|
||
public static string ApiParamSign(Dictionary<string, string> signParm, string MD5Key)
|
||
{
|
||
string _strSign = "";
|
||
foreach (var keyValuePair in signParm.OrderBy(p => p.Key))
|
||
{
|
||
_strSign += (string.IsNullOrWhiteSpace(_strSign) ? "" : "&") + keyValuePair.Key + "=" + keyValuePair.Value;
|
||
}
|
||
return BitConverter.ToString(MD5.Create().ComputeHash(
|
||
Encoding.UTF8.GetBytes(_strSign + "&key=" + MD5Key))).Replace("-", "").ToLower();
|
||
}
|
||
#endregion
|
||
}
|
||
}
|