using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using MySystem.Util.UnionPay; using MySystem.Entity.UnionPay; using Library; using LitJson; namespace MySystem.Controllers { /// /// 联合收单接口控制器 /// [Route("api/[controller]")] [ApiController] public class UnionPayController : ControllerBase { private readonly ILogger _logger; public UnionPayController(ILogger logger) { _logger = logger; } /// /// 商户审核信息回调接口 /// /// 包含签名和数据的请求对象 /// 回调处理结果 [HttpPost("/api/unionpay/merchant/review/callback")] public IActionResult MerchantReviewCallback([FromBody] Dictionary request) { try { _logger.LogInformation("收到商户审核回调请求"); // 验证请求包含必要字段 if (!request.ContainsKey("sign") || !request.ContainsKey("agentId") || !request.ContainsKey("data")) { _logger.LogError("回调请求缺少必要字段"); return BadRequest(new { error_code = "400", error_msg = "参数错误", count = 0 }); } // 解析data字段为UnionPayMerchantReviewCallbackRequest对象 var dataJson = Newtonsoft.Json.JsonConvert.SerializeObject(request["data"]); var callbackRequest = Newtonsoft.Json.JsonConvert.DeserializeObject(dataJson); if (callbackRequest == null) { _logger.LogError("解析回调请求数据失败"); return BadRequest(new { error_code = "400", error_msg = "参数错误", count = 0 }); } // 调用商户审核回调处理方法 var response = UnionPayMerchantTradeHelper.Instance.ProcessMerchantReviewCallback(callbackRequest); // 返回处理结果 return Ok(response); } catch (Exception ex) { _logger.LogError(ex, "处理商户审核回调时发生异常"); return StatusCode(500, new { error_code = "9999", error_msg = "系统异常", count = 0 }); } } /// /// 交易结算实时推送接口 /// /// 交易结算推送请求对象 /// 推送处理结果 [HttpPost("/api/unionpay/settlement/push")] public IActionResult SettlementPush([FromBody] UnionPaySettlementPushRequest pushRequest) { try { _logger.LogInformation("收到交易结算实时推送请求"); if (pushRequest == null) { _logger.LogError("推送请求数据为空"); return BadRequest(new { error_code = "400", error_msg = "参数错误", count = 0 }); } // 调用交易结算推送处理方法 var response = UnionPayTradeSettlementHelper.Instance.ProcessSettlementPush(pushRequest); // 返回处理结果 return Ok(response); } catch (Exception ex) { _logger.LogError(ex, "处理交易结算实时推送时发生异常"); return StatusCode(500, new { error_code = "9999", error_msg = "系统异常", count = 0 }); } } } }