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 嗨客付款码支付接口
///
/// 嗨客付款码支付接口
///
/// 接口配置
/// 平台商户信息
/// 用户付款授权码
/// 商户交易订单号
/// 交易金额(元)
///
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 _ApiDictionary = new Dictionary
{
{ "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(CommonHelper.HttpUrlPost(
JsonConvert.SerializeObject(_ApiDictionary), payConfig.BarcodeUphicooURL,
"application/json", payConfig.PlatformTimeout));
}
#endregion
#region 嗨客平台订单查询
///
/// 嗨客平台订单查询
///
/// 接口配置
/// 平台商户信息
/// 商户交易订单号
/// 交易金额(元)
///
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 _ApiDictionary = new Dictionary
{
{ "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(CommonHelper.HttpUrlPost(
JsonConvert.SerializeObject(_ApiDictionary), payConfig.QueryUphicooURL,
"application/json", payConfig.PlatformTimeout));
}
#endregion
#region 嗨客交易退款接口
///
/// 嗨客交易退款接口
///
/// 接口配置
/// 平台商户信息
/// 平台订单号(原流水号)
/// 注:与商户订单号必填一项
/// 商户订单号(原流水号)
/// 注:与平台订单号必填一项
/// 退款订单号
/// 退款金额(元)
///
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 _ApiDictionary = new Dictionary
{
{ "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(CommonHelper.HttpUrlPost(
JsonConvert.SerializeObject(_ApiDictionary), payConfig.RefundUphicooURL,
"application/json", payConfig.PlatformTimeout));
}
#endregion
#region 嗨客交易退款查询接口
///
/// 嗨客交易退款查询接口
///
/// 接口配置
/// 平台商户信息
/// 商户交易订单号
/// 平台交易订单号
/// 交易金额
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 _ApiDictionary = new Dictionary
{
{ "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(CommonHelper.HttpUrlPost(
JsonConvert.SerializeObject(_ApiDictionary), payConfig.RefundqueryPriceURL,
"application/json", payConfig.PlatformTimeout));
}
#endregion
#region 嗨客支付平台参数签名
///
/// 嗨客支付平台参数签名
///
/// 待签名参数集
/// 签名密钥
///
public static string ApiParamSign(Dictionary 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
}
}