using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using SuperMap.RealEstate.ServiceModel;
using SuperMap.RealEstate.ExchangeData.Business;
using SuperMap.RealEstate.HighWay.SellData.Business;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using HZQR.Common;
namespace ServerPartTransmission.Method
{
///
/// 移动支付相关方法
///
public class MobilePayHelper
{
#region 方法 -> 银行到账归口查询
///
/// 银行到账归口查询
///
/// 事务管理器
/// 查询开始日期
/// 查询结束日期
/// 门店商户编码集合
///
public static List GetTradeStatistics(Transaction _Transaction,
string starTime, string endTime, DataTable dtBusinessShopCode)
{
List TradeStatisticsDataList = new List();
try
{
Model.StatisticsData statisticsResult = new Model.StatisticsData();
foreach (DataRow item in dtBusinessShopCode.Rows)
{
string sqlWhere = string.Empty;
string busi_id = item["BUSINESS_CODE"].ToString().Trim(); //商户编码
string key = item["BUSINESS_KEY"].ToString().Trim(); //商户秘钥
string appid = item["BUSINESS_APPID"].ToString().Trim(); //APPID(嗨客)
string operators = item["PAYMENT_CHANNEL"].ToString(); //支付通道
try
{
switch (operators)
{
case "1005"://客无忧
if (busi_id.Replace(",", ",").Contains(","))
{
foreach (string _s_busi_id in busi_id.Replace(",", ",").Split(','))
{
statisticsResult = GetKWYStatistics(starTime, endTime, _s_busi_id.Trim(), statisticsResult);
}
}
else
{
statisticsResult = GetKWYStatistics(starTime, endTime, busi_id, statisticsResult);
}
break;
case "1007"://银联支付
statisticsResult = GetYLStatistics(statisticsResult, starTime, endTime, busi_id, key);
break;
case "1009":
statisticsResult = GetJHStatistics(_Transaction, statisticsResult, starTime,
endTime, item["SERVERPART_CODE"].ToString(), item["SERVERPARTSHOP_CODE"].ToString());
break;
case "1011":
statisticsResult = GetGHStatistics(_Transaction, statisticsResult, starTime,
endTime, item["SERVERPART_CODE"].ToString(), item["SERVERPARTSHOP_CODE"].ToString());
break;
case "1012"://嗨客移动支付
//初始化支付参数
Model.UphicooConfig _PayConfig = new Model.UphicooConfig(appid, key, busi_id);
statisticsResult = GetHKStatistics(busi_id, _PayConfig, statisticsResult, starTime, endTime);
break;
}
}
catch (Exception exception)
{
//记录日志
LogUtil.WriteLog(exception);
}
}
if (statisticsResult.list != null)
{
TradeStatisticsDataList = statisticsResult.list;
}
}
catch (Exception ex)
{
//记录日志
LogUtil.WriteLog(ex);
}
return TradeStatisticsDataList;
}
#endregion
#region 方法 -> 客无忧交易统计接口
///
/// 客无忧交易统计接口
///
/// 查询开始日期
/// 查询结束日期
/// 商户编码
/// 交易结果数据集
///
public static Model.StatisticsData GetKWYStatistics(string starTime, string endTime,
string busi_id, Model.StatisticsData statisticsResult)
{
string beginDate = Convert.ToDateTime(starTime).ToString("yyyy-MM-dd");
string endDate = Convert.ToDateTime(endTime).ToString("yyyy-MM-dd");
SortedDictionary _SortedDictionary = new SortedDictionary
{
{ "openid", "1z7n0lp0nsi8o0dd5o74lgrhs1575k" },//客无忧与平台对接的openid jajonaujrocjajheangyunhaohpeng
{ "bind_code",busi_id},//商户编号
{ "nonce_str", "0" },
{ "time_stamp", Convert.ToInt32((DateTime.Now -
new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds).ToString() },//时间戳
{ "date",beginDate+ "," +endDate}
};
string _SignstringTemp = "";
foreach (var keyValue in _SortedDictionary)
{
_SignstringTemp += (_SignstringTemp == "" ? "" : "&") + keyValue.Key + "=" + keyValue.Value;
}
string _Signstring = _SignstringTemp + "&sign=" + Common.MD5Util.GetMD5(
_SignstringTemp + "&key=w0j23q2m69po13syyd6pj6a11o64f2r13bj").ToUpper();
string requestUrl = Common.AppSettings.url_kwy;
string orderStatList = Common.HttpUtil.HttpUrlPost(_Signstring, requestUrl + "orderStatList");
Model.KwyStatResult kwyResult = JsonConvert.DeserializeObject(orderStatList);
if (kwyResult.result.return_code == "SUCCESS")
{
if (kwyResult.list != null)
{
kwyResult.list.ForEach(o =>
{
o.busi_id = busi_id;
o.account_amount = o.amount - o.fee;
});
//若原单据已退款,返回结果为退款,因此要去除掉交易退款的单据
for (int i = kwyResult.list.Count - 1; i >= 0; i--)
{
Model.TradeStatisticsData o = kwyResult.list[i];
if (o.amount <= 0)
{
kwyResult.list.Remove(o);
}
}
if (statisticsResult.list == null)
{
statisticsResult.list = kwyResult.list;
}
else
{
if (kwyResult.list != null)
{
statisticsResult.list = statisticsResult.list.Concat(kwyResult.list).ToList();
}
}
}
}
return statisticsResult;
}
#endregion
#region 方法 -> 银联支付交易统计接口
///
/// 银联支付交易统计接口
///
/// 查询开始日期
/// 查询结束日期
/// 商户编码
/// 商户秘钥
/// 交易结果数据集
///
public static Model.StatisticsData GetYLStatistics(Model.StatisticsData statisticsResult,
string starTime, string endTime, string busi_id, string key)
{
string beginDate = Convert.ToDateTime(starTime).ToString("yyyyMMddHHmmss");
string endDate = Convert.ToDateTime(endTime).AddDays(1).ToString("yyyyMMddHHmmss");
SortedDictionary _SortedDictionary = new SortedDictionary
{
{ "busi_id", busi_id},
{ "beginDate", beginDate },
{ "endDate", endDate }
};
string stringSignTemp = string.Empty; //签名字符串
foreach (var item in _SortedDictionary)
{
stringSignTemp = stringSignTemp + (stringSignTemp == "" ? "" : "&") + item.Key + "=" + item.Value;
}
string _BaseUrl = Common.AppSettings.url_yl;//请求地址
string MD5String = Common.MD5Util.GetMD5(stringSignTemp + "&key=" + key).ToUpper();
string RequestUrl = _BaseUrl + "/queryStatisticsOrder";
// string format = "application/json;charset=UTF-8";
Model.StatisticsResult ylResult = new Model.StatisticsResult();
try
{
ylResult = JsonConvert.DeserializeObject(
Common.HttpUtil.HttpUrlPost(stringSignTemp + "&sign=" + MD5String, RequestUrl));//设置请求最大耗时15秒
}
catch { }
if (ylResult.result != null && ylResult.result.return_code == "SUCCESS")
{
if (ylResult.data != null)
{
//因接口按支付方式统计,这里调整为按天统计
ylResult.data = ylResult.data
.GroupBy(o => new
{
o.date
})
.Select(o => new Model.TradeStatisticsData
{
date = o.Key.date,
amount = o.Sum(x => x.amount / 100),
account_amount = o.Sum(x => x.amount / 100 - x.fee)
}).ToList();
if (statisticsResult.list == null)
{
statisticsResult.list = ylResult.data;
}
else
{
if (ylResult.data != null)
{
statisticsResult.list = statisticsResult.list.Concat(ylResult.data).ToList();
}
}
}
}
return statisticsResult;
}
#endregion
#region 方法 -> 建行支付交易统计
///
/// 建行支付交易统计
///
/// 事务管理器
/// 交易结果数据集
/// 查询开始日期
/// 查询结束日期
/// 服务区编码
/// 门店编码
///
public static Model.StatisticsData GetJHStatistics(Transaction _Transaction, Model.StatisticsData statisticsResult,
string starTime, string endTime, string Serverpart_Code, string ShopCode)
{
DataTable _DataTable = new CCBCDAILYCOLLECT(_Transaction).ExecuteDataTable($@"
SELECT * FROM HIGHWAY_SELLDATA.T_CCBCDAILYCOLLECT
WHERE SERVERPARTCODE = '{Serverpart_Code}' AND SHOPCODE = '{ShopCode}' AND
STATISTICS_DATE BETWEEN TO_DATE('{starTime}','YYYY/MM/DD') AND TO_DATE('{endTime}','YYYY/MM/DD') + 1");
foreach (DataRow _DataRow in _DataTable.Rows)
{
Model.TradeStatisticsData tradeStatisticsDatas = new Model.TradeStatisticsData();
tradeStatisticsDatas.date = _DataRow["STATISTICS_DATE"].TryParseToDateTime().Value.ToString("yyyy-MM-dd");
tradeStatisticsDatas.amount = _DataRow["TRADEAMOUNT"].TryParseToDecimal();
tradeStatisticsDatas.fee = _DataRow["SERVICECHARGE"].TryParseToDecimal();
tradeStatisticsDatas.account_amount = _DataRow["SETTLEMENTAMOUNT"].TryParseToDecimal();
tradeStatisticsDatas.operators_name = "建行";
if (statisticsResult.list == null)
{
statisticsResult.list = new List() { tradeStatisticsDatas };
}
else
{
statisticsResult.list.Add(tradeStatisticsDatas);
}
}
return statisticsResult;
}
#endregion
#region 方法 -> 工行支付交易统计
///
/// 工行支付交易统计
///
/// 事务管理器
/// 交易结果数据集
/// 查询开始日期
/// 查询结束日期
/// 服务区编码
/// 门店编码
///
public static Model.StatisticsData GetGHStatistics(Transaction _Transaction, Model.StatisticsData statisticsResult,
string starTime, string endTime, string Serverpart_Code, string ShopCode)
{
starTime = DateTime.Parse(starTime).ToString("yyyyMMdd");
endTime = DateTime.Parse(endTime).ToString("yyyyMMdd");
DataTable _DataTable = new CONFIGURATION(_Transaction).ExecuteDataTable($@"
SELECT * FROM HIGHWAY_SELLDATA.T_ICBCDAILYCOLLECT WHERE SERVERPARTCODE = '{Serverpart_Code}'
AND SHOPCODE = '{ShopCode}' AND STATISTICS_DATE BETWEEN {starTime} AND {endTime}");
foreach (DataRow _DataRow in _DataTable.Rows)
{
Model.TradeStatisticsData tradeStatisticsDatas = new Model.TradeStatisticsData();
tradeStatisticsDatas.date = _DataRow["STATISTICS_DATE"].ToString();
tradeStatisticsDatas.amount = _DataRow["TRADEAMOUNT"].TryParseToDecimal();
tradeStatisticsDatas.fee = _DataRow["SERVICECHARGE"].TryParseToDecimal();
tradeStatisticsDatas.account_amount = _DataRow["SETTLEMENTAMOUNT"].TryParseToDecimal();
tradeStatisticsDatas.operators_name = "工行";
if (statisticsResult.list == null)
{
statisticsResult.list = new List() { tradeStatisticsDatas };
}
else
{
statisticsResult.list.Add(tradeStatisticsDatas);
}
}
return statisticsResult;
}
#endregion
#region 方法 -> 嗨客支付交易统计接口
///
/// 嗨客支付交易统计接口
///
/// 商户编码
/// 嗨客参数配置对象
/// 交易结果数据集
/// 查询开始日期
/// 查询结束日期
///
public static Model.StatisticsData GetHKStatistics(string busi_id, Model.UphicooConfig payConfig,
Model.StatisticsData statisticsResult, string starTime, string endTime)
{
string beginDate = Convert.ToDateTime(starTime).ToString("yyyyMMddHHmmss");
string endDate = Convert.ToDateTime(endTime).AddDays(1).AddSeconds(-1).ToString("yyyyMMddHHmmss");
Dictionary _paramDictionary = new Dictionary
{
{ "appid",payConfig.PlatformAPPID},
{ "timestamp",CommonHelper.ConvertDataTimeLong(DateTime.Now).ToString()},
{ "merchant_num",busi_id},
{ "begin_date",beginDate },
{ "end_date",endDate },
{ "state","1" }
};
_paramDictionary.Add("sign", ApiParamSign(_paramDictionary, payConfig.PlatformKey));
string _BaseUrl = Common.AppSettings.url_hksta;//请求地址
string postResult = Common.HttpUtil.HttpUrlPost(JsonConvert.SerializeObject(_paramDictionary), _BaseUrl, "application/json");
JObject jobjectResult = JObject.Parse(postResult);
JObject jobjectChild = new JObject();
jobjectChild.Add("return_code", jobjectResult["code"]);
jobjectChild.Add("return_msg", jobjectResult["message"]);
jobjectResult.Add("result", jobjectChild);
jobjectResult["data"] = jobjectResult["data"]["list"];
Model.StatisticsResult hkResult = new Model.StatisticsResult();
try
{
hkResult = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(jobjectResult));
}
catch (Exception) { }
if (hkResult.result != null && hkResult.result.return_code == "000000")
{
if (hkResult.data != null)
{
//因接口按支付方式统计,这里调整为按天统计
hkResult.data = hkResult.data
.GroupBy(o => new
{
o.date
})
.Select(o => new Model.TradeStatisticsData
{
date = o.Key.date,
amount = o.Sum(x => x.amount / 100),
account_amount = o.Sum(x => x.amount / 100 - x.fee)
}).ToList();
if (statisticsResult.list == null)
{
statisticsResult.list = hkResult.data;
}
else
{
if (hkResult.data != null)
{
statisticsResult.list = statisticsResult.list.Concat(hkResult.data).ToList();
}
}
}
}
return statisticsResult;
}
#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
#endregion
}
}