2025-03-28 09:49:56 +08:00

226 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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