| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Net;
- using System.Text;
- using Library;
- using LitJson;
- using MySystem.Entity.UnionPay;
- using Org.BouncyCastle.Crypto.Digests;
- using Org.BouncyCastle.Crypto.Macs;
- using Org.BouncyCastle.Crypto.Parameters;
- namespace MySystem.Util.UnionPay
- {
- /// <summary>
- /// 银联交易结算帮助类
- /// </summary>
- public class UnionPayTradeSettlementHelper : UnionPayBase
- {
- public readonly static UnionPayTradeSettlementHelper Instance = new UnionPayTradeSettlementHelper();
- private UnionPayTradeSettlementHelper()
- {
- }
- /// <summary>
- /// 查询订单交易结算信息
- /// </summary>
- /// <param name="request">交易结算查询请求参数</param>
- /// <returns>交易结算信息列表</returns>
- public UnionPayResponse<List<UnionPayTradeDetailInfo>> ListTradeDetail(UnionPayListTradeDetailRequest request)
- {
- // 使用CreateRequest方法创建请求对象,确保sign是用国密SM3对业务数据data字段进行签名的
- var unionPayRequest = CreateRequest(UnionPayAppId, UnionPayAppId, request);
- string logString = "";
- logString += "\n" + DateTime.Now.ToString();
- try
- {
- // 序列化请求参数
- string req = Newtonsoft.Json.JsonConvert.SerializeObject(unionPayRequest);
- // 记录请求日志
- logString += "\n" + "请求参数\n" + req;
- logString += "\n" + "请求地址:" + UnionPayRequestUrl + "/open-api/tradeDetail/listTradeDetail";
- // 发送请求
- string result = PostWebRequest(UnionPayRequestUrl + "/open-api/tradeDetail/listTradeDetail", req, new Dictionary<string, string>());
- // 记录响应日志
- logString += "\n" + "返回\n" + result + "\n\n";
- LogHelper.Instance.WriteLog(logString, "银联交易结算详情查询", true);
- // 反序列化为UnionPayResponse
- return Newtonsoft.Json.JsonConvert.DeserializeObject<UnionPayResponse<List<UnionPayTradeDetailInfo>>>(result);
- }
- catch (Exception ex)
- {
- logString += "\n" + "异常:" + ex.ToString();
- LogHelper.Instance.WriteLog(logString, "银联交易结算详情查询异常", true);
- return new UnionPayResponse<List<UnionPayTradeDetailInfo>>
- {
- error_code = "9999",
- error_msg = "系统异常"
- };
- }
- }
- /// <summary>
- /// 处理交易结算实时推送
- /// </summary>
- /// <param name="pushRequest">交易结算推送请求参数</param>
- /// <returns>处理结果</returns>
- public UnionPayResponse ProcessSettlementPush(UnionPaySettlementPushRequest pushRequest)
- {
- string logString = "";
- logString += "\n" + DateTime.Now.ToString();
- try
- {
- // 序列化请求参数记录日志
- string req = Newtonsoft.Json.JsonConvert.SerializeObject(pushRequest);
- logString += "\n" + "交易结算实时推送请求参数\n" + req;
- // 根据推送类型处理不同的数据
- if (pushRequest.type == 0)
- {
- // 处理交易数据
- TransactionDetailInfo transactionInfo = pushRequest.ToTransactionDetailInfo();
- logString += "\n" + "处理交易数据,订单号:" + transactionInfo.orderId;
- // TODO: 实现交易数据处理逻辑
- // 1. 验证交易信息
- // 2. 更新交易状态
- // 3. 记录交易日志
- // 4. 触发后续业务流程
- }
- else if (pushRequest.type == 1)
- {
- // 处理结算数据
- SettlementDetailInfo settlementInfo = pushRequest.ToSettlementDetailInfo();
- logString += "\n" + "处理结算数据,订单号:" + settlementInfo.orderId;
- // TODO: 实现结算数据处理逻辑
- // 1. 验证结算信息
- // 2. 更新结算状态
- // 3. 记录结算日志
- // 4. 触发后续业务流程
- }
- else
- {
- logString += "\n" + "未知的推送类型:" + pushRequest.type;
- LogHelper.Instance.WriteLog(logString, "银联交易结算实时推送处理异常", true);
- return new UnionPayResponse
- {
- error_code = "400",
- error_msg = "参数错误",
- count = 0,
- data = null
- };
- }
- logString += "\n" + "交易结算实时推送处理成功";
- LogHelper.Instance.WriteLog(logString, "银联交易结算实时推送处理", true);
- // 返回成功响应
- return new UnionPayResponse
- {
- error_code = "0",
- error_msg = "success",
- count = 0,
- data = null
- };
- }
- catch (Exception ex)
- {
- logString += "\n" + "异常:" + ex.ToString();
- LogHelper.Instance.WriteLog(logString, "银联交易结算实时推送处理异常", true);
- return new UnionPayResponse
- {
- error_code = "9999",
- error_msg = "系统异常"
- };
- }
- }
-
- }
- }
|