app/Plugin/SlnPayment4/SlnPaymentEvent.php line 240

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