src/CoreBundle/Controller/PaypalPlusPaymentController.php line 96

Open in your IDE?
  1. <?php
  2. namespace CoreBundle\Controller;
  3. use CoreBundle\Ecommerce\Payment\Paypal\ConfirmationMailTrait;
  4. use CoreBundle\Ecommerce\Payment\Paypal\PaypalAuthCredentialsTrait;
  5. use CoreBundle\Ecommerce\Payment\Paypal\PaypalCreatePaymentTrait;
  6. use CoreBundle\Ecommerce\Payment\Paypal\PaypalExecutePaymentTrait;
  7. use Pimcore\Bundle\EcommerceFrameworkBundle\Exception\UnsupportedException;
  8. use CoreBundle\Services\CartProductStockChecker;
  9. use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;
  10. use Pimcore\Localization\IntlFormatter;
  11. use Pimcore\Localization\LocaleService;
  12. use Pimcore\Log\ApplicationLogger;
  13. use Pimcore\Model\DataObject\OnlineShopOrder;
  14. use Pimcore\Model\Site;
  15. use Symfony\Component\HttpFoundation\Request;
  16. use Symfony\Component\HttpFoundation\Response;
  17. use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
  18. class PaypalPlusPaymentController extends AbstractCartAware
  19. {
  20.     use PaypalAuthCredentialsTrait,
  21.         PaypalCreatePaymentTrait,
  22.         PaypalExecutePaymentTrait,
  23.         ConfirmationMailTrait;
  24.     /**
  25.      * @var ApplicationLogger
  26.      */
  27.     private $logger;
  28.     /**
  29.      * @var string $bundleName
  30.      */
  31.     public $bundleName;
  32.     /**
  33.      * @inheritDoc
  34.      */
  35.     public function __construct(ApplicationLogger $logger)
  36.     {
  37.         $this->logger $logger;
  38.         $this->bundleName Site::getCurrentSite()->getRootDocument()->getModule();
  39.     }
  40.     /**
  41.      * @param FilterControllerEvent $event
  42.      */
  43.     public function onKernelController(FilterControllerEvent $event)
  44.     {
  45.         parent::onKernelController($event);
  46.         $cart $this->getCart();
  47.         $this->view->cart $cart;
  48.     }
  49.     public function createAction()
  50.     {
  51.         $response $this->createPayment();
  52.         $this->addResponseHeader('Content-Type''application/json');
  53.         $this->disableViewAutoRender();
  54.         return new Response($response);
  55.     }
  56.     public function executeAction(Request $request)
  57.     {
  58.         $response $this->executePayment($request->get('paymentID'), $request->get('payerID'));
  59.         $this->disableViewAutoRender();
  60.         return new Response(json_encode($response));
  61.     }
  62.     public function paymentAction(Request $request)
  63.     {
  64.         $cart $this->getCart();
  65.         /** @var CartProductStockChecker $cartProductStockChecker */
  66.         $cartProductStockChecker $this->get('core.cart_product_stock_checker');
  67.         $messages $cartProductStockChecker->checkStockOfProductinCart($cartfalse);
  68.         if (count($messages) > 0) {
  69.             $this->addFlash('error'$messages);
  70.             return $this->redirect($this->generateUrl('shopHandlerCart', ['action' => 'list']));
  71.         }
  72.         $this->view->currentStep 'payment';
  73.         $checkoutManager Factory::getInstance()->getCheckoutManager($cart);
  74.         $confirmStep $checkoutManager->getCheckoutStep('confirm');
  75.         $paymentStep $checkoutManager->getCheckoutStep('payment');
  76.         $trackingManager Factory::getInstance()->getTrackingManager();
  77.         $trackingManager->trackCheckoutStep($confirmStep$cart2);
  78.         $checkoutManager->commitStep($confirmStep$cart);
  79.         $trackingManager->trackCheckoutStep($paymentStep$cart3);
  80.         $shippingAddress $checkoutManager->getCheckoutStep('deliveryaddress');
  81.         $this->view->shippingAddress $shippingAddress->getData();
  82.         $this->view->editBillingShippingUrl $this->generateUrl('shopHandlerCheckout', ['action' => 'delivery''mode' => 'edit']);
  83.         $this->view->cart $cart;
  84.         CheckoutController::logStepData($request->getClientIp(), $paymentStep$cart);
  85.         $checkoutManager->commitStep($paymentStep$cart);
  86.         $createPayment $this->createPayment();
  87.         if (is_array($createPayment) && $createPayment['status'] == 2) {
  88.             $errorMessage '[' $this->bundleName ']: ' $createPayment['message'];
  89.             $this->logger->error($errorMessage, ['component' => 'Payment']);
  90.         }
  91.         $this->view->cartUrl $this->generateUrl('shopHandlerCart', ['action' => 'list']);
  92.         $total $cart->getPriceCalculator()->getGrandTotal()->getGrossAmount()->asNumeric();
  93.         if ($total == 0) {
  94.             $this->view->approvalUrl '';
  95.             $this->view->returnUrl $this->generateUrl('shopHandlerPayment', ['action' => 'donewithoutpayment']);
  96.         } else {
  97.             CheckoutController::logStepData($request->getClientIp(), 'approvalUrl'$createPayment->links[1]->href);
  98.             $this->view->approvalUrl $createPayment->links[1]->href;
  99.         }
  100.     }
  101.     public function doneAction(Request $requestApplicationLogger $logger)
  102.     {
  103.         $response $this->executePayment($request->get('paymentId'), $request->get('PayerID'));
  104.         if ($response['status'] == 1) {
  105.             $this->view->currentStep 'completed';
  106.             CheckoutController::logStepData($request->getClientIp(), 'completed'$response);
  107.             $this->view->order OnlineShopOrder::getByOrdernumber($response['sale_id'], 1);
  108.             return $this->render('Checkout/completed.html.twig'$this->view->getAllParameters());
  109.         }
  110.         $errorMessage '[' $this->bundleName ']: ' $response['message'];
  111.         $logger->error($errorMessage, ['component' => 'Payment']);
  112.         return $this->render('Payment/payment.html.twig');
  113.     }
  114.      /**
  115.      * @return Response
  116.      * @throws UnsupportedException
  117.      */
  118.     public function doneWithoutPaymentAction() :Response
  119.     {
  120.         $cart $this->getCart();
  121.         $total $cart->getPriceCalculator()->getGrandTotal()->getGrossAmount()->asNumeric();
  122.            if (!is_null($cart) && $total == 0) {
  123.              $orderCompleteService $this->get('core.payment_save_order_send_email');
  124.              $orderCompleteService->saveOrder($cart);
  125.              $this->view->currentStep 'completed';
  126.              return $this->render('Checkout/completed.html.twig'$this->view->getAllParameters());
  127.         }
  128.         $errorMessage '[' $this->bundleName ']: Your cart doesnt exist or total is not 0';
  129.         $this->logger->error($errorMessage, ['component' => 'Payment']);
  130.         return $this->render('Payment/payment.html.twig');
  131.     }
  132. }