UnionPayTradeSettlementHelper.cs 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Net;
  5. using System.Text;
  6. using Library;
  7. using LitJson;
  8. using MySystem.Entity.UnionPay;
  9. using Org.BouncyCastle.Crypto.Digests;
  10. using Org.BouncyCastle.Crypto.Macs;
  11. using Org.BouncyCastle.Crypto.Parameters;
  12. namespace MySystem.Util.UnionPay
  13. {
  14. /// <summary>
  15. /// 银联交易结算帮助类
  16. /// </summary>
  17. public class UnionPayTradeSettlementHelper : UnionPayBase
  18. {
  19. public readonly static UnionPayTradeSettlementHelper Instance = new UnionPayTradeSettlementHelper();
  20. private UnionPayTradeSettlementHelper()
  21. {
  22. }
  23. /// <summary>
  24. /// 查询订单交易结算信息
  25. /// </summary>
  26. /// <param name="request">交易结算查询请求参数</param>
  27. /// <returns>交易结算信息列表</returns>
  28. public UnionPayResponse<List<UnionPayTradeDetailInfo>> ListTradeDetail(UnionPayListTradeDetailRequest request)
  29. {
  30. // 使用CreateRequest方法创建请求对象,确保sign是用国密SM3对业务数据data字段进行签名的
  31. var unionPayRequest = CreateRequest(UnionPayAppId, UnionPayAppId, request);
  32. string logString = "";
  33. logString += "\n" + DateTime.Now.ToString();
  34. try
  35. {
  36. // 序列化请求参数
  37. string req = Newtonsoft.Json.JsonConvert.SerializeObject(unionPayRequest);
  38. // 记录请求日志
  39. logString += "\n" + "请求参数\n" + req;
  40. logString += "\n" + "请求地址:" + UnionPayRequestUrl + "/open-api/tradeDetail/listTradeDetail";
  41. // 发送请求
  42. string result = PostWebRequest(UnionPayRequestUrl + "/open-api/tradeDetail/listTradeDetail", req, new Dictionary<string, string>());
  43. // 记录响应日志
  44. logString += "\n" + "返回\n" + result + "\n\n";
  45. LogHelper.Instance.WriteLog(logString, "银联交易结算详情查询", true);
  46. // 反序列化为UnionPayResponse
  47. return Newtonsoft.Json.JsonConvert.DeserializeObject<UnionPayResponse<List<UnionPayTradeDetailInfo>>>(result);
  48. }
  49. catch (Exception ex)
  50. {
  51. logString += "\n" + "异常:" + ex.ToString();
  52. LogHelper.Instance.WriteLog(logString, "银联交易结算详情查询异常", true);
  53. return new UnionPayResponse<List<UnionPayTradeDetailInfo>>
  54. {
  55. error_code = "9999",
  56. error_msg = "系统异常"
  57. };
  58. }
  59. }
  60. /// <summary>
  61. /// 处理交易结算实时推送
  62. /// </summary>
  63. /// <param name="pushRequest">交易结算推送请求参数</param>
  64. /// <returns>处理结果</returns>
  65. public UnionPayResponse ProcessSettlementPush(UnionPaySettlementPushRequest pushRequest)
  66. {
  67. string logString = "";
  68. logString += "\n" + DateTime.Now.ToString();
  69. try
  70. {
  71. // 序列化请求参数记录日志
  72. string req = Newtonsoft.Json.JsonConvert.SerializeObject(pushRequest);
  73. logString += "\n" + "交易结算实时推送请求参数\n" + req;
  74. // 根据推送类型处理不同的数据
  75. if (pushRequest.type == 0)
  76. {
  77. // 处理交易数据
  78. TransactionDetailInfo transactionInfo = pushRequest.ToTransactionDetailInfo();
  79. logString += "\n" + "处理交易数据,订单号:" + transactionInfo.orderId;
  80. // TODO: 实现交易数据处理逻辑
  81. // 1. 验证交易信息
  82. // 2. 更新交易状态
  83. // 3. 记录交易日志
  84. // 4. 触发后续业务流程
  85. }
  86. else if (pushRequest.type == 1)
  87. {
  88. // 处理结算数据
  89. SettlementDetailInfo settlementInfo = pushRequest.ToSettlementDetailInfo();
  90. logString += "\n" + "处理结算数据,订单号:" + settlementInfo.orderId;
  91. // TODO: 实现结算数据处理逻辑
  92. // 1. 验证结算信息
  93. // 2. 更新结算状态
  94. // 3. 记录结算日志
  95. // 4. 触发后续业务流程
  96. }
  97. else
  98. {
  99. logString += "\n" + "未知的推送类型:" + pushRequest.type;
  100. LogHelper.Instance.WriteLog(logString, "银联交易结算实时推送处理异常", true);
  101. return new UnionPayResponse
  102. {
  103. error_code = "400",
  104. error_msg = "参数错误",
  105. count = 0,
  106. data = null
  107. };
  108. }
  109. logString += "\n" + "交易结算实时推送处理成功";
  110. LogHelper.Instance.WriteLog(logString, "银联交易结算实时推送处理", true);
  111. // 返回成功响应
  112. return new UnionPayResponse
  113. {
  114. error_code = "0",
  115. error_msg = "success",
  116. count = 0,
  117. data = null
  118. };
  119. }
  120. catch (Exception ex)
  121. {
  122. logString += "\n" + "异常:" + ex.ToString();
  123. LogHelper.Instance.WriteLog(logString, "银联交易结算实时推送处理异常", true);
  124. return new UnionPayResponse
  125. {
  126. error_code = "9999",
  127. error_msg = "系统异常"
  128. };
  129. }
  130. }
  131. }
  132. }