custom/plugins/RpayPayments/src/Components/RatepayApi/Subscriber/PaymentRequestSubscriber.php line 45

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4.  * Copyright (c) Ratepay GmbH
  5.  *
  6.  * For the full copyright and license information, please view the LICENSE
  7.  * file that was distributed with this source code.
  8.  */
  9. namespace Ratepay\RpayPayments\Components\RatepayApi\Subscriber;
  10. use RatePAY\Model\Response\PaymentRequest;
  11. use Ratepay\RpayPayments\Components\Checkout\Service\ExtensionService;
  12. use Ratepay\RpayPayments\Components\RatepayApi\Dto\OrderOperationData;
  13. use Ratepay\RpayPayments\Components\RatepayApi\Dto\PaymentRequestData;
  14. use Ratepay\RpayPayments\Components\RatepayApi\Event\ResponseEvent;
  15. use Ratepay\RpayPayments\Components\RatepayApi\Service\Request\PaymentRequestService;
  16. use Ratepay\RpayPayments\Components\RatepayApi\Service\TransactionIdService;
  17. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  18. class PaymentRequestSubscriber implements EventSubscriberInterface
  19. {
  20.     private ExtensionService $extensionService;
  21.     private TransactionIdService $transactionIdService;
  22.     public function __construct(
  23.         TransactionIdService $transactionIdService,
  24.         ExtensionService $extensionService
  25.     ) {
  26.         $this->transactionIdService $transactionIdService;
  27.         $this->extensionService $extensionService;
  28.     }
  29.     public static function getSubscribedEvents(): array
  30.     {
  31.         return [
  32.             PaymentRequestService::EVENT_SUCCESSFUL => 'onSuccess',
  33.             PaymentRequestService::EVENT_FAILED => 'onFailure',
  34.         ];
  35.     }
  36.     public function onFailure(ResponseEvent $requestEvent): void
  37.     {
  38.         /** @var PaymentRequestData $requestData */
  39.         $requestData $requestEvent->getRequestData();
  40.         $this->transactionIdService->deleteTransactionId($requestData->getRatepayTransactionId(), $requestData->getContext());
  41.         /** @var PaymentRequest $responseModel */
  42.         $responseModel $requestEvent->getRequestBuilder()->getResponse();
  43.         $this->extensionService->createOrderExtensionEntity(
  44.             $requestData,
  45.             $responseModel->getTransactionId(),
  46.             $responseModel->getDescriptor(),
  47.             false
  48.         );
  49.     }
  50.     public function onSuccess(ResponseEvent $requestEvent): void
  51.     {
  52.         /** @var PaymentRequestData $requestData */
  53.         $requestData $requestEvent->getRequestData();
  54.         $this->transactionIdService->deleteTransactionId($requestData->getRatepayTransactionId(), $requestData->getContext());
  55.         /** @var PaymentRequest $responseModel */
  56.         $responseModel $requestEvent->getRequestBuilder()->getResponse();
  57.         $orderItems $requestData->getOrder()->getLineItems();
  58.         $lineItems = [];
  59.         foreach (array_keys($requestData->getItems()) as $id) {
  60.             if ($id !== OrderOperationData::ITEM_ID_SHIPPING) {
  61.                 // shipping will written into the order-extension
  62.                 $lineItems[] = $orderItems->get($id);
  63.             }
  64.         }
  65.         $this->extensionService->createLineItemExtensionEntities($lineItems$requestData->getContext());
  66.         $this->extensionService->createOrderExtensionEntity(
  67.             $requestData,
  68.             $responseModel->getTransactionId(),
  69.             $responseModel->getDescriptor(),
  70.             true
  71.         );
  72.     }
  73. }