109 lines
4.8 KiB
C#
109 lines
4.8 KiB
C#
using Marco.Pms.Model.Dtos.PaymentGetway;
|
|
using Marco.Pms.Model.Utilities;
|
|
using Marco.Pms.Services.Service.ServiceInterfaces;
|
|
using MarcoBMS.Services.Helpers;
|
|
using MarcoBMS.Services.Service;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace Marco.Pms.Services.Controllers
|
|
{
|
|
[Route("api/[controller]")]
|
|
[ApiController]
|
|
public class PaymentController : ControllerBase
|
|
{
|
|
private readonly UserHelper _userHelper;
|
|
private readonly ILoggingService _logger;
|
|
private readonly IRazorpayService _razorpayService;
|
|
private readonly Guid tenantId;
|
|
private readonly Guid organizaionId;
|
|
public PaymentController(UserHelper userHelper, ILoggingService logger, IRazorpayService razorpayService)
|
|
{
|
|
_userHelper = userHelper;
|
|
_logger = logger;
|
|
_razorpayService = razorpayService;
|
|
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 = _razorpayService.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 async Task<IActionResult> VerifyPayment([FromBody] PaymentVerificationRequest request)
|
|
{
|
|
try
|
|
{
|
|
_logger.LogInfo("Payment verification started for OrderId: {OrderId}, PaymentId: {PaymentId}",
|
|
request.OrderId ?? "", request.PaymentId ?? "");
|
|
|
|
// Validate request
|
|
if (string.IsNullOrEmpty(request.OrderId) || string.IsNullOrEmpty(request.PaymentId) || string.IsNullOrEmpty(request.Signature))
|
|
{
|
|
_logger.LogWarning("Payment verification failed - Missing required parameters");
|
|
return BadRequest(ApiResponse<object>.ErrorResponse("Missing required parameters", 400));
|
|
}
|
|
|
|
// Verify signature
|
|
string payload = request.OrderId + "|" + request.PaymentId;
|
|
string actualSignature = request.Signature;
|
|
string expectedSignature = _razorpayService.GetExpectedSignature(payload);
|
|
|
|
if (actualSignature == expectedSignature)
|
|
{
|
|
_logger.LogInfo("Payment signature verified successfully for OrderId: {OrderId}", request.OrderId);
|
|
|
|
// Fetch complete payment details from Razorpay including card details
|
|
var response = await _razorpayService.GetPaymentDetails(request.PaymentId);
|
|
|
|
_logger.LogInfo("Invoice generated and saved for OrderId: {OrderId}", request.OrderId);
|
|
|
|
return Ok(ApiResponse<object>.SuccessResponse(response, "Payment verified successfully", 200));
|
|
}
|
|
else
|
|
{
|
|
_logger.LogWarning("Payment signature verification failed for OrderId: {OrderId}", request.OrderId);
|
|
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid signature - Payment verification failed", "Invalid signature - Payment verification failed", 400));
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Error during payment verification for OrderId: {OrderId}", request.OrderId ?? "");
|
|
return StatusCode(500, ApiResponse<object>.ErrorResponse("An error occurred during payment verification", "An error occurred during payment verification", 500));
|
|
}
|
|
}
|
|
|
|
[HttpGet("get/payment-details/{id}")]
|
|
public async Task<IActionResult> GetPaymentDetails(Guid id)
|
|
{
|
|
var paymentsDetails = await _razorpayService.GetPaymentDetailsFromDataBase(id);
|
|
return Ok(ApiResponse<object>.SuccessResponse(paymentsDetails, "Payment fetched Successfully", 200));
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|