app/Plugin/SlnPayment4/SlnPaymentEvent.php line 539

Open in your IDE?
  1. <?php
  2. namespace Plugin\SlnPayment4;
  3. use Eccube\Common\Constant;
  4. use Eccube\Common\EccubeConfig;
  5. use Eccube\Repository\PaymentRepository;
  6. use Eccube\Repository\Master\OrderStatusRepository;
  7. use Eccube\Event\TemplateEvent;
  8. use Eccube\Event\EventArgs;
  9. use Eccube\Event\EccubeEvents;
  10. use Eccube\Entity\Customer;
  11. use Eccube\Entity\Master\CustomerStatus;
  12. use Eccube\Entity\Master\OrderStatus;
  13. use Eccube\Exception\ShoppingException;
  14. use Doctrine\ORM\EntityManagerInterface;
  15. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  16. use Symfony\Component\DependencyInjection\ContainerInterface;
  17. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  18. use Symfony\Component\HttpKernel\Event\GetResponseEvent;
  19. use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
  20. use Symfony\Component\HttpFoundation\Response;
  21. use Symfony\Component\HttpFoundation\RedirectResponse;
  22. use Symfony\Component\HttpFoundation\Session\Session;
  23. use Symfony\Component\DomCrawler\Crawler;
  24. use Symfony\Component\Validator\Constraints as Assert;
  25. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  26. use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
  27. use Plugin\SlnPayment4\Repository\MemCardIdRepository;
  28. use Plugin\SlnPayment4\Repository\OrderPaymentHistoryRepository;
  29. use Plugin\SlnPayment4\Repository\OrderPaymentStatusRepository;
  30. use Plugin\SlnPayment4\Repository\PluginConfigRepository;
  31. use Plugin\SlnPayment4\Service\Method\CreditCard;
  32. use Plugin\SlnPayment4\Service\Method\RegisteredCreditCard;
  33. use Plugin\SlnPayment4\Service\Method\MethodUtils;
  34. use Plugin\SlnPayment4\Service\SlnMailService;
  35. use Plugin\SlnPayment4\Service\BasicItem;
  36. use Plugin\SlnPayment4\Service\Util;
  37. use Plugin\SlnPayment4\Service\SlnAction\Cvs;
  38. use Plugin\SlnPayment4\Service\SlnAction\Credit;
  39. use Plugin\SlnPayment4\Exception\SlnShoppingException;
  40. use Plugin\SlnPayment4\Service\SlnAction\Mem;
  41. class SlnPaymentEvent implements EventSubscriberInterface
  42. {
  43.     /**
  44.      * @var ContainerInterface
  45.      */
  46.     private $container;
  47.     
  48.     /**
  49.      * @var EntityManagerInterface
  50.      */
  51.     private $entityManager;
  52.     
  53.     /**
  54.      * @var AuthorizationCheckerInterface
  55.      */
  56.     protected $authorizationChecker;
  57.     /**
  58.      * @var EccubeConfig
  59.      */
  60.     private $eccubeConfig;
  61.     /**
  62.      * @var EventDispatcherInterface
  63.      */
  64.     private $eventDispatcher;
  65.     /**
  66.      * @var PaymentRepository
  67.      */
  68.     private $paymentRepository;
  69.     /**
  70.      * @var OrderStatusRepository
  71.      */
  72.     private $orderStatusRepository;
  73.     /**
  74.      * @var SlnMailService
  75.      */
  76.     private $mailService;
  77.     /**
  78.      * @var BasicItem
  79.      */
  80.     private $basicItem;
  81.     /**
  82.      * @var Util
  83.      */
  84.     private $util;
  85.     /**
  86.      * @var MemCardIdRepository
  87.      */
  88.     private $memCardIdRepository;
  89.     /**
  90.      * @var OrderPaymentHistoryRepository
  91.      */
  92.     private $orderPaymentHistoryRepository;
  93.     /**
  94.      * @var OrderPaymentStatusRepository
  95.      */
  96.     private $orderPaymentStatusRepository;
  97.     /**
  98.      * @var PluginConfigRepository
  99.      */
  100.     private $configRepository;
  101.     /**
  102.      * @var Mem
  103.      */
  104.     private $mem;
  105.     public function __construct(
  106.         ContainerInterface $container,
  107.         EntityManagerInterface $entityManager,
  108.         AuthorizationCheckerInterface $authorizationChecker,
  109.         EccubeConfig $eccubeConfig,
  110.         EventDispatcherInterface $eventDispatcher,
  111.         PaymentRepository $paymentRepository,
  112.         OrderStatusRepository $orderStatusRepository,
  113.         SlnMailService $mailService,
  114.         BasicItem $basicItem,
  115.         Util $util,
  116.         MemCardIdRepository $memCardIdRepository,
  117.         OrderPaymentStatusRepository $orderPaymentStatusRepository,
  118.         OrderPaymentHistoryRepository $orderPaymentHistoryRepository,
  119.         PluginConfigRepository $configRepository,
  120.         Mem $mem
  121.     ) {
  122.         $this->container $container;
  123.         $this->entityManager $entityManager;
  124.         $this->authorizationChecker $authorizationChecker;
  125.         $this->eccubeConfig $eccubeConfig;
  126.         $this->eventDispatcher $eventDispatcher;
  127.         $this->paymentRepository $paymentRepository;
  128.         $this->orderStatusRepository $orderStatusRepository;
  129.         $this->mailService $mailService;
  130.         $this->basicItem $basicItem;
  131.         $this->util $util;
  132.         $this->memCardIdRepository $memCardIdRepository;
  133.         $this->orderPaymentStatusRepository $orderPaymentStatusRepository;
  134.         $this->orderPaymentHistoryRepository $orderPaymentHistoryRepository;
  135.         $this->configRepository $configRepository;
  136.         $this->mem $mem;
  137.     }
  138.     /**
  139.      * リッスンしたいサブスクライバのイベント名の配列を返します。
  140.      * 配列のキーはイベント名、値は以下のどれかをしてします。
  141.      * - 呼び出すメソッド名
  142.      * - 呼び出すメソッド名と優先度の配列
  143.      * - 呼び出すメソッド名と優先度の配列の配列
  144.      * 優先度を省略した場合は0
  145.      *
  146.      * 例:
  147.      * - array('eventName' => 'methodName')
  148.      * - array('eventName' => array('methodName', $priority))
  149.      * - array('eventName' => array(array('methodName1', $priority), array('methodName2')))
  150.      *
  151.      * {@inheritdoc}
  152.      */
  153.     public static function getSubscribedEvents()
  154.     {
  155.         return [
  156.             '@admin/Order/index.twig' => 'onAdminOrderIndexTwig',
  157.             EccubeEvents::ADMIN_ORDER_INDEX_INITIALIZE => 'onAdminOrderIndexInitialize',
  158.             EccubeEvents::ADMIN_ORDER_INDEX_SEARCH => 'onAdminOrderIndexSearch',
  159.             '@admin/Order/edit.twig' => 'onAdminOrderEditTwig',
  160.             EccubeEvents::ADMIN_ORDER_EDIT_INDEX_INITIALIZE => 'onAdminOrderEditIndexInitialize',
  161.             'Cart/index.twig' => 'onCartIndexTwig',
  162.             'Shopping/confirm.twig' => 'onShoppingConfirmTwig',
  163.             'Mypage/index.twig' => 'onMypageTwig',
  164.             'Mypage/history.twig' => 'onMypageTwig',
  165.             'Mypage/favorite.twig' => 'onMypageTwig',
  166.             'Mypage/change.twig' => 'onMypageTwig',
  167.             'Mypage/change_complete.twig' => 'onMypageTwig',
  168.             'Mypage/delivery.twig' => 'onMypageTwig',
  169.             'Mypage/delivery_edit.twig' => 'onMypageTwig',
  170.             'Mypage/withdraw.twig' => 'onMypageTwig',
  171.             '@SlnRegular4/Mypage/regular_order.twig' => 'onMypageTwig',
  172.             '@SlnRegular4/Mypage/regular_history.twig' => 'onMypageTwig',
  173.             '@SlnPayment4/sln_edit_card.twig' => 'onMypageTwig',
  174.             EccubeEvents::FRONT_CART_BUYSTEP_INITIALIZE => 'onFrontCartBuystepInitialize',
  175.             'Shopping/index.twig' => 'onShoppingIndexTwig',
  176.             'sln.service.regular.nextorder.complete' => 'onSlnServiceRegularNextorderComplete',
  177.             'sln.service.regular.mypage_history.change_payids' => 'onSlnServiceRegularMypageHistoryChangePayids',
  178.             EccubeEvents::ADMIN_CUSTOMER_EDIT_INDEX_INITIALIZE => 'onAdminCustomerEditIndexInitialize',
  179.             EccubeEvents::ADMIN_CUSTOMER_DELETE_COMPLETE => 'onAdminCustomerDeleteComplete',
  180.             EccubeEvents::FRONT_MYPAGE_WITHDRAW_INDEX_COMPLETE => 'onFrontMypageWithdrawComplete',
  181.         ];
  182.     }
  183.     /**
  184.      * 受注一覧 - 検索画面介入
  185.      */
  186.     public function onAdminOrderIndexTwig(TemplateEvent $event) {
  187.         $pData $event->getParameters();
  188.         $viewPayStatus = array();
  189.         if ($pData['pagination']) {
  190.             $orderIds = array();
  191.             foreach ($pData['pagination'] as $order) {
  192.                 $orderIds[] = $order->getId();
  193.             }
  194.             if (count($orderIds)) {
  195.                 $payStatuses $this->orderPaymentStatusRepository->findBy(array('id' => $orderIds));
  196.                 if (count($payStatuses)) {
  197.                     foreach ($payStatuses as $payStatus) {
  198.                         $viewPayStatus[$payStatus->getId()] = $payStatus;
  199.                     }
  200.                 }
  201.             }
  202.         }
  203.         $pData['viewPayStatus'] = $viewPayStatus;
  204.         $pData['pay_status'] = array_flip($this->container->getParameter('arrPayStatusNames'));
  205.         $token $this->container->get('security.csrf.token_manager')->getToken(Constant::TOKEN_NAME)->getValue();
  206.         $pData["pay_token"] = $token;
  207.         $event->setParameters($pData);
  208.         $event->addSnippet('@SlnPayment4/admin/order_index.twig');
  209.     }
  210.     /**
  211.      * 受注一覧 - 検索項目追加
  212.      */
  213.     public function onAdminOrderIndexInitialize(EventArgs $event)
  214.     {
  215.         $arrPayStatusNames $this->container->getParameter('arrPayStatusNames');
  216.         $builder $event->getArgument('builder');
  217.         $builder->add('sln_pay_status'ChoiceType::class, [
  218.             'label' => '決済状況',
  219.             'choices' => $arrPayStatusNames,
  220.             'expanded' => true,
  221.             'multiple' => true,
  222.         ]);
  223.     }
  224.     /**
  225.      * 受注一覧 - 検索実行
  226.      */
  227.     public function onAdminOrderIndexSearch(EventArgs $event)
  228.     {
  229.         $searchData $event->getArgument('searchData');
  230.         $qb $event->getArgument('qb');
  231.         $pyStatus $searchData['sln_pay_status'];
  232.         if (count($pyStatus)) {
  233.             $qb2 $this->entityManager->createQueryBuilder();
  234.             $qb2->select('s')
  235.                 ->from('\Plugin\SlnPayment4\Entity\OrderPaymentStatus''sln_status')
  236.                 ->andWhere('o.id = sln_status.id')
  237.                 ->andWhere($qb2->expr()->in('sln_status.paymentStatus'$pyStatus));
  238.             $qb->andWhere($qb->expr()->exists($qb2->getDQL()));
  239.         }
  240.     }
  241.     /**
  242.      * 受注登録編集 - 画面介入
  243.      */
  244.     public function onAdminOrderEditTwig(TemplateEvent $event)
  245.     {
  246.         $pData $event->getParameters();
  247.         $Order $pData['Order'];
  248.         if (MethodUtils::isSlnPaymentMethodByOrder($Order)) {
  249.             //決済情報をとる
  250.             $paymentStatus $this->orderPaymentStatusRepository->getStatus($Order);
  251.             //決済ステータスを表示する
  252.             if ($paymentStatus) {
  253.                 $pData['payStatusId'] = $paymentStatus->getPaymentStatus();
  254.                 
  255.                 $payStatus $this->orderPaymentStatusRepository->getPayStatusName($paymentStatus->getPaymentStatus());
  256.                 if (empty($payStatus)) {
  257.                     // ステータス発見できず
  258.                     return;
  259.                 }
  260.                 $pData['payStatus'] = $payStatus;
  261.                 
  262.                 $pData['payAmount'] = $paymentStatus->getAmount();
  263.                 
  264.                 $pData['isCard'] = true;
  265.             
  266.                 if (MethodUtils::isCvsMethod($Order->getPayment()->getMethodClass())) {
  267.                     // コンビニ支払い
  268.                     $pData['isCard'] = false;
  269.                     
  270.                     $cvsName "";
  271.                     
  272.                     if ($paymentStatus->getPayee()) {
  273.                         //支払い先
  274.                         $arrCvsCd $this->basicItem->getCvsCd();
  275.                     
  276.                         $cvsName $arrCvsCd[$paymentStatus->getPayee()];
  277.                         if (!$cvsName) {
  278.                             $cvsName $paymentStatus->getPayee();
  279.                         }
  280.                     
  281.                         $pData['payCvsName'] = $cvsName;
  282.                     }
  283.                     
  284.                     $FreeAreaHistory $this->orderPaymentHistoryRepository
  285.                                             ->findOneBy(
  286.                                                 array('orderId' => $Order->getId(),
  287.                                                     'operateId' => array('2Add''2Chg'),
  288.                                                     'sendFlg' => 1,
  289.                                                     'requestFlg' => 0,
  290.                                                     'responseCd' => 'OK',
  291.                                                 ),
  292.                                                 array('id' => 'DESC')
  293.                                             );
  294.                     if ($FreeAreaHistory) {
  295.                         $FreeAreabody $FreeAreaHistory->getBody();
  296.                         $FreeAreadata json_decode($FreeAreabody1);
  297.                     
  298.                         //コンビニ支払いリンクをとる
  299.                         $pData['payLink'] = $this->configRepository->getConfig()->getCreditConnectionPlace3() . sprintf("?code=%s&rkbn=2"$FreeAreadata['FreeArea']);
  300.                     }
  301.                 }
  302.                 //通信ログをとる
  303.                 $pData['payHistorys'] = $this->orderPaymentHistoryRepository->findBy(array('orderId' => $Order->getId()));
  304.             }
  305.         }
  306.         $event->setParameters($pData);
  307.         $event->addSnippet('@SlnPayment4/admin/order_edit.twig');
  308.     }
  309.     /**
  310.      * redirectToRouteのレスポンスを取得する
  311.      */
  312.     public function redirectToRouteResponse($route$params = array()) {
  313.         $router $this->container->get('router');
  314.         return new RedirectResponse($router->generate($route$params), 302);
  315.     }
  316.     /**
  317.      * 受注登録編集 - 初期化
  318.      */
  319.     public function onAdminOrderEditIndexInitialize(EventArgs $event) {
  320.         $request $event->getRequest();
  321.         if ($this->authorizationChecker->isGranted('ROLE_ADMIN')) {
  322.             
  323.             $Order $event->getArgument('TargetOrder');
  324.             $orderId $Order->getId();
  325.             
  326.             if (!$orderId) {
  327.                 return ;
  328.             }
  329.             
  330.             $history $this->orderPaymentHistoryRepository
  331.                 ->findOneBy(
  332.                     array('orderId' => $orderId,
  333.                         'operateId' => array('2Add''1Auth''1Gathering''1ReAuth'),
  334.                         'sendFlg' => 1,
  335.                         'requestFlg' => 0
  336.                     ),
  337.                     array('id' => 'DESC')
  338.                 );
  339.             
  340.             if (!$history) {
  341.                 return ;
  342.             }
  343.             
  344.             $mode $request->get('mode');
  345.             if (!$mode || substr($mode03) != "sln") {
  346.                 return ;
  347.             }
  348.             
  349.             $cvs $this->container->get(Cvs::class);
  350.             $card $this->container->get(Credit::class);
  351.             
  352.             try {
  353.                 //決済に関するボタン操作
  354.                 switch ($mode) {
  355.                     case 'sln_cvs_ref'://結果照会
  356.                         $ref $cvs->Ref($Order$this->configRepository->getConfig(), $history);
  357.                         if (!is_null($ref->getAmount())) {//回答する場合
  358.                             if ($Order->getPaymentTotal() == $ref->getAmount()) {//支払い情報を確認
  359.             
  360.                                 //決済ステータスを変更する
  361.                                 $this->orderPaymentStatusRepository->paySuccess($Order$ref->getCvsCd());
  362.             
  363.                                 //受注ステータスを更新する
  364.                                 $Order->setOrderStatus($this->orderStatusRepository->find(OrderStatus::PAID));
  365.                                 $Order->setPaymentDate(new \DateTime());
  366.                                 $this->entityManager->persist($Order);
  367.                                 $this->entityManager->flush();
  368.                                 
  369.                                 $this->util->addSuccess($request'admin.common.save_complete''admin');
  370.                                 return;
  371.                             } else {
  372.                                 throw new SlnException("受注金額と決済金額が一致していません。");
  373.                             }
  374.                         }
  375.                         break;
  376.                     case "sln_cvs_chg"://決済金額変更
  377.                         $cvs->Chg($Order$this->configRepository->getConfig(), $history);
  378.                         $this->orderPaymentStatusRepository->requestSuccess($Order$Order->getPaymentTotal());
  379.                         //決済金額情報を変更する
  380.                         $this->orderPaymentStatusRepository->change($Order$Order->getPaymentTotal());
  381.                         $this->util->addSuccess($request'決済金額を変更しました''admin');
  382.                         return;
  383.                     case "sln_cvs_del":
  384.                         //決済削除
  385.                         $cvs->Del($Order$this->configRepository->getConfig(), $history);
  386.                         
  387.                         $this->orderPaymentStatusRepository->cancel($Order);
  388.                         $this->util->addSuccess($request'決済を削除しました。''admin');
  389.                         return;
  390.                     case "sln_cvs_add":
  391.                         list($link$add) = $cvs->Add($Order$this->configRepository->getConfig(), '');
  392.                         //決済ステータスを変更する
  393.                         $this->orderPaymentStatusRepository
  394.                                 ->requestSuccess($Order$add->getContent()->getAmount());
  395.                     
  396.                         //決済金額情報を変更する
  397.                         $this->orderPaymentStatusRepository->change($Order$add->getContent()->getAmount());
  398.                                 
  399.                         //受注ステータスを更新する
  400.                         $Order->setOrderStatus($this->orderStatusRepository->find(OrderStatus::NEW));
  401.                         $this->entityManager->persist($Order);
  402.                         $this->entityManager->flush();
  403.                     
  404.                         $this->util->addSuccess($request'再決済を行いました''admin');
  405.                         return;
  406.                     case "sln_card_commit":
  407.                         $card->Capture($Order$this->configRepository->getConfig(), $history);
  408.                         
  409.                         //決済ステータスを変更する
  410.                         $this->orderPaymentStatusRepository->commit($Order$Order->getPaymentTotal());
  411.                         $this->util->addSuccess($request'売上確定処理を実行しました''admin');
  412.                         return;
  413.                     case "sln_card_cancel":
  414.                         $card->Delete($Order$this->configRepository->getConfig(), $history);
  415.                         
  416.                         //決済ステータスを変更する
  417.                         $this->orderPaymentStatusRepository->void($Order);
  418.                         $this->util->addSuccess($request'取消(返品)処理が完了しました''admin');
  419.                         return;
  420.                     case "sln_card_change":
  421.                         $card->Change($Order$this->configRepository->getConfig(), $history);
  422.                     
  423.                         //決済金額情報を変更する
  424.                         $this->orderPaymentStatusRepository->change($Order$Order->getPaymentTotal());
  425.                         $this->util->addSuccess($request'決済金額変更処理を実行しました''admin');
  426.                         return;
  427.                     case "sln_card_reauth":
  428.                         
  429.                         /* @var $kaiinHistory \Plugin\SlnPayment4\Entity\PlgSlnOrderPaymentHistory */
  430.                         $kaiinHistory $this->orderPaymentHistoryRepository
  431.                                             ->findOneBy(
  432.                                                 array('orderId' => $Order->getId(),
  433.                                                     'operateId' => array('1Auth''1Gathering'),
  434.                                                 ),
  435.                                                 array('id' => 'ASC')
  436.                                             );
  437.                         
  438.                         $card->ReAuth($Order$this->configRepository->getConfig(), $history);
  439.                         
  440.                         if ($kaiinHistory->getOperateId() == '1Gathering') {
  441.                             //再オーソリ
  442.                             $this->orderPaymentStatusRepository->capture($Order$Order->getPaymentTotal());
  443.                         } else {
  444.                             //再オーソリ
  445.                             $this->orderPaymentStatusRepository->auth($Order$Order->getPaymentTotal());
  446.                         }
  447.                         $this->util->addSuccess($request'再オーソリの取得処理を実行しました''admin');
  448.                         return;
  449.                     default:
  450.                         throw new SlnException("ボタン例外処理。");
  451.                         break;
  452.                 }
  453.             } catch (SlnShoppingException $e) {
  454.                 log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  455.                 if (substr($mode44) == 'card') {
  456.                     $this->util->addCardNotice(sprintf("card order edit error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine()));
  457.                 } else {
  458.                     $this->util->addCvsNotice(sprintf("cvs order edit error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine()));
  459.                 }
  460.                 $this->util->addErrorLog($e->getSlnErrorName() . $e->getSlnErrorDetail() . 'order_id:' $Order->getId() . " " $e->getFile() . $e->getLine());
  461.                 $this->ErrMss $e->getSlnErrorDetail();
  462.                 $this->util->addWarning($request$this->ErrMss'admin');
  463.             } catch (SlnException $e) {
  464.                 log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  465.                 if (substr($mode44) == 'card') {
  466.                     $log sprintf("card order edit error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  467.                     $this->util->addCardNotice($log);
  468.                 } else {
  469.                     $log sprintf("cvs order edit error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  470.                     $this->util->addCvsNotice($log);
  471.                 }
  472.                 $this->util->addErrorLog($log);
  473.                 $this->ErrMss $e->getMessage();
  474.                 $this->util->addWarning($request$this->ErrMss'admin');
  475.             } catch (\Exception $e) {
  476.                 log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  477.                 if (substr($mode44) == 'card') {
  478.                     $log sprintf("card order edit error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  479.                     $this->util->addCardNotice($log);
  480.                 } else {
  481.                     $log sprintf("cvs order edit error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  482.                     $this->util->addCvsNotice($log);
  483.                 }
  484.                 $this->util->addErrorLog($log);
  485.                 throw new \Exception($e->getMessage() . " " $e->getFile() . $e->getLine());
  486.             }
  487.         }
  488.     }
  489.     public function onCartIndexTwig(TemplateEvent $event) {
  490.         $isQuick $this->configRepository->getConfig()->getQuickAccounts();
  491.         if ($isQuick == 1) {
  492.             $event->addSnippet('@SlnPayment4/sln_cart_quick_pay.twig'true);
  493.         }
  494.     }
  495.     /**
  496.      * 注文ボタンの文字列を変更する
  497.      */
  498.     public function onShoppingConfirmTwig(TemplateEvent $event) {
  499.         // 注文ボタンタイトルを変更する
  500.         $Order $event->getParameter('Order');
  501.         if ($Order) {
  502.             $methodClass $Order->getPayment()->getMethodClass();
  503.             if (MethodUtils::isSlnPaymentMethodByOrder($Order)){
  504.                 $event->addSnippet('@SlnPayment4/sln_shopping_confirm.twig');
  505.             }
  506.         }
  507.     }
  508.     public function onMypageTwig(TemplateEvent $event) {
  509.         $event->addSnippet('@SlnPayment4/sln_mypage_add_item.twig');
  510.     }
  511.     public function onFrontCartBuystepInitialize(EventArgs $event) {
  512.         $session $event->getRequest()->getSession();
  513.         $session->remove('eccube.sln.pay.slClink');
  514.         if (array_key_exists('slClink'$_GET) && $_GET['slClink'] == 1) {
  515.             $session->set('eccube.sln.pay.slClink'1);
  516.         }
  517.     }
  518.     /**
  519.      * ご注文手続き画面介入
  520.      */
  521.     public function onShoppingIndexTwig(TemplateEvent $event) {
  522.         $slClink false;
  523.         $isCreditCardRegistered false;
  524.         $isEnabledQuickPay false;
  525.         // クイック決済選択判定
  526.         $session = new Session();
  527.         if ($session->get('eccube.sln.pay.slClink') == 1) {
  528.             $session->remove('eccube.sln.pay.slClink');
  529.             $slClink true;
  530.         }
  531.         // クレジットカード登録判定
  532.         try {
  533.             $Customer $event->getParameter('Order')->getCustomer();
  534.             if ($Customer != null) {
  535.                 $ReMemRef $this->mem->MemRef($Customer$this->configRepository->getConfig());
  536.                 if ($ReMemRef->getContent()->getKaiinStatus() == 0) {
  537.                     $isCreditCardRegistered true;
  538.                 }
  539.             }
  540.         } catch(\Exception $e) {
  541.             log_info($e->getMessage());
  542.         }
  543.         // クイック決済選択時かつクレジットカード登録済みの場合は登録済み
  544.         if ($slClink && $isCreditCardRegistered) {
  545.             $isEnabledQuickPay true;
  546.         }
  547.         // クレジットカード決済ID取得
  548.         $ccPayId 0;
  549.         $payment $this->paymentRepository->findOneBy(['method_class' => CreditCard::class]);
  550.         if ($payment) {
  551.             $ccPayId $payment->getId();
  552.         }
  553.         // 登録済みクレジットカード決済ID取得
  554.         $rcPayId 0;
  555.         $payment $this->paymentRepository->findOneBy(['method_class' => RegisteredCreditCard::class]);
  556.         if ($payment) {
  557.             $rcPayId $payment->getId();
  558.         }
  559.         $event->setParameter('slClink'$slClink);
  560.         $event->setParameter('isEnabledQuickPay'$isEnabledQuickPay);
  561.         $event->setParameter('isCreditCardRegistered'$isCreditCardRegistered);
  562.         $event->setParameter('ccPayId'$ccPayId);
  563.         $event->setParameter('rcPayId'$rcPayId);
  564.         
  565.         $event->addSnippet('@SlnPayment4/sln_shopping_quick_pay.twig');
  566.     }
  567.     /**
  568.      * 定期受注により受注変換完了時
  569.      * @param EventArgs $event
  570.      * @throws \Exception
  571.      */
  572.     public function onSlnServiceRegularNextorderComplete(EventArgs $event)
  573.     {
  574.         /* @var $Order \Plugin\SlnRegular4\Entity\SlnRegularOrder */
  575.         $Order $event->getArgument('Order');
  576.         
  577.         //プラグイン決済方法判断
  578.         $methodClass $Order->getPayment()->getMethodClass();
  579.         if (!MethodUtils::isSlnPaymentMethod($methodClass)) {
  580.             return;
  581.         }
  582.         
  583.         $event->setArgument('isSendMail'false);
  584.         
  585.         $cvs $this->container->get(Cvs::class);
  586.         
  587.         // トランザクション制御
  588.         $em $this->entityManager;
  589.         
  590.         $reUrl "";
  591.         
  592.         try {
  593.             
  594.             if (MethodUtils::isCvsMethod($methodClass)) {
  595.                 //決済状況を記録する
  596.                 $this->orderPaymentStatusRepository->unsettled($Order);
  597.                 
  598.                 //通信処理を行う
  599.                 list($reUrl$add) = $cvs->Add(
  600.                     $Order,
  601.                     $this->configRepository->getConfig(),
  602.                     $event->getRequest()->getSchemeAndHttpHost() . $this->util->generateUrl('shopping_complete'));
  603.                 
  604.                 $this->orderPaymentStatusRepository->requestSuccess($Order$add->getContent()->getAmount());
  605.             } else {
  606.                 
  607.                 $method $em->getRepository('\Plugin\SlnRegular4\Entity\SlnRegularPluginConfig')->getConfig()->getNextCreditMethod();
  608.                 
  609.                 //決済状況を記録する
  610.                 $this->orderPaymentStatusRepository->unsettled($Order);
  611.                 
  612.                 $master = new \Plugin\SlnPayment4\Service\SlnContent\Credit\Master();
  613.                 $card $this->container->get(Credit::class);
  614.                 
  615.                 list($KaiinId$KaiinPass) = $this->util->getNewKaiin($this->memCardIdRepository$Order->getCustomer(), $this->eccubeConfig->get('eccube_auth_magic'));
  616.                 $master->setKaiinId($KaiinId);
  617.                 $master->setKaiinPass($KaiinPass);
  618.                 
  619.                 $master->setPayType("01");
  620.                 
  621.                 if ($method == 1) {
  622.                     $card->Auth($Order$this->configRepository->getConfig(), $master);
  623.                     $this->orderPaymentStatusRepository->auth($Order$master->getAmount());
  624.                 } else {
  625.                     $card->Gathering($Order$this->configRepository->getConfig(), $master);
  626.                     $this->orderPaymentStatusRepository->capture($Order$master->getAmount());
  627.                 }
  628.             }
  629.         
  630.         } catch (SlnShoppingException $e) {
  631.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  632.         
  633.             if (MethodUtils::isCvsMethod($methodClass)) {
  634.                 $log sprintf("cvs shopping error:%s order_id(%s)"$e->getSlnErrorCode() . '|' $e->getSlnErrorName() . '|' $e->getSlnErrorDetail(), $Order->getId());
  635.                 $this->util->addCvsNotice($log);
  636.             } else {
  637.                 $log sprintf("card shopping error:%s order_id(%s)"$e->getSlnErrorCode() . '|' $e->getSlnErrorName() . '|' $e->getSlnErrorDetail(), $Order->getId());
  638.                 $this->util->addCardNotice($log);
  639.             }
  640.             
  641.             if ($e->checkSystemError()) {
  642.                 $this->util->addErrorLog($e->getSlnErrorName() . $e->getSlnErrorDetail() . 'order_id:' $Order->getId() . " " $e->getFile() . $e->getLine());
  643.             }
  644.         
  645.             $this->orderPaymentStatusRepository->fail($Order);
  646.             $event->setArgument('errorMess'sprintf('受注id:(%s) 決済処理が失敗しました(%s)'$Order->getId(), $log));
  647.             
  648.             return ;
  649.         
  650.         } catch (ShoppingException $e) {
  651.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  652.         
  653.             if (MethodUtils::isCvsMethod($methodClass)) {
  654.                 $log sprintf("cvs shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  655.                 $this->util->addCvsNotice($log);
  656.             } else {
  657.                 $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  658.                 $this->util->addCardNotice($log);
  659.             }
  660.             
  661.             $this->util->addErrorLog($log);
  662.             
  663.             $this->orderPaymentStatusRepository->fail($Order);
  664.             $event->setArgument('errorMess'sprintf('受注id:(%s) 決済処理失敗しました.(%s)'$Order->getId(), $log));
  665.             
  666.             return ;
  667.         } catch (\Exception $e) {
  668.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  669.         
  670.             if (MethodUtils::isCvsMethod($Order->getPayment()->getMethodClass())) {
  671.                 $log sprintf("cvs shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  672.                 $this->util->addCvsNotice($log);
  673.             } else {
  674.                 $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  675.                 $this->util->addCardNotice($log);
  676.             }
  677.             
  678.             $this->util->addErrorLog($log);
  679.             
  680.             $this->orderPaymentStatusRepository->fail($Order);
  681.             
  682.             throw new \Exception($e->getMessage());
  683.         }
  684.         
  685.         $event->setArgument('errorMess'null);
  686.         // メール送信
  687.         $this->mailService->sendOrderMail($Order$reUrl);
  688.     }
  689.     
  690.     /**
  691.      * 定期受注プラグインより支払い方法変更可能かの通知
  692.      */
  693.     public function onSlnServiceRegularMypageHistoryChangePayids(EventArgs $EventArgs)
  694.     {
  695.         $changePayIds $EventArgs->getArgument('changePayIds');
  696.         $cardType $this->paymentRepository->findOneBy(['method_class' => CreditCard::class]);
  697.         $cardRegistType $this->paymentRepository->findOneBy(['method_class' => RegisteredCreditCard::class]);
  698.         $changePayIds[] = $cardType->getId();
  699.         $changePayIds[] = $cardRegistType->getId();
  700.         $EventArgs->setArgument('changePayIds'$changePayIds);
  701.     }
  702.     /**
  703.      * 会員退会時にe-SCOTT会員無効化処理(Admin/CustomerEditController)
  704.      */
  705.     public function onAdminCustomerEditIndexInitialize(EventArgs $event)
  706.     {
  707.         $form $event->getArgument("builder")->getForm();
  708.         $oldStatusId $form->getData()
  709.             ->getStatus()
  710.             ->getId();
  711.         
  712.         // 削除完了時に実行
  713.         $this->eventDispatcher->addListener(EccubeEvents::ADMIN_CUSTOMER_EDIT_INDEX_COMPLETE, function (EventArgs $event) use ($oldStatusId) {
  714.             $config $this->configRepository->getConfig();
  715.             $user $event->getArgument("Customer");
  716.             $form $event->getArgument("form");
  717.             $newStatusId $form->getData()
  718.                 ->getStatus()
  719.                 ->getId();
  720.             
  721.             if ($oldStatusId != $newStatusId && $newStatusId == CustomerStatus::WITHDRAWING) {
  722.                 try {
  723.                     // 会員無効化のみで会員削除はしない
  724.                     $this->mem->MemInval($user$config);
  725.                 } catch (\Exception $e) {
  726.                     // エラーが発生しても正常にEC-CUBE会員退会処理を完了させるためキャッチ
  727.                 }
  728.             }
  729.         });
  730.     }
  731.     
  732.     /**
  733.      * 会員退会時にe-SCOTT会員無効化処理(Admin/CustomerController)
  734.      */
  735.     public function onAdminCustomerDeleteComplete(EventArgs $event){
  736.         //削除失敗時は処理を実行しない
  737.         if ($this->entityManager->isOpen()) {
  738.             $config $this->configRepository->getConfig();
  739.             $id $event->getRequest()->attributes->get("id");
  740.             
  741.             // 物理削除したIDをもつエンティティを再現
  742.             $user = new Customer();
  743.             $user->setPropertiesFromArray(["id" => $id]);
  744.             
  745.             try {
  746.                 // 会員無効化のみで会員削除はしない
  747.                 $this->mem->MemInval($user$config);
  748.             } catch (\Exception $e) {
  749.                 // エラーが発生しても正常にEC-CUBE会員退会処理を完了させるためキャッチ
  750.             }
  751.         }
  752.     }
  753.     
  754.     /**
  755.      * 会員退会時にe-SCOTT会員無効化処理(Mypage/WithdrawController)
  756.      */
  757.     public function onFrontMypageWithdrawComplete(EventArgs $event){
  758.         //削除失敗時は処理を実行しない
  759.         if ($this->entityManager->isOpen()) {
  760.             $config $this->configRepository->getConfig();
  761.             $user $this->container->get('security.token_storage')->getToken()->getUser();
  762.             
  763.             try {
  764.                 // 会員無効化のみで会員削除はしない
  765.                 $this->mem->MemInval($user$config);
  766.             } catch (\Exception $e) {
  767.                 // エラーが発生しても正常にEC-CUBE会員退会処理を完了させるためキャッチ
  768.             }
  769.         }
  770.     }
  771. }