<?php
namespace App\Service\PaymentSystem\Listener;
use App\Controller\Merchant\Payment\Common\AbstractNotificationController;
use App\DTO\PaymentSystem\Config\TwocheckoutPaymentSystemConfigDTO;
use App\Service\App\Merchant\Payment\Contract\IGetPaymentInfoByReferenceIdService;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use App\Core\Exception\NotFoundException;
class TwocheckoutListener
{
/**
* @var IGetPaymentInfoByReferenceIdService
*/
private IGetPaymentInfoByReferenceIdService $paymentInfoByReferenceIdService;
/**
* TwocheckoutListener constructor.
* @param IGetPaymentInfoByReferenceIdService $paymentInfoByReferenceIdService
*/
public function __construct(IGetPaymentInfoByReferenceIdService $paymentInfoByReferenceIdService)
{
$this->paymentInfoByReferenceIdService = $paymentInfoByReferenceIdService;
}
/**
* @param ControllerEvent $event
* @throws NotFoundException
*/
public function onKernelController(ControllerEvent $event)
{
$controller = $event->getController();
if (is_array($controller)) {
$controller = $controller[0];
}
if (!($controller instanceof AbstractNotificationController)) {
return;
}
if ($event->getRequest()->get('paymentSystem') !== TwocheckoutPaymentSystemConfigDTO::PAYMENT_SYSTEM_KEY) {
return;
}
$ref = $event->getRequest()->get('merchant_order_id');
if (!$ref) {
return;
}
$payment = $this->paymentInfoByReferenceIdService->perform($ref);
if ($payment) {
$event->getRequest()->attributes->set('orderId', $payment->getId());
}
}
}