UnionPayController.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Threading.Tasks;
  5. using Microsoft.AspNetCore.Mvc;
  6. using Microsoft.Extensions.Logging;
  7. using MySystem.Util.UnionPay;
  8. using MySystem.Entity.UnionPay;
  9. using Library;
  10. using LitJson;
  11. namespace MySystem.Controllers
  12. {
  13. /// <summary>
  14. /// 联合收单接口控制器
  15. /// </summary>
  16. [Route("api/[controller]")]
  17. [ApiController]
  18. public class UnionPayController : ControllerBase
  19. {
  20. private readonly ILogger<UnionPayController> _logger;
  21. public UnionPayController(ILogger<UnionPayController> logger)
  22. {
  23. _logger = logger;
  24. }
  25. /// <summary>
  26. /// 商户审核信息回调接口
  27. /// </summary>
  28. /// <param name="request">包含签名和数据的请求对象</param>
  29. /// <returns>回调处理结果</returns>
  30. [HttpPost("/api/unionpay/merchant/review/callback")]
  31. public IActionResult MerchantReviewCallback([FromBody] Dictionary<string, object> request)
  32. {
  33. try
  34. {
  35. _logger.LogInformation("收到商户审核回调请求");
  36. // 验证请求包含必要字段
  37. if (!request.ContainsKey("sign") || !request.ContainsKey("agentId") || !request.ContainsKey("data"))
  38. {
  39. _logger.LogError("回调请求缺少必要字段");
  40. return BadRequest(new { error_code = "400", error_msg = "参数错误", count = 0 });
  41. }
  42. // 解析data字段为UnionPayMerchantReviewCallbackRequest对象
  43. var dataJson = Newtonsoft.Json.JsonConvert.SerializeObject(request["data"]);
  44. var callbackRequest = Newtonsoft.Json.JsonConvert.DeserializeObject<UnionPayMerchantReviewCallbackRequest>(dataJson);
  45. if (callbackRequest == null)
  46. {
  47. _logger.LogError("解析回调请求数据失败");
  48. return BadRequest(new { error_code = "400", error_msg = "参数错误", count = 0 });
  49. }
  50. // 调用商户审核回调处理方法
  51. var response = UnionPayMerchantTradeHelper.Instance.ProcessMerchantReviewCallback(callbackRequest);
  52. // 返回处理结果
  53. return Ok(response);
  54. }
  55. catch (Exception ex)
  56. {
  57. _logger.LogError(ex, "处理商户审核回调时发生异常");
  58. return StatusCode(500, new { error_code = "9999", error_msg = "系统异常", count = 0 });
  59. }
  60. }
  61. /// <summary>
  62. /// 交易结算实时推送接口
  63. /// </summary>
  64. /// <param name="pushRequest">交易结算推送请求对象</param>
  65. /// <returns>推送处理结果</returns>
  66. [HttpPost("/api/unionpay/settlement/push")]
  67. public IActionResult SettlementPush([FromBody] UnionPaySettlementPushRequest pushRequest)
  68. {
  69. try
  70. {
  71. _logger.LogInformation("收到交易结算实时推送请求");
  72. if (pushRequest == null)
  73. {
  74. _logger.LogError("推送请求数据为空");
  75. return BadRequest(new { error_code = "400", error_msg = "参数错误", count = 0 });
  76. }
  77. // 调用交易结算推送处理方法
  78. var response = UnionPayTradeSettlementHelper.Instance.ProcessSettlementPush(pushRequest);
  79. // 返回处理结果
  80. return Ok(response);
  81. }
  82. catch (Exception ex)
  83. {
  84. _logger.LogError(ex, "处理交易结算实时推送时发生异常");
  85. return StatusCode(500, new { error_code = "9999", error_msg = "系统异常", count = 0 });
  86. }
  87. }
  88. }
  89. }