custom/plugins/UnzerPayment6/src/Controllers/Storefront/UnzerCheckoutController.php line 34

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace UnzerPayment6\Controllers\Storefront;
  4. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  5. use Shopware\Core\Framework\Validation\DataBag\RequestDataBag;
  6. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  7. use Shopware\Storefront\Controller\CheckoutController;
  8. use Shopware\Storefront\Controller\StorefrontController;
  9. use Shopware\Storefront\Page\Checkout\Finish\CheckoutFinishPageLoader;
  10. use Symfony\Component\HttpFoundation\Request;
  11. use Symfony\Component\HttpFoundation\Response;
  12. use UnzerPayment6\Components\PaymentHandler\Exception\UnzerPaymentProcessException;
  13. /**
  14.  * @RouteScope(scopes={"storefront"})
  15.  */
  16. class UnzerCheckoutController extends StorefrontController
  17. {
  18.     protected CheckoutController $innerService;
  19.     private CheckoutFinishPageLoader $finishPageLoader;
  20.     public function __construct(
  21.         CheckoutController $innerService,
  22.         CheckoutFinishPageLoader $finishPageLoader
  23.     ) {
  24.         $this->innerService     $innerService;
  25.         $this->finishPageLoader $finishPageLoader;
  26.     }
  27.     public function cartPage(Request $requestSalesChannelContext $context): Response
  28.     {
  29.         return $this->innerService->cartPage($request$context);
  30.     }
  31.     public function confirmPage(Request $requestSalesChannelContext $context): Response
  32.     {
  33.         return $this->innerService->confirmPage($request$context);
  34.     }
  35.     public function info(Request $requestSalesChannelContext $context): Response
  36.     {
  37.         return $this->innerService->info($request$context);
  38.     }
  39.     public function offcanvas(Request $requestSalesChannelContext $context): Response
  40.     {
  41.         return $this->innerService->offcanvas($request$context);
  42.     }
  43.     public function order(RequestDataBag $dataSalesChannelContext $contextRequest $request): Response
  44.     {
  45.         try {
  46.             return $this->innerService->order($data$context$request);
  47.         } catch (UnzerPaymentProcessException $apiException) {
  48.             return $this->forwardToRoute(
  49.                 'frontend.checkout.finish.page',
  50.                 [
  51.                     'orderId'                      => $apiException->getOrderId(),
  52.                     'changedPayment'               => false,
  53.                     'paymentFailed'                => true,
  54.                     'unzerPaymentExceptionMessage' => $apiException->getClientMessage(),
  55.                 ]
  56.             );
  57.         }
  58.     }
  59.     public function finishPage(Request $requestSalesChannelContext $context, ?RequestDataBag $dataBag null): Response
  60.     {
  61.         if (!$context->getCustomer()) {
  62.             return $this->redirectToRoute('frontend.checkout.register.page');
  63.         }
  64.         $unzerPaymentExceptionMessage $request->get('unzerPaymentExceptionMessage''');
  65.         if ($request->get('paymentFailed'false) === true && !empty($unzerPaymentExceptionMessage)) {
  66.             $page $this->finishPageLoader->load($request$context);
  67.             $this->addFlash(
  68.                 'danger',
  69.                 sprintf(
  70.                     '%s %s',
  71.                     $unzerPaymentExceptionMessage,
  72.                     $this->trans(
  73.                         'UnzerPayment.finishPaymentFailed',
  74.                         [
  75.                             '%editOrderUrl%' => $this->generateUrl(
  76.                                 'frontend.account.edit-order.page',
  77.                                 ['orderId' => $request->get('orderId')]
  78.                             ),
  79.                         ]
  80.                     )
  81.                 )
  82.             );
  83.             return $this->renderStorefront(
  84.                 '@Storefront/storefront/page/checkout/finish/index.html.twig',
  85.                 ['page' => $page]
  86.             );
  87.         }
  88.         return $this->innerService->finishPage($request$context$dataBag);
  89.     }
  90. }