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 });
}
}
}
}