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

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