app/Plugin/SlnPayment42/SlnPaymentEvent.php line 182

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