<?php
namespace App\Service\PaymentSystem\Listener;
use App\Controller\Merchant\Payment\Common\AbstractNotificationController;
use App\DTO\PaymentSystem\Config\ECPayPaymentSystemConfigDTO;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
class ECPayListener
{
/**
* Override response to '1|OK' for ecpay
*
* @var bool
*/
private bool $overrideResponse = false;
/**
* Before controller starts detect order id in case it is stripe payment processor
*
* @param ControllerEvent $event
*/
public function onKernelController(ControllerEvent $event)
{
$this->overrideResponse = false;
$controller = $event->getController();
if (is_array($controller)) {
$controller = $controller[0];
}
if (!($controller instanceof AbstractNotificationController)) {
return;
}
if ($event->getRequest()->get('paymentSystem') !== ECPayPaymentSystemConfigDTO::PAYMENT_SYSTEM_KEY) {
return;
}
$this->overrideResponse = true;
}
/**
* On response
*
* @param ResponseEvent $event
*/
public function onResponse(ResponseEvent $event): void
{
if ($this->overrideResponse) {
$event->setResponse(new Response('1|OK'));
}
}
}