vendor/shopware/core/Checkout/Payment/DataAbstractionLayer/PaymentHandlerIdentifierSubscriber.php line 27

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Shopware\Core\Checkout\Payment\DataAbstractionLayer;
  3. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\AsynchronousPaymentHandlerInterface;
  4. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\PreparedPaymentHandlerInterface;
  5. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\RefundPaymentHandlerInterface;
  6. use Shopware\Core\Checkout\Payment\Cart\PaymentHandler\SynchronousPaymentHandlerInterface;
  7. use Shopware\Core\Checkout\Payment\PaymentEvents;
  8. use Shopware\Core\Checkout\Payment\PaymentMethodEntity;
  9. use Shopware\Core\Framework\DataAbstractionLayer\Event\EntityLoadedEvent;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\Serializer\NameConverter\CamelCaseToSnakeCaseNameConverter;
  12. /**
  13.  * @deprecated tag:v6.5.0 - reason:becomes-internal - EventSubscribers will become internal in v6.5.0
  14.  */
  15. class PaymentHandlerIdentifierSubscriber implements EventSubscriberInterface
  16. {
  17.     public static function getSubscribedEvents(): array
  18.     {
  19.         return [
  20.             PaymentEvents::PAYMENT_METHOD_LOADED_EVENT => 'formatHandlerIdentifier',
  21.         ];
  22.     }
  23.     public function formatHandlerIdentifier(EntityLoadedEvent $event): void
  24.     {
  25.         /** @var PaymentMethodEntity $entity */
  26.         foreach ($event->getEntities() as $entity) {
  27.             $this->setPaymentMethodHandlerRuntimeFields($entity);
  28.             $explodedHandlerIdentifier explode('\\'$entity->getHandlerIdentifier());
  29.             $last $explodedHandlerIdentifier[\count($explodedHandlerIdentifier) - 1];
  30.             $entity->setShortName((new CamelCaseToSnakeCaseNameConverter())->normalize($last));
  31.             if (\count($explodedHandlerIdentifier) < 2) {
  32.                 $entity->setFormattedHandlerIdentifier($entity->getHandlerIdentifier());
  33.                 continue;
  34.             }
  35.             /** @var string|null $firstHandlerIdentifier */
  36.             $firstHandlerIdentifier array_shift($explodedHandlerIdentifier);
  37.             $lastHandlerIdentifier array_pop($explodedHandlerIdentifier);
  38.             if ($firstHandlerIdentifier === null || $lastHandlerIdentifier === null) {
  39.                 continue;
  40.             }
  41.             $formattedHandlerIdentifier 'handler_'
  42.                 mb_strtolower($firstHandlerIdentifier)
  43.                 . '_'
  44.                 mb_strtolower($lastHandlerIdentifier);
  45.             $entity->setFormattedHandlerIdentifier($formattedHandlerIdentifier);
  46.         }
  47.     }
  48.     private function setPaymentMethodHandlerRuntimeFields(PaymentMethodEntity $paymentMethod): void
  49.     {
  50.         if ($paymentMethod->getAppPaymentMethod()) {
  51.             $this->setFieldsByAppPaymentMethod($paymentMethod);
  52.             return;
  53.         }
  54.         $handlerIdentifier $paymentMethod->getHandlerIdentifier();
  55.         if (\is_a($handlerIdentifierSynchronousPaymentHandlerInterface::class, true)) {
  56.             $paymentMethod->setSynchronous(true);
  57.         }
  58.         if (\is_a($handlerIdentifierAsynchronousPaymentHandlerInterface::class, true)) {
  59.             $paymentMethod->setAsynchronous(true);
  60.         }
  61.         if (\is_a($handlerIdentifierPreparedPaymentHandlerInterface::class, true)) {
  62.             $paymentMethod->setPrepared(true);
  63.         }
  64.         if (\is_a($handlerIdentifierRefundPaymentHandlerInterface::class, true)) {
  65.             $paymentMethod->setRefundable(true);
  66.         }
  67.     }
  68.     private function setFieldsByAppPaymentMethod(PaymentMethodEntity $paymentMethod): void
  69.     {
  70.         if (!$paymentMethod->getAppPaymentMethod()) {
  71.             return;
  72.         }
  73.         $appPaymentMethod $paymentMethod->getAppPaymentMethod();
  74.         if ($appPaymentMethod->getRefundUrl()) {
  75.             $paymentMethod->setRefundable(true);
  76.         }
  77.         if ($appPaymentMethod->getValidateUrl() && $appPaymentMethod->getCaptureUrl()) {
  78.             $paymentMethod->setPrepared(true);
  79.         }
  80.         if ($appPaymentMethod->getPayUrl() && $appPaymentMethod->getFinalizeUrl()) {
  81.             $paymentMethod->setAsynchronous(true);
  82.         }
  83.         if ($paymentMethod->isAsynchronous()) {
  84.             $paymentMethod->setSynchronous(true);
  85.         }
  86.     }
  87. }