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

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. class PaymentHandlerIdentifierSubscriber implements EventSubscriberInterface
  13. {
  14.     public static function getSubscribedEvents(): array
  15.     {
  16.         return [
  17.             PaymentEvents::PAYMENT_METHOD_LOADED_EVENT => 'formatHandlerIdentifier',
  18.         ];
  19.     }
  20.     public function formatHandlerIdentifier(EntityLoadedEvent $event): void
  21.     {
  22.         /** @var PaymentMethodEntity $entity */
  23.         foreach ($event->getEntities() as $entity) {
  24.             $this->setPaymentMethodHandlerRuntimeFields($entity);
  25.             $explodedHandlerIdentifier explode('\\'$entity->getHandlerIdentifier());
  26.             $last $explodedHandlerIdentifier[\count($explodedHandlerIdentifier) - 1];
  27.             $entity->setShortName((new CamelCaseToSnakeCaseNameConverter())->normalize($last));
  28.             if (\count($explodedHandlerIdentifier) < 2) {
  29.                 $entity->setFormattedHandlerIdentifier($entity->getHandlerIdentifier());
  30.                 continue;
  31.             }
  32.             /** @var string|null $firstHandlerIdentifier */
  33.             $firstHandlerIdentifier array_shift($explodedHandlerIdentifier);
  34.             $lastHandlerIdentifier array_pop($explodedHandlerIdentifier);
  35.             if ($firstHandlerIdentifier === null || $lastHandlerIdentifier === null) {
  36.                 continue;
  37.             }
  38.             $formattedHandlerIdentifier 'handler_'
  39.                 mb_strtolower($firstHandlerIdentifier)
  40.                 . '_'
  41.                 mb_strtolower($lastHandlerIdentifier);
  42.             $entity->setFormattedHandlerIdentifier($formattedHandlerIdentifier);
  43.         }
  44.     }
  45.     private function setPaymentMethodHandlerRuntimeFields(PaymentMethodEntity $paymentMethod): void
  46.     {
  47.         if ($paymentMethod->getAppPaymentMethod()) {
  48.             $this->setFieldsByAppPaymentMethod($paymentMethod);
  49.             return;
  50.         }
  51.         $handlerIdentifier $paymentMethod->getHandlerIdentifier();
  52.         if (\is_a($handlerIdentifierSynchronousPaymentHandlerInterface::class, true)) {
  53.             $paymentMethod->setSynchronous(true);
  54.         }
  55.         if (\is_a($handlerIdentifierAsynchronousPaymentHandlerInterface::class, true)) {
  56.             $paymentMethod->setAsynchronous(true);
  57.         }
  58.         if (\is_a($handlerIdentifierPreparedPaymentHandlerInterface::class, true)) {
  59.             $paymentMethod->setPrepared(true);
  60.         }
  61.         if (\is_a($handlerIdentifierRefundPaymentHandlerInterface::class, true)) {
  62.             $paymentMethod->setRefundable(true);
  63.         }
  64.     }
  65.     private function setFieldsByAppPaymentMethod(PaymentMethodEntity $paymentMethod): void
  66.     {
  67.         if (!$paymentMethod->getAppPaymentMethod()) {
  68.             return;
  69.         }
  70.         $appPaymentMethod $paymentMethod->getAppPaymentMethod();
  71.         if ($appPaymentMethod->getRefundUrl()) {
  72.             $paymentMethod->setRefundable(true);
  73.         }
  74.         if ($appPaymentMethod->getValidateUrl() && $appPaymentMethod->getCaptureUrl()) {
  75.             $paymentMethod->setPrepared(true);
  76.         }
  77.         if ($appPaymentMethod->getPayUrl() && $appPaymentMethod->getFinalizeUrl()) {
  78.             $paymentMethod->setAsynchronous(true);
  79.         }
  80.         if ($paymentMethod->isAsynchronous()) {
  81.             $paymentMethod->setSynchronous(true);
  82.         }
  83.     }
  84. }