UnionPayMerchantTradeHelper.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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 UnionPayMerchantTradeHelper : UnionPayBase
  18. {
  19. public readonly static UnionPayMerchantTradeHelper Instance = new UnionPayMerchantTradeHelper();
  20. private UnionPayMerchantTradeHelper()
  21. {
  22. }
  23. /// <summary>
  24. /// 商户注册
  25. /// </summary>
  26. /// <param name="merchantInfo">商户信息</param>
  27. /// <returns>注册结果</returns>
  28. public UnionPayResponse<UnionPayMerchantRegisterResponse> MerchantRegister(UnionPayMerchantRegisterRequest merchantInfo)
  29. {
  30. // 使用CreateRequest方法创建请求对象,确保sign是用国密SM3对业务数据data字段进行签名的
  31. var request = CreateRequest(UnionPayAppId, UnionPayAppId, merchantInfo);
  32. // 调用新的方法
  33. string logString = "";
  34. logString += "\n" + DateTime.Now.ToString();
  35. try
  36. {
  37. // 序列化请求参数
  38. string req = Newtonsoft.Json.JsonConvert.SerializeObject(request);
  39. logString += "\n" + "请求参数\n" + req;
  40. logString += "\n" + "请求地址:" + UnionPayRequestUrl + "/open-api/merchant/register";
  41. string result = PostWebRequest(UnionPayRequestUrl + "/open-api/merchant/register", req, new Dictionary<string, string>());
  42. logString += "\n" + "返回\n" + result + "\n\n";
  43. LogHelper.Instance.WriteLog(logString, "联合收单商户注册", true);
  44. // 反序列化为UnionPayResponse
  45. return Newtonsoft.Json.JsonConvert.DeserializeObject<UnionPayResponse<UnionPayMerchantRegisterResponse>>(result);
  46. }
  47. catch (Exception ex)
  48. {
  49. logString += "\n" + "异常:" + ex.ToString();
  50. LogHelper.Instance.WriteLog(logString, "联合收单商户注册异常", true);
  51. return new UnionPayResponse<UnionPayMerchantRegisterResponse>
  52. {
  53. error_code = "9999",
  54. error_msg = "系统异常"
  55. };
  56. }
  57. }
  58. /// <summary>
  59. /// 获取证件类型列表
  60. /// </summary>
  61. /// <param name="idCardTypesRequest">获取证件类型列表请求参数</param>
  62. /// <returns>证件类型列表</returns>
  63. public UnionPayResponse<List<UnionPayIdCardTypeInfo>> GetIdCardTypes(UnionPayIdCardTypesRequest idCardTypesRequest)
  64. {
  65. // 使用CreateRequest方法创建请求对象,确保sign是用国密SM3对业务数据data字段进行签名的
  66. var request = CreateRequest(UnionPayAppId, UnionPayAppId, idCardTypesRequest);
  67. string logString = "";
  68. logString += "\n" + DateTime.Now.ToString();
  69. try
  70. {
  71. // 序列化请求参数
  72. string req = Newtonsoft.Json.JsonConvert.SerializeObject(request);
  73. // 记录请求日志
  74. logString += "\n" + "请求参数\n" + req;
  75. logString += "\n" + "请求地址:" + UnionPayRequestUrl + "/open-api/agentManager/getIdCardTypes";
  76. // 发送请求
  77. string result = PostWebRequest(UnionPayRequestUrl + "/open-api/agentManager/getIdCardTypes", req, new Dictionary<string, string>());
  78. // 记录响应日志
  79. logString += "\n" + "返回\n" + result + "\n\n";
  80. LogHelper.Instance.WriteLog(logString, "银联获取证件类型列表", true);
  81. // 反序列化为UnionPayResponse
  82. return Newtonsoft.Json.JsonConvert.DeserializeObject<UnionPayResponse<List<UnionPayIdCardTypeInfo>>>(result);
  83. }
  84. catch (Exception ex)
  85. {
  86. logString += "\n" + "异常:" + ex.ToString();
  87. LogHelper.Instance.WriteLog(logString, "银联获取证件类型列表异常", true);
  88. return new UnionPayResponse<List<UnionPayIdCardTypeInfo>>
  89. {
  90. error_code = "9999",
  91. error_msg = "系统异常"
  92. };
  93. }
  94. }
  95. /// <summary>
  96. /// 获取商户详情
  97. /// </summary>
  98. /// <param name="merchantDetailRequest">获取商户详情请求参数</param>
  99. /// <returns>商户详情</returns>
  100. public UnionPayResponse<UnionPayMerchantDetailResponseData> GetMerchantDetail(UnionPayMerchantDetailRequest merchantDetailRequest)
  101. {
  102. // 使用CreateRequest方法创建请求对象,确保sign是用国密SM3对业务数据data字段进行签名的
  103. var request = CreateRequest(UnionPayAppId, UnionPayAppId, merchantDetailRequest);
  104. string logString = "";
  105. logString += "\n" + DateTime.Now.ToString();
  106. try
  107. {
  108. // 序列化请求参数
  109. string req = Newtonsoft.Json.JsonConvert.SerializeObject(request);
  110. // 记录请求日志
  111. logString += "\n" + "请求参数\n" + req;
  112. logString += "\n" + "请求地址:" + UnionPayRequestUrl + "/open-api/merchant/getMerchantDetail";
  113. // 发送请求
  114. string result = PostWebRequest(UnionPayRequestUrl + "/open-api/merchant/getMerchantDetail", req, new Dictionary<string, string>());
  115. // 记录响应日志
  116. logString += "\n" + "返回\n" + result + "\n\n";
  117. LogHelper.Instance.WriteLog(logString, "银联获取商户详情", true);
  118. // 反序列化为UnionPayResponse
  119. return Newtonsoft.Json.JsonConvert.DeserializeObject<UnionPayResponse<UnionPayMerchantDetailResponseData>>(result);
  120. }
  121. catch (Exception ex)
  122. {
  123. logString += "\n" + "异常:" + ex.ToString();
  124. LogHelper.Instance.WriteLog(logString, "银联获取商户详情异常", true);
  125. return new UnionPayResponse<UnionPayMerchantDetailResponseData>
  126. {
  127. error_code = "9999",
  128. error_msg = "系统异常"
  129. };
  130. }
  131. }
  132. /// <summary>
  133. /// 更新商户信息
  134. /// </summary>
  135. /// <param name="updateRequest">更新商户信息请求参数</param>
  136. /// <returns>更新结果</returns>
  137. public UnionPayResponse UpdateMerchantInfo(UnionPayUpdateMerchantInfoRequest updateRequest)
  138. {
  139. // 使用CreateRequest方法创建请求对象,确保sign是用国密SM3对业务数据data字段进行签名的
  140. var request = CreateRequest(UnionPayAppId, UnionPayAppId, updateRequest);
  141. string logString = "";
  142. logString += "\n" + DateTime.Now.ToString();
  143. try
  144. {
  145. // 序列化请求参数
  146. string req = Newtonsoft.Json.JsonConvert.SerializeObject(request);
  147. // 记录请求日志
  148. logString += "\n" + "请求参数\n" + req;
  149. logString += "\n" + "请求地址:" + UnionPayRequestUrl + "/open-api/merchant/updateMerchantInfo";
  150. // 发送请求
  151. string result = PostWebRequest(UnionPayRequestUrl + "/open-api/merchant/updateMerchantInfo", req, new Dictionary<string, string>());
  152. // 记录响应日志
  153. logString += "\n" + "返回\n" + result + "\n\n";
  154. LogHelper.Instance.WriteLog(logString, "银联更新商户信息", true);
  155. // 反序列化为UnionPayResponse
  156. return Newtonsoft.Json.JsonConvert.DeserializeObject<UnionPayResponse>(result);
  157. }
  158. catch (Exception ex)
  159. {
  160. logString += "\n" + "异常:" + ex.ToString();
  161. LogHelper.Instance.WriteLog(logString, "银联更新商户信息异常", true);
  162. return new UnionPayResponse
  163. {
  164. error_code = "9999",
  165. error_msg = "系统异常"
  166. };
  167. }
  168. }
  169. /// <summary>
  170. /// 处理商户审核信息回调
  171. /// </summary>
  172. /// <param name="callbackRequest">商户审核回调请求参数</param>
  173. /// <returns>回调处理结果</returns>
  174. public UnionPayResponse ProcessMerchantReviewCallback(UnionPayMerchantReviewCallbackRequest callbackRequest)
  175. {
  176. string logString = "";
  177. logString += "\n" + DateTime.Now.ToString();
  178. try
  179. {
  180. // 序列化请求参数记录日志
  181. string req = Newtonsoft.Json.JsonConvert.SerializeObject(callbackRequest);
  182. logString += "\n" + "商户审核回调请求参数\n" + req;
  183. // TODO: 实现具体的回调处理逻辑
  184. // 1. 验证商户信息
  185. // 2. 更新商户状态
  186. // 3. 记录审核日志
  187. // 4. 触发后续业务流程(如通知商户等)
  188. logString += "\n" + "商户审核回调处理成功";
  189. LogHelper.Instance.WriteLog(logString, "银联商户审核回调处理", true);
  190. // 返回成功响应
  191. return new UnionPayResponse
  192. {
  193. error_code = "0",
  194. error_msg = "success",
  195. count = 0,
  196. data = null
  197. };
  198. }
  199. catch (Exception ex)
  200. {
  201. logString += "\n" + "异常:" + ex.ToString();
  202. LogHelper.Instance.WriteLog(logString, "银联商户审核回调处理异常", true);
  203. return new UnionPayResponse
  204. {
  205. error_code = "9999",
  206. error_msg = "系统异常"
  207. };
  208. }
  209. }
  210. }
  211. }