app/Plugin/PayPalCheckout42/Controller/ShortcutPaypalCheckout/Guest/OrderingProductController.php line 82

Open in your IDE?
  1. <?php
  2. namespace Plugin\PayPalCheckout42\Controller\ShortcutPaypalCheckout\Guest;
  3. use Eccube\Entity\Customer;
  4. use Eccube\Entity\Order;
  5. use Eccube\Service\OrderHelper;
  6. use Exception;
  7. use Plugin\PayPalCheckout42\Controller\ShortcutPaypalCheckout\ShortcutPayPalCheckoutController;
  8. use Plugin\PayPalCheckout42\Exception\NotFoundCartException;
  9. use Plugin\PayPalCheckout42\Exception\OrderInitializationException;
  10. use Plugin\PayPalCheckout42\Exception\PayPalCheckoutException;
  11. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  17. /**
  18.  * Class OrderingProductController
  19.  * @package Plugin\PayPalCheckout42\Controller\ShortcutPaypalCheckout\Guest
  20.  */
  21. class OrderingProductController extends ShortcutPayPalCheckoutController
  22. {
  23.     /**
  24.      * 注文内容を更新する
  25.      * ショートカット決済で PayPal に遷移する前に呼ばれる
  26.      *
  27.      * @Method("POST")
  28.      * @Route("/guest/paypal/shortcut-prepare-transaction/{cart_key}", name="guest_paypal_shortcut_prepare_transaction", requirements={"cart_key" = "[a-zA-Z0-9]+[_][\x20-\x7E]+"})
  29.      * @param Request $request
  30.      * @param $cart_key
  31.      * @return JsonResponse
  32.      */
  33.     public function __invoke(Request $request$cart_key): JsonResponse
  34.     {
  35.         if (!($request->isXmlHttpRequest() && $this->isTokenValid())) {
  36.             return $this->json([], Response::HTTP_UNAUTHORIZED);
  37.         }
  38.         $this->logger->debug('CreateShortcutOrderRequest has been received', [
  39.             'headers' => $request->headers->all(),
  40.             'request' => $request->request->all()
  41.         ]);
  42.         try {
  43.             $this->lockCart($cart_key);
  44.         } catch (NotFoundCartException $e) {
  45.             return $this->json([], Response::HTTP_UNPROCESSABLE_ENTITY);
  46.         }
  47.         $this->logger->debug('Shopping cart has been locked.', [
  48.             'headers' => $request->headers->all(),
  49.             'request' => $request->request->all()
  50.         ]);
  51.         try {
  52.             $this->initializeCustomer($this->generateDummyUser());
  53.         } catch (Exception $e) {
  54.             return $this->json([], Response::HTTP_FORBIDDEN);
  55.         }
  56.         try {
  57.             $this->initializeOrder($this->cartPurchaseFlow);
  58.         } catch (OrderInitializationException $e) {
  59.             return $this->json([], Response::HTTP_FORBIDDEN);
  60.         }
  61.         $this->logger->debug('Shipping order has been initialized.', [
  62.             'headers' => $request->headers->all(),
  63.             'request' => $request->request->all()
  64.         ]);
  65.         try {
  66.             /** @var Order $order */
  67.             $order $this->paypal->getShippingOrder();
  68.             $this->paypal->createOrderRequest($order, function ($response) use (&$orderingId, &$statusCode) {
  69.                 $orderingId $response->result->id;
  70.                 $statusCode $response->statusCode;
  71.                 $this->paypal->saveShortcutPayPalCheckoutToken($orderingId);
  72.             }, false);
  73.             /** @var array $data */
  74.             $data = [
  75.                 "result" => [
  76.                     "id" => $orderingId
  77.                 ]
  78.             ];
  79.             $this->logger->debug('CreateShortcutOrderRequest has been completed', [
  80.                 'response' => $data
  81.             ]);
  82.             return $this->json($data$statusCode);
  83.         } catch (PayPalCheckoutException $e) {
  84.             $this->logger->error('CreateShortcutOrderRequest has been failed'array_merge([
  85.                 'headers' => $request->headers->all(),
  86.                 'request' => $request->request->all(),
  87.                 'statusCode' => $e->getCode(),
  88.                 'message' => $e->getMessage(),
  89.             ], $this->paypal->isDebug() ? [
  90.                 'trace' => $e->getTrace()
  91.             ] : []));
  92.             throw new BadRequestHttpException("CreateShortcutOrderRequest has been failed"$e$e->getCode());
  93.         } finally {
  94.             $this->session->remove(OrderHelper::SESSION_NON_MEMBER);
  95.             $this->session->remove(OrderHelper::SESSION_NON_MEMBER_ADDRESSES);
  96.         }
  97.     }
  98.     /**
  99.      * @return Customer
  100.      */
  101.     private function generateDummyUser(): Customer
  102.     {
  103.         $data = [
  104.             'name01' => '',
  105.             'name02' => '',
  106.             'kana01' => '',
  107.             'kana02' => '',
  108.             'company_name' => null,
  109.             'postal_code' => '',
  110.             'pref' => $this->prefRepository->find(1),
  111.             'addr01' => '',
  112.             'addr02' => '',
  113.             'phone_number' => '',
  114.             'email' => ''
  115.         ];
  116.         /** @var Customer $dummyCustomer */
  117.         $dummyCustomer = new Customer();
  118.         $dummyCustomer
  119.             ->setName01($data['name01'])
  120.             ->setName02($data['name02'])
  121.             ->setKana01($data['kana01'])
  122.             ->setKana02($data['kana02'])
  123.             ->setCompanyName($data['company_name'])
  124.             ->setEmail($data['email'])
  125.             ->setPhonenumber($data['phone_number'])
  126.             ->setPostalcode($data['postal_code'])
  127.             ->setPref($data['pref'])
  128.             ->setAddr01($data['addr01'])
  129.             ->setAddr02($data['addr02']);
  130.         return $dummyCustomer;
  131.     }
  132. }