72 lines
2.6 KiB
C#

using Marco.Pms.Model.Dtos.PaymentGetway;
using Marco.Pms.Model.Utilities;
using Marco.Pms.Services.Helpers;
using MarcoBMS.Services.Helpers;
using Microsoft.AspNetCore.Mvc;
namespace Marco.Pms.Services.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class PaymentController : ControllerBase
{
private readonly UserHelper _userHelper;
private readonly PaymentHelper _paymentHelper;
private readonly Guid tenantId;
private readonly Guid organizaionId;
public PaymentController(UserHelper userHelper, PaymentHelper paymentHelper)
{
_userHelper = userHelper;
_paymentHelper = paymentHelper;
tenantId = userHelper.GetTenantId();
organizaionId = userHelper.GetCurrentOrganizationId();
}
[HttpPost("create-order")]
public async Task<IActionResult> CreateOrder([FromBody] CreateOrderDto model)
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
try
{
var response = _paymentHelper.CreateOrder(model.Amount, loggedInEmployee, tenantId);
return Ok(ApiResponse<object>.SuccessResponse(response, "Payment created successfully", 200));
}
catch (Exception ex)
{
return StatusCode(500, ApiResponse<object>.ErrorResponse("Error occured While creating the payment", new
{
Message = ex.Message,
StackTrace = ex.StackTrace,
Source = ex.Source,
InnerException = new
{
Message = ex.InnerException?.Message,
StackTrace = ex.InnerException?.StackTrace,
Source = ex.InnerException?.Source,
}
}, 500));
}
}
[HttpPost("verify-payment")]
public IActionResult VerifyPayment([FromBody] PaymentVerificationRequest request)
{
string payload = request.OrderId + "|" + request.PaymentId;
string actualSignature = request.Signature ?? "";
string expectedSignature = _paymentHelper.GetExpectedSignature(payload);
if (actualSignature == expectedSignature)
{
// Payment is verified, process accordingly e.g. update tenant payment details
return Ok(new { status = "success" });
}
else
{
return BadRequest(new { status = "failure", message = "Invalid signature" });
}
}
}
}