app/Plugin/Paid4/EventSubscriber/EntryEventSubscriber.php line 139

Open in your IDE?
  1. <?php
  2. /*
  3.  * Copyright(c) 2020 RACCOON HOLDINGS, Inc. All rights reserved.
  4.  * https://paid.jp/
  5.  */
  6. namespace Plugin\Paid4\EventSubscriber;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Eccube\Common\EccubeConfig;
  9. use Eccube\Entity\Customer;
  10. use Eccube\Event\EccubeEvents;
  11. use Eccube\Event\EventArgs;
  12. use Eccube\Event\TemplateEvent;
  13. use \Exception;
  14. use Plugin\Paid4\Entity\PaidCustomer;
  15. use Plugin\Paid4\Form\Type\PaidEntryType;
  16. use Plugin\Paid4\Repository\PaidConfigRepository;
  17. use Plugin\Paid4\Service\PaidApi\PaidHelperMember;
  18. use Plugin\Paid4\Util\PaidUtil;
  19. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  20. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  21. use Symfony\Component\Form\FormInterface;
  22. use Symfony\Component\HttpFoundation\RequestStack;
  23. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  24. //use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  25. use Symfony\Component\HttpKernel\Event\ResponseEvent// ここを修正
  26. use Symfony\Component\HttpKernel\KernelEvents;
  27. class EntryEventSubscriber implements EventSubscriberInterface
  28. {
  29.     /**
  30.      * @var RequestStack
  31.      */
  32.     protected $session;
  33.     /**
  34.      * @var EccubeConfig
  35.      */
  36.     protected $eccubeConfig;
  37.     /**
  38.      * @var EntityManagerInterface
  39.      */
  40.     protected $entityManager;
  41.     /**
  42.      * @var PaidHelperMember
  43.      */
  44.     private $paidHelperMember;
  45.     /**
  46.      * @var PaidConfigRepository
  47.      */
  48.     private $paidConfigRepository;
  49.     /**
  50.      * OrderEditIndexCompleteListener constructor.
  51.      *
  52.      * @param SessionInterface $session
  53.      * @param EccubeConfig $eccubeConfig
  54.      * @param EntityManagerInterface $entityManager
  55.      * @param PaidHelperMember $PaidHelperMember
  56.      * @param PaidConfigRepository $paidConfigRepository
  57.      */
  58.     public function __construct(
  59.         SessionInterface $session,
  60.         EccubeConfig $eccubeConfig,
  61.         EntityManagerInterface $entityManager,
  62.         PaidHelperMember $PaidHelperMember,
  63.         PaidConfigRepository $paidConfigRepository
  64.     )
  65.     {
  66.         $this->session $session;
  67.         $this->eccubeConfig $eccubeConfig;
  68.         $this->entityManager $entityManager;
  69.         $this->paidHelperMember $PaidHelperMember;
  70.         $this->paidConfigRepository $paidConfigRepository;
  71.     }
  72.     /**
  73.      * @return array
  74.      */
  75.     public static function getSubscribedEvents(): array
  76.     {
  77.         return [
  78.             KernelEvents::RESPONSE => ['onResponse'],
  79.             'Entry/index.twig' => 'onDefaultEntryTwig',
  80.             'Entry/complete.twig' => 'onDefaultEntryCompleteTwig',
  81.             'Entry/activate.twig' => 'onDefaultEntryCompleteTwig',
  82.             EccubeEvents::FRONT_ENTRY_INDEX_INITIALIZE => 'onFrontEntryIndexInitialize',
  83.             EccubeEvents::FRONT_ENTRY_INDEX_COMPLETE => 'onFrontEntryIndexComplete',
  84.         ];
  85.     }
  86.     /**
  87.      * @param ResponseEvent $event
  88.      */
  89.     public function onResponse(ResponseEvent $event)
  90.     {
  91.     }
  92.     /**
  93.      * フロント -> 新規会員登録
  94.      * @throws \Exception
  95.      */
  96.     public function onDefaultEntryTwig(TemplateEvent $event)
  97.     {
  98.         $event->addSnippet('@Paid4/default/Entry/index.twig');
  99.         $event->setParameter('is_paid_form_area'$this->paidConfigRepository->getAddPaidFormAreaFlag());
  100.     }
  101.     /**
  102.      * フロント -> 新規会員登録 -> 完了画面
  103.      * @throws \Exception
  104.      */
  105.     public function onDefaultEntryCompleteTwig(TemplateEvent $event)
  106.     {
  107.         // sessionにある情報を取得
  108.         $paid_success $this->session->get('plugin.paid.is_success');
  109.         $paid_error_Message $this->session->get('plugin.paid.is_success_error_Message');
  110.         if($paid_success != true && $paid_success != false) {
  111.             $paid_success null;
  112.         }
  113.         $event->addSnippet('@Paid4/default/Entry/complete.twig');
  114.         $event->setParameter('paid_success'$paid_success);
  115.         $event->setParameter('paid_error_Message'$paid_error_Message);
  116.         // sessionにある情報を初期化
  117.         $this->session->set('plugin.paid.is_success_error_Message'null);
  118.         $this->session->set('plugin.paid.is_success'null);
  119.     }
  120.     /**
  121.      * @param EventArgs $event
  122.      */
  123.     public function onFrontEntryIndexInitialize(EventArgs $event)
  124.     {
  125.         $request $event->getRequest();
  126.         $builder $event->getArgument("builder");
  127.         /* @var $form FormInterface */
  128.         $form $builder->getForm();
  129.         $form->handleRequest($request);
  130.         $Customer $event->getArgument("Customer");
  131.         if ($form->get('paid_register_check')->getData()) {
  132.             if ($form->isSubmitted() && $form->isValid()) {
  133.                 switch ($request->get('mode')) {
  134.                     case 'confirm':
  135.                         $builder
  136.                             ->add('paid_register_check'CheckboxType::class, [
  137.                                 'required' => true,
  138.                                 'label' => null,
  139.                                 'mapped' => false,
  140.                                 'eccube_form_options' => [
  141.                                     'auto_render' => true,
  142.                                     'form_theme' => '@Paid4/default/Entry/form_theme/paid_register_check.twig'
  143.                                 ]
  144.                             ])
  145.                             ->add('PaidCustomer'PaidEntryType::class, [
  146.                                 'required' => true,
  147.                                 'mapped' => true,
  148.                                 'newPaidCustomer' => false,
  149.                                 'eccube_form_options' => [
  150.                                     'auto_render' => true,
  151.                                     'form_theme' => '@Paid4/default/Entry/form_theme/confirm.twig'
  152.                                 ]
  153.                             ]);
  154.                         break;
  155.                     case 'complete':
  156.                         $this->serLogMessage('FRONT_ENTRY_INDEX_INITIALIZE - paid新規会員データ作成開始');
  157.                         /** @var Customer $Customer */
  158.                         $Customer $event->getArgument("Customer");
  159.                         $Customer->setPaidCustomer($this->setPaidCustomerData($form));
  160.                         $this->serLogMessage('FRONT_ENTRY_INDEX_INITIALIZE - paid新規会員データ作成完了');
  161.                         break;
  162.                 }
  163.             }
  164.         }
  165.     }
  166.     /**
  167.      * @param EventArgs $event
  168.      */
  169.     public function onFrontEntryIndexComplete(EventArgs $event)
  170.     {
  171.         // Paid登録API
  172.         /** @var Customer $Customer */
  173.         $Customer $event->getArgument("Customer");
  174.         /** @var PaidCustomer $PaidCustomer */
  175.         $PaidCustomer $Customer->getPaidCustomer();
  176.         if (!empty($PaidCustomer)) {
  177.             $PaidCustomer->setCustomer($Customer);
  178.             $this->serLogMessage('FRONT_ENTRY_INDEX_COMPLETE - Paid会員登録API開始');
  179.             if ($this->paidHelperMember->registerMember($PaidCustomer)) {
  180.                 $this->serLogMessage('FRONT_ENTRY_INDEX_COMPLETE - Paid会員登録API完了');
  181.                 $this->serLogMessage('FRONT_ENTRY_INDEX_COMPLETE - Paid会員ステータス更新開始');
  182.                 try {
  183.                     // paid登録ステータスを「登録済み」に更新
  184.                     $PaidCustomer->setPaidRegister($this->eccubeConfig['paid4.register.registered']);
  185.                     $this->entityManager->persist($PaidCustomer);
  186.                     $this->entityManager->flush();
  187.                     $this->session->set('plugin.paid.is_success'true);
  188.                     $this->serLogMessage('FRONT_ENTRY_INDEX_COMPLETE - Paid会員ステータス更新完了');
  189.                 } catch (Exception $e) {
  190.                     $this->serLogMessage('FRONT_ENTRY_INDEX_COMPLETE - Paid会員ステータス更新失敗 - Exception['$e ']');
  191.                     $this->session->set('plugin.paid.is_success'false);
  192.                 }
  193.             } else {
  194.                 $PaidCustomer->setCustomer(null);
  195.                 $PaidCustomer->setEmail(null);
  196.                 $this->entityManager->persist($PaidCustomer);
  197.                 $this->entityManager->flush();
  198.                 $this->serLogMessage('FRONT_ENTRY_INDEX_COMPLETE - Paid会員登録API失敗');
  199.                 // エラー情報をsessionにセット
  200.                 $this->session->set('plugin.paid.is_success'false);
  201.                 $this->session->set('plugin.paid.is_success_error_Message'$this->paidHelperMember->getErrorMessage());
  202.             }
  203.         }
  204.     }
  205.     /**
  206.      * @return PaidCustomer
  207.      * @var  FormInterface $form
  208.      */
  209.     public function setPaidCustomerData($form)
  210.     {
  211.         $paid_form $form->get('PaidCustomer');
  212.         $representative $paid_form->get('representative');
  213.         $representative_kana $paid_form->get('representative_kana');
  214.         $address $paid_form->get('address');
  215.         $clerk $paid_form->get('clerk');
  216.         $clerk_kana $paid_form->get('clerk_kana');
  217.         $email $paid_form->get('email');
  218.         $PaidCustomer = new PaidCustomer();
  219.         $PaidCustomer->setCompanyName($paid_form->get('company_name')->getData())
  220.             ->setCompanyNameKana($paid_form->get('company_name_kana')->getData())
  221.             ->setRepresentativeSei($representative->get('representative_sei')->getData())
  222.             ->setRepresentativeMei($representative->get('representative_mei')->getData())
  223.             ->setRepresentativeSeiKana($representative_kana->get('representative_sei_kana')->getData())
  224.             ->setRepresentativeMeiKana($representative_kana->get('representative_mei_kana')->getData())
  225.             ->setZipCode(substr_replace($paid_form->get('zip_code')->getData(), '-'30))
  226.             ->setPrefecture($address->get('prefecture')->getData())
  227.             ->setAddress1($address->get('address1')->getData())
  228.             ->setAddress2($address->get('address2')->getData())
  229.             ->setClerkSei($clerk->get('clerk_sei')->getData())
  230.             ->setClerkMei($clerk->get('clerk_mei')->getData())
  231.             ->setClerkSeiKana($clerk_kana->get('clerk_sei_kana')->getData())
  232.             ->setClerkMeiKana($clerk_kana->get('clerk_mei_kana')->getData())
  233.             ->setTell($paid_form->get('tell')->getData())
  234.             ->setEmail($email->get('first')->getData())
  235.             // 1:paid未登録, 2:paid登録済み
  236.             ->setPaidRegister($this->eccubeConfig['paid4.register.unregistered'])
  237.             // 1:審査中, 2:利用可能-取引中, 3:利用可能-取引不可, 4:利用不可
  238.             ->setPaidConfirm($this->eccubeConfig['paid4.confirm.under_review'])
  239.             // Eccube運営者による利用可否設定, 1:利用可能, 2:利用不可
  240.             ->setPaidUse($this->eccubeConfig['paid4.use.available']);
  241.         return $PaidCustomer;
  242.     }
  243.     /**
  244.      * @param string $Message
  245.      */
  246.     private function serLogMessage($Message '')
  247.     {
  248.         PaidUtil::logInfo(__NAMESPACE__ get_class($this) .' - '$Message);
  249.     }
  250. }