app/Customize/Controller/TopController.php line 62

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.ec-cube.co.jp/
  8.  *
  9.  * For the full copyright and license information, please view the LICENSE
  10.  * file that was distributed with this source code.
  11.  */
  12. namespace Customize\Controller;
  13. use Eccube\Entity\Master\CustomerStatus;
  14. use Eccube\Entity\Master\Sex;
  15. use Eccube\Repository\CartRepository;
  16. use Eccube\Repository\Master\CustomerStatusRepository;
  17. use Eccube\Repository\Master\PrefRepository;
  18. use Eccube\Security\Core\Encoder\PasswordEncoder;
  19. use Eccube\Service\OrderHelper;
  20. use Eccube\Service\SystemService;
  21. use Firebase\JWT\JWT;
  22. use Firebase\JWT\Key;
  23. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  24. use Symfony\Component\HttpFoundation\JsonResponse;
  25. use Symfony\Component\Routing\Annotation\Route;
  26. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  27. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  28. use Eccube\Repository\CustomerRepository;
  29. use Eccube\Repository\OrderRepository;
  30. use Symfony\Component\HttpFoundation\Request;
  31. use Eccube\Controller\AbstractController;
  32. use Eccube\Entity\Master\OrderStatus;
  33. use Eccube\Entity\Customer;
  34. use Eccube\Service\MailService;
  35. use Doctrine\ORM\EntityManagerInterface;
  36. class TopController extends AbstractController
  37. {
  38.     private $keyJwt '4UEX8^j8G|CFz]fzV[';
  39.     protected $mailService;
  40.     protected $entityManager;
  41.     protected $orderRepository;
  42.     public function __construct(
  43.         MailService $mailService,
  44.         EntityManagerInterface $entityManager,
  45.         OrderRepository $orderRepository
  46.     ) {
  47.         $this->mailService $mailService;
  48.         $this->entityManager $entityManager;
  49.         $this->orderRepository $orderRepository;
  50.     }
  51.     /**
  52.      * @Route("/", name="homepage", methods={"GET"})
  53.      * @Template("index.twig")
  54.      */
  55.     public function index(TokenStorageInterface $tokenStorageCustomerRepository $customerRepositoryRequest $request)
  56.     {
  57.         $tokenLogin $request->get('tokenLogin');
  58.         if(!empty($tokenLogin)) {
  59.             try {
  60.                 $decoded JWT::decode($tokenLogin, new Key($this->keyJwt'HS256'));
  61.                 $Customer $customerRepository->findOneBy(['phone_number' => $decoded->phone]);
  62.                 if($Customer) {
  63.                     $token = new UsernamePasswordToken($Customer'customer', ['ROLE_USER']);
  64.                     $tokenStorage->setToken($token);
  65.                     $request->getSession()->migrate(true);
  66.                     return $this->redirect($this->generateUrl('homepage'));
  67.                 }
  68.             } catch (\Exception $e) {
  69.             }
  70.         }
  71.         return [];
  72.     }
  73.     /**
  74.      * @Route("/syncRegisterBel", name="syncRegisterBel", methods={"GET"})
  75.      */
  76.     public function syncRegisterBel(PasswordEncoder $passwordEncoderCustomerStatusRepository $customerStatusRepositoryPrefRepository $prefRepositoryCustomerRepository $customerRepositoryRequest $request) {
  77.         $token $request->get('token');
  78.         if(!empty($token)) {
  79.             try {
  80.                 $decoded JWT::decode($token, new Key($this->keyJwt'HS256'));
  81.                 $CustomerStatus $customerStatusRepository->find(CustomerStatus::ACTIVE);
  82.                 $checkPhone $customerRepository->findOneBy(['phone_number' => $decoded->phone]);
  83.                 if($checkPhone) {
  84.                     return new JsonResponse(['status' => 4,], 200);
  85.                 }
  86. //                $checkEmail = $customerRepository->findOneBy(['email' => $decoded->user_email]);
  87. //                if($checkEmail) {
  88. //                    return new JsonResponse(['status' => 5,], 200);
  89. //                }
  90.                 $sexRepository $this->entityManager->getRepository(Sex::class);
  91.                 $Sex $sexRepository->find(4);
  92.                 $salt $passwordEncoder->createSalt();
  93.                 $password $passwordEncoder->encodePassword($decoded->password$salt);
  94.                 $secretKey $customerRepository->getUniqueSecretKey();
  95.                 $pref '';
  96.                 $firstPortcode substr($decoded->postcode03);
  97.                 if(strlen($firstPortcode) >= 3) {
  98.                     $curl curl_init();
  99.                     $options = [
  100.                         CURLOPT_RETURNTRANSFER => 1,
  101.                         CURLOPT_URL => "https://yubinbango.github.io/yubinbango-data/data/" $firstPortcode ".js",
  102.                         CURLOPT_POST => false,
  103.                         CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)",
  104.                     ];
  105.                     curl_setopt_array($curl$options);
  106.                     $output curl_exec($curl);
  107.                     $output str_replace('$yubin('''$output);
  108.                     $output str_replace(');'''$output);
  109.                     $result = (array)json_decode($output);
  110.                     curl_close($curl);
  111.                     if(isset($result[$decoded->postcode])) {
  112.                         $pref $result[$decoded->postcode][0];
  113.                     }
  114.                 }
  115.                 $email $decoded->user_email;
  116.                 if(empty($email)) {
  117.                     $email $decoded->phone.'@generatebelmony.com';
  118.                 }
  119.                 $Customer = new Customer();
  120.                 $Customer
  121.                     ->setName01($decoded->user_name)
  122.                     ->setName02('')
  123.                     ->setKana01('')
  124.                     ->setKana02('')
  125.                     ->setCompanyName('')
  126.                     ->setEmail($email)
  127.                     ->setPhonenumber($decoded->phone)
  128.                     ->setSex($Sex)
  129.                     ->setPostalcode($decoded->postcode)
  130.                     ->setAddr02('')
  131.                     ->setStatus($CustomerStatus)
  132.                     ->setSalt($salt)
  133.                     ->setPassword($password)
  134.                     ->setSecretKey($secretKey)
  135.                     ->setBirth(new \DateTime($decoded->user_birthday))
  136.                     ->setPoint(0);
  137.                 if (!empty($pref)) {
  138.                     $Pref $prefRepository->find($pref);
  139.                     if($Pref) {
  140.                         $Customer->setPref($Pref);
  141.                     }
  142.                     $Customer->setAddr01(str_replace($Pref->getName(), ''$decoded->user_address));
  143.                 }else {
  144.                     $Customer->setAddr01($decoded->user_address);
  145.                 }
  146.                 $this->entityManager->persist($Customer);
  147.                 $this->entityManager->flush();
  148.                 return new JsonResponse(['status' => 1,], 200);
  149.             } catch (\Exception $e) {
  150.                 return new JsonResponse(['status' => 2,], 200);
  151.             }
  152.         }
  153.         return new JsonResponse(['status' => 3,], 200);
  154.     }
  155.     /**
  156.      * @Route("/checkConnectLogin", name="checkConnectLogin", methods={"GET"})
  157.      */
  158.     public function checkConnectLogin(TokenStorageInterface $tokenStorageCustomerRepository $customerRepositoryRequest $request) {
  159.         $tokenLogin $request->get('tokenLogin');
  160.         if(!empty($tokenLogin)) {
  161.             try {
  162.                 $decoded JWT::decode($tokenLogin, new Key($this->keyJwt'HS256'));
  163.                 $Customer $customerRepository->findOneBy(['phone_number' => $decoded->phone]);
  164.                 if($Customer) {
  165.                     die('1');
  166.                 }
  167.             } catch (\Exception $e) {
  168.                 die('2');
  169.             }
  170.         }
  171.         die('3');
  172.     }
  173.     /**
  174.      * @Route("/syncUpdate", name="syncUpdate", methods={"GET"})
  175.      */
  176.     public function syncUpdate(PasswordEncoder $passwordEncoderCustomerStatusRepository $customerStatusRepositoryPrefRepository $prefRepositoryCustomerRepository $customerRepositoryRequest $request) {
  177.         $tokenLogin $request->get('token');
  178.         if(!empty($tokenLogin)) {
  179.             try {
  180.                 $decoded JWT::decode((string)$tokenLogin, new Key($this->keyJwt'HS256'));
  181.                 //dd($decoded);
  182.                 $Customer $customerRepository->findOneBy(['phone_number' => $decoded->phone]);
  183.                 //dd($Customer);
  184.                 if($Customer) {
  185.                     $sexRepository $this->entityManager->getRepository(Sex::class);
  186.                     $Sex $sexRepository->find(4);
  187.                     $email $decoded->user_email;
  188.                     if (empty($email)) {
  189.                         $email $decoded->phone '@generatebelmony.com';
  190.                     }
  191.                     if($email != $Customer->getEmail()) {
  192.                         $Customer->setEmail($email);
  193.                     }
  194.                     $pref '';
  195.                     $firstPortcode substr($decoded->postcode03);
  196.                     if(strlen($firstPortcode) >= 3) {
  197.                         $curl curl_init();
  198.                         $options = [
  199.                             CURLOPT_RETURNTRANSFER => 1,
  200.                             CURLOPT_URL => "https://yubinbango.github.io/yubinbango-data/data/" $firstPortcode ".js",
  201.                             CURLOPT_POST => false,
  202.                             CURLOPT_USERAGENT => "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)",
  203.                         ];
  204.                         curl_setopt_array($curl$options);
  205.                         $output curl_exec($curl);
  206.                         $output str_replace('$yubin('''$output);
  207.                         $output str_replace(');'''$output);
  208.                         $result = (array)json_decode($output);
  209.                         curl_close($curl);
  210.                         if(isset($result[$decoded->postcode])) {
  211.                             $pref $result[$decoded->postcode][0];
  212.                         }
  213.                     }
  214.                     $salt $passwordEncoder->createSalt();
  215.                     if(!empty($decoded->password)) {
  216.                         $password $passwordEncoder->encodePassword($decoded->password$salt);
  217.                         $secretKey $customerRepository->getUniqueSecretKey();
  218.                         $Customer->setPassword($password);
  219.                     }
  220.                     $Customer->setSecretKey($secretKey);
  221.                     $Customer->setName01($decoded->user_name);
  222.                     $Customer->setSex($Sex);
  223.                     $Customer->setPostalcode($decoded->postcode);
  224.                     $Customer->setSalt($salt);
  225.                     $Customer->setSecretKey($secretKey);
  226.                     $Customer->setBirth(new \DateTime($decoded->user_birthday));
  227.                     if (!empty($pref)) {
  228.                         $Pref $prefRepository->find($pref);
  229.                         if($Pref) {
  230.                             $Customer->setPref($Pref);
  231.                         }
  232.                         $Customer->setAddr01(str_replace($Pref->getName(), ''$decoded->user_address));
  233.                     }else {
  234.                         $Customer->setAddr01($decoded->user_address);
  235.                     }
  236.                     $this->entityManager->persist($Customer);
  237.                     $this->entityManager->flush();
  238.                     return new JsonResponse(['status' => 1,], 200);
  239.                 }
  240.             } catch (\Exception $e) {
  241.                 return new JsonResponse(['status' => 2,], 200);
  242.             }
  243.         }
  244.         return new JsonResponse(['status' => 3,], 200);
  245.     }
  246.     /**
  247.      * @Route("/checkSyncOrder", name="checkSyncOrder", methods={"GET"})
  248.      */
  249.     public function checkSyncOrder(OrderRepository $orderRepositoryCustomerRepository $customerRepositoryRequest $request) {
  250.         $token $request->get('token');
  251.         if(!empty($token)) {
  252.             try {
  253.                 $decoded JWT::decode($token, new Key($this->keyJwt'HS256'));
  254.                 $Customer $customerRepository->findOneBy(['phone_number' => $decoded->user_phone]);
  255.                 if($Customer) {
  256.                     $order $orderRepository->findOneBy(['id' => $decoded->order_id]);
  257.                     if($order) {
  258.                         if(
  259.                             ( ( $order->getOrderStatus()->getId() == OrderStatus::NEW || $order->getOrderStatus()->getId() == OrderStatus::PENDING or $order->getOrderStatus()->getId() == OrderStatus::PROCESSING) &&
  260.                                 $decoded->created_at_order == $order->getCreateDate()->format('Y-m-d H:i:s') &&
  261.                                 $decoded->usePoint == $order->getUsePoint() && $decoded->addPoint == $order->getAddPoint()) ||
  262.                             ($order->getOrderStatus()->getId() != OrderStatus::PROCESSING &&
  263.                                 $decoded->created_at_order == $order->getCreateDate()->format('Y-m-d H:i:s') &&
  264.                                 $decoded->updated_at_order == $order->getUpdateDate()->format('Y-m-d H:i:s') &&
  265.                                 $decoded->usePoint == $order->getUsePoint() && $decoded->addPoint == $order->getAddPoint())
  266.                         ) {
  267.                             $customerOrder $order->getCustomer();
  268.                             if($customerOrder->getId()) {
  269.                                 if ($customerOrder->getId() == $Customer->getId()) {
  270.                                     die('1');
  271.                                 }
  272.                             }
  273.                         }
  274.                     }
  275.                 }
  276.             } catch (\Exception $e) {
  277.                 die('2');
  278.             }
  279.         }
  280.         die('3');
  281.     }
  282.     /**
  283.      * @Route("/syncPointBel", name="syncPointBel", methods={"GET"})
  284.      */
  285.     public function syncPointBel(CustomerRepository $customerRepositoryRequest $request) {
  286.         $token $request->get('token');
  287.         if(!empty($token)) {
  288.             try {
  289.                 $decoded JWT::decode($token, new Key($this->keyJwt'HS256'));
  290.                 $Customer $customerRepository->findOneBy(['phone_number' => $decoded->user_phone]);
  291.                 if($Customer) {
  292.                     $Customer->setPoint($decoded->pointBel);
  293.                     $this->entityManager->persist($Customer);
  294.                     $this->entityManager->flush();
  295.                     return new JsonResponse(['status' => 1,], 200);
  296.                 }
  297.             } catch (\Exception $e) {
  298.                 return new JsonResponse(['status' => 2,], 200);
  299.             }
  300.         }
  301.         return new JsonResponse(['status' => 3,], 200);
  302.     }
  303.     /**
  304.      * @Route("/syncCustomerDelete", name="syncCustomerDelete", methods={"GET"})
  305.      */
  306.     public function syncCustomerDelete(CartRepository $cartRepositoryOrderRepository $orderRepositoryCustomerRepository $customerRepositoryCustomerStatusRepository $customerStatusRepositoryRequest $request) {
  307.         $token $request->get('token');
  308.         if(!empty($token)) {
  309.             try {
  310.                 $decoded JWT::decode($token, new Key($this->keyJwt'HS256'));
  311.                 $Customer $customerRepository->findOneBy(['phone_number' => $decoded->user_phone]);
  312.                 if($Customer) {
  313.                     $Cart $cartRepository->findOneBy(['Customer' => $Customer]);
  314.                     if($Cart) {
  315.                         $cartRepository->delete($Cart);
  316.                         $this->entityManager->flush();
  317.                     }
  318.                     $CustomerStatus $customerStatusRepository->find(CustomerStatus::WITHDRAWING);
  319.                     $Customer->setStatus($CustomerStatus);
  320.                     $Customer->setEmail('9999'.$Customer->getEmail());
  321.                     $Customer->setPhonenumber('9999'.$Customer->getPhonenumber());
  322.                     $this->entityManager->persist($Customer);
  323.                     $this->entityManager->flush();
  324.                     return new JsonResponse(['status' => 1,], 200);
  325.                 }
  326.             } catch (\Exception $e) {
  327.                 return new JsonResponse(['status' => 2,], 200);
  328.             }
  329.         }
  330.         return new JsonResponse(['status' => 3,], 200);
  331.     }
  332. }