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

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