app/Plugin/SlnPayment41/SlnPaymentEvent.php line 302

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