app/Plugin/GmoPaymentGateway42/Controller/MypageCardController.php line 78

Open in your IDE?
  1. <?php
  2. /*
  3.  * Copyright(c) 2022 GMO Payment Gateway, Inc. All rights reserved.
  4.  * http://www.gmo-pg.com/
  5.  */
  6. namespace Plugin\GmoPaymentGateway42\Controller;
  7. use Eccube\Controller\AbstractController;
  8. use Eccube\Entity\Customer;
  9. use Plugin\GmoPaymentGateway42\Entity\GmoConfig;
  10. use Plugin\GmoPaymentGateway42\Entity\GmoPaymentInput;
  11. use Plugin\GmoPaymentGateway42\Form\Type\MypageCardType;
  12. use Plugin\GmoPaymentGateway42\Repository\GmoConfigRepository;
  13. use Plugin\GmoPaymentGateway42\Service\FraudDetector;
  14. use Plugin\GmoPaymentGateway42\Service\Method\CreditCard;
  15. use Plugin\GmoPaymentGateway42\Service\PaymentHelperCredit;
  16. use Plugin\GmoPaymentGateway42\Service\PaymentHelperMember;
  17. use Plugin\GmoPaymentGateway42\Util\PaymentUtil;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  19. use Symfony\Component\Form\FormInterface;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  22. use Symfony\Component\Routing\Annotation\Route;
  23. class MypageCardController extends AbstractController
  24. {
  25.     /**
  26.      * @var Plugin\GmoPaymentGateway42\Entity\GmoConfig
  27.      */
  28.     protected $GmoConfig;
  29.     /**
  30.      * @var Plugin\GmoPaymentGateway42\Service\FraudDetector
  31.      */
  32.     protected $FraudDetector;
  33.     /**
  34.      * @var Plugin\GmoPaymentGateway42\Service\PaymentHelperCredit
  35.      */
  36.     protected $PaymentHelperCredit;
  37.     /**
  38.      * @var Plugin\GmoPaymentGateway42\Service\PaymentHelperMember
  39.      */
  40.     protected $PaymentHelperMember;
  41.     /**
  42.      * MypageCardController constructor.
  43.      *
  44.      * @param GmoConfigRepository $GmoConfigRepository
  45.      * @param FraudDetector $FraudDetector
  46.      * @param PaymentHelperCredit $PaymentHelperCredit
  47.      * @param PaymentHelperMember $PaymentHelperMember
  48.      */
  49.     public function __construct(
  50.         GmoConfigRepository $GmoConfigRepository,
  51.         FraudDetector $FraudDetector,
  52.         PaymentHelperCredit $PaymentHelperCredit,
  53.         PaymentHelperMember $PaymentHelperMember
  54.     ) {
  55.         $this->GmoConfig $GmoConfigRepository->get();
  56.         $this->FraudDetector $FraudDetector;
  57.         $this->PaymentHelperCredit $PaymentHelperCredit;
  58.         $this->PaymentHelperMember $PaymentHelperMember;
  59.         // 不正検知機能を初期化
  60.         $this->FraudDetector->initPaymentMethodClass(CreditCard::class);
  61.     }
  62.     /**
  63.      * カード情報一覧/編集画面を表示する.
  64.      *
  65.      * @Route("/mypage/gmo_card_edit", name="gmo_mypage_card_edit")
  66.      * @Template("@GmoPaymentGateway42/mypage_card.twig")
  67.      */
  68.     public function index(Request $request)
  69.     {
  70.         PaymentUtil::logInfo('MypageCardController::index start.');
  71.         if (!$this->PaymentHelperCredit->isAvailableCardEdit()) {
  72.             PaymentUtil::logError('Edit your card is not supported.');
  73.             throw new NotFoundHttpException();
  74.         }
  75.         $form $this->createForm(MypageCardType::class);
  76.         $form->handleRequest($request);
  77.         $Customer $this->getUser();
  78.         $cardList = [];
  79.         // GMO-PG 会員登録済みかどうかを確認
  80.         if (!$this->PaymentHelperMember->isExistGmoMember($Customer)) {
  81.             // GMO-PG 非会員の場合は登録する
  82.             if (!$this->PaymentHelperMember->saveGmoMember($Customer)) {
  83.                 $this->setErrorMessage();
  84.                 goto finish;
  85.             }
  86.         }
  87.         // 登録済みクレジットカードを検索
  88.         $cardList =
  89.             $this->PaymentHelperMember->searchCard($Customer, [], true);
  90.         // 不正検知の状態を取得
  91.         $isFraudDetect $this->FraudDetector->isLock();
  92.         // 登録/修正
  93.         if (!$isFraudDetect && $form->isSubmitted() && $form->isValid()) {
  94.             $GmoPaymentInput = new GmoPaymentInput();
  95.             $GmoPaymentInput->setFormData($form);
  96.             $sendData $GmoPaymentInput->getArrayData();
  97.             if (!$this->PaymentHelperMember
  98.                 ->saveCard($Customer$sendData$sendData['CardSeq'])) {
  99.                 $this->setErrorMessage();
  100.                 // エラーを記録して最新の不正検知状態を取得
  101.                 $isFraudDetect $this->FraudDetector->errorOccur();
  102.                 goto finish;
  103.             }
  104.             // フォームを初期化
  105.             $form $this->createForm(MypageCardType::class);
  106.             // 登録済みクレジットカードを再検索
  107.             $cardList =
  108.                 $this->PaymentHelperMember->searchCard($Customer, [], true);
  109.             $msg 'gmo_payment_gateway.mypage.card_edit.append.success';
  110.             if ($sendData['CardSeq'] != "") {
  111.                 $msg 'gmo_payment_gateway.mypage.card_edit.modify.success';
  112.             }
  113.             $this->addSuccess(trans($msg));
  114.         }
  115.     finish:
  116.         // 不正が検出された場合はメッセージを表示
  117.         if ($isFraudDetect) {
  118.             $this->addDanger(trans(
  119.                 'gmo_payment_gateway.mypage.card_edit.fraud.detect.lock',
  120.                 ['%ip%' => $this->FraudDetector->getRemoteAddr()]
  121.             ));
  122.         }
  123.         PaymentUtil::logInfo('MypageCardController::index end.');
  124.         return [
  125.             'form' => $form->createView(),
  126.             'cardList' => $cardList,
  127.             'GmoConfig' => $this->GmoConfig,
  128.             'isFraudDetect' => $isFraudDetect,
  129.         ];
  130.     }
  131.     /**
  132.      * クレジットカード削除
  133.      *
  134.      * @Route("/mypage/gmo_card_edit/delete", name="gmo_mypage_card_edit_delete")
  135.      */
  136.     public function delete(Request $request)
  137.     {
  138.         PaymentUtil::logInfo('MypageCardController::delete start.');
  139.         if (!$this->PaymentHelperCredit->isAvailableCardEdit()) {
  140.             PaymentUtil::logError('Edit your card is not supported.');
  141.             throw new NotFoundHttpException();
  142.         }
  143.         $form $this->createForm(MypageCardType::class);
  144.         $form->handleRequest($request);
  145.         // 削除処理
  146.         if ($form->isSubmitted() && $form->isValid()) {
  147.             $delete_card_seq $request->get('delete_card_seq');
  148.             PaymentUtil::logInfo($delete_card_seq);
  149.             if (!is_array($delete_card_seq)) {
  150.                 $msg 'Delete CardSeq is not array.';
  151.                 PaymentUtil::logError($msg);
  152.                 $this->addDanger($msg);
  153.             } else {
  154.                 $Customer $this->getUser();
  155.                 foreach ($delete_card_seq as $card_seq) {
  156.                     $sendData = ['CardSeq' => $card_seq];
  157.                     if (!$this->PaymentHelperMember
  158.                         ->deleteCard($Customer$sendData)) {
  159.                         $this->setErrorMessage();
  160.                     }
  161.                 }
  162.                 $this->addSuccess(trans('gmo_payment_gateway.' .
  163.                                         'mypage.card_edit.delete.success'));
  164.             }
  165.         }
  166.         PaymentUtil::logInfo('MypageCardController::delete end.');
  167.         return $this->redirect($this->generateUrl('gmo_mypage_card_edit'));
  168.     }
  169.     /**
  170.      * 処理エラーのメッセージを作成する
  171.      */
  172.     private function setErrorMessage()
  173.     {
  174.         $errors $this->PaymentHelperMember->getError();
  175.         foreach ($errors as $errMess) {
  176.             $this->addDanger($errMess);
  177.             PaymentUtil::logError($errMess);
  178.         }
  179.     }
  180. }