custom/plugins/NetsCheckout/src/Subscriber/CheckoutConfirmPageSubscriber.php line 70

Open in your IDE?
  1. <?php
  2. namespace Nets\Checkout\Subscriber;
  3. use Nets\Checkout\Service\Easy\Api\Exception\EasyApiException;
  4. use Nets\Checkout\Service\Easy\Api\TransactionDetailsStruct;
  5. use Shopware\Core\Framework\Context;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  7. use Shopware\Core\System\Language\LanguageEntity;
  8. use Shopware\Storefront\Page\Checkout\Confirm\CheckoutConfirmPageLoadedEvent;
  9. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  10. use Nets\Checkout\Service\ConfigService;
  11. use Nets\Checkout\Service\Easy\CheckoutService;
  12. use Symfony\Component\HttpFoundation\Session\Session;
  13. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  14. class CheckoutConfirmPageSubscriber implements EventSubscriberInterface
  15. {
  16.     /**
  17.      * @var ConfigService
  18.      */
  19.     private $configService;
  20.     /**
  21.      * @var CheckoutService
  22.      */
  23.     private $checkoutService;
  24.     /**
  25.      * @var Session
  26.      */
  27.     private $session;
  28.     /**
  29.      * @var EntityRepositoryInterface
  30.      */
  31.     private $languageRepository;
  32.     /**
  33.      * CheckoutConfirmPageSubscriber constructor.
  34.      * @param ConfigService $configService
  35.      * @param CheckoutService $checkoutService
  36.      * @param Session $session
  37.      * @param EntityRepositoryInterface $languageRepository
  38.      */
  39.     public function __construct(ConfigService $configService,
  40.                                 CheckoutService $checkoutService,
  41.                                 Session $sessionEntityRepositoryInterface $languageRepository)
  42.     {
  43.         $this->configService $configService;
  44.         $this->checkoutService $checkoutService;
  45.         $this->session $session;
  46.         $this->languageRepository $languageRepository;
  47.     }
  48.     /**
  49.      * @return array|string[]
  50.      */
  51.     public static function getSubscribedEvents() : array
  52.     {
  53.         return [
  54.             CheckoutConfirmPageLoadedEvent::class => 'onCheckoutConfirmLoaded'
  55.         ];
  56.     }
  57.     /**
  58.      * @param CheckoutConfirmPageLoadedEvent $event
  59.      */
  60.     public function onCheckoutConfirmLoaded(CheckoutConfirmPageLoadedEvent $event): void
  61.     {
  62.         $salesChannelContext $event->getSalesChannelContext();
  63.         $paymentMethod $salesChannelContext->getPaymentMethod();
  64.         $salesChannelContextId $salesChannelContext->getSalesChannel()->getId();
  65.         $checkoutType $this->configService->getCheckoutType($salesChannelContextId);
  66.         if ($paymentMethod->getHandlerIdentifier() == 'Nets\Checkout\Service\Checkout' &&
  67.             $checkoutType == $this->checkoutService::CHECKOUT_TYPE_EMBEDDED) {
  68.             try {
  69.                 $paymentId json_decode($this->checkoutService->createPayment($salesChannelContext), true);
  70.                 $paymentId $paymentId['paymentId'];
  71.             } catch (EasyApiException $ex) {
  72.                 if($ex->getResponseErrors()) {
  73.                     foreach ($ex->getResponseErrors() as $error ) {
  74.                         $this->session->getFlashBag()->add('danger'$error);
  75.                     }
  76.                 }
  77.                 // we still want payment window to be showed
  78.                 $paymentId null;
  79.             }
  80.             $customerLanguage $this->getCustomerLanguage($salesChannelContext->getContext());
  81.             switch($customerLanguage) {
  82.                 case 'de':
  83.                     $checkoutLanguage 'de-DE';
  84.                     break;
  85.                 case 'da':
  86.                     $checkoutLanguage 'da-DK';
  87.                     break;
  88.                 case 'sv':
  89.                     $checkoutLanguage 'sv-SE';
  90.                     break;
  91.                 case 'nb':
  92.                     $checkoutLanguage 'nb-NO';
  93.                     break;
  94.                 default:
  95.                     $checkoutLanguage 'en-GB';
  96.             }
  97.             $variablesStruct = new TransactionDetailsStruct();
  98.             $easyCheckoutIsActive $paymentMethod->getHandlerIdentifier() == 'Nets\Checkout\Service\Checkout' 0;
  99.             $environment $this->configService->getEnvironment($salesChannelContextId);
  100.             $easyCheckoutJsAsset 'test' == $environment $this->checkoutService::EASY_CHECKOUT_JS_ASSET_TEST :
  101.                                              $this->checkoutService::EASY_CHECKOUT_JS_ASSET_LIVE;
  102.             $templateVars = ['checkoutKey' => $this->configService->getCheckoutKey($salesChannelContextId),
  103.                 'environment' => $environment,
  104.                 'paymentId' => $paymentId,
  105.                 'checkoutType' => $this->configService->getCheckoutType($salesChannelContextId),
  106.                 'easy_checkout_is_active' => $easyCheckoutIsActive,
  107.                 'place_order_url' => $event->getRequest()->getUriForPath('/nets/order/finish'),
  108.                 'easy_checkout_ja_asset' => $easyCheckoutJsAsset,
  109.                 'language' => $checkoutLanguage
  110.             ];
  111.             $variablesStruct->assign($templateVars);
  112.             $event->getPage()->addExtension('easy_checkout_variables'$variablesStruct);
  113.         }
  114.     }
  115.     private function getCustomerLanguage(Context $context): string
  116.     {
  117.         $languages $context->getLanguageId();
  118.         $criteria  = new Criteria([$languages]);
  119.         $criteria->addAssociation('locale');
  120.         /** @var null|LanguageEntity $language */
  121.         $language $this->languageRepository->search($criteria$context)->first();
  122.         if (null === $language || null === $language->getLocale()) {
  123.             return 'en';
  124.         }
  125.         return substr($language->getLocale()->getCode(), 02);
  126.     }
  127. }