app/Plugin/RemisePayment42/Controller/PaymentController.php line 1227

Open in your IDE?
  1. <?php
  2. namespace Plugin\RemisePayment42\Controller;
  3. use Eccube\Common\Constant;
  4. use Eccube\Common\EccubeConfig;
  5. use Eccube\Controller\AbstractController;
  6. use Eccube\Entity\Master\OrderStatus;
  7. use Eccube\Entity\Order;
  8. use Eccube\Entity\Payment;
  9. use Eccube\Entity\Plugin;
  10. use Eccube\Service\CartService;
  11. use Eccube\Service\MailService;
  12. use Eccube\Service\PurchaseFlow\PurchaseContext;
  13. use Eccube\Service\PurchaseFlow\PurchaseFlow;
  14. use Eccube\Repository\OrderItemRepository;
  15. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  16. use Symfony\Component\HttpFoundation\ParameterBag;
  17. use Symfony\Component\HttpFoundation\Request;
  18. use Symfony\Component\HttpFoundation\Response;
  19. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  20. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  23. use Plugin\RemisePayment42\Entity\Config;
  24. use Plugin\RemisePayment42\Entity\ConfigInfo;
  25. use Plugin\RemisePayment42\Entity\OrderResult;
  26. use Plugin\RemisePayment42\Entity\OrderResultCard;
  27. use Plugin\RemisePayment42\Entity\OrderResultCvs;
  28. use Plugin\RemisePayment42\Entity\Payquick;
  29. use Plugin\RemisePayment42\Entity\RemisePayment;
  30. use Plugin\RemisePayment42\Entity\RemiseACMember;
  31. use Plugin\RemisePayment42\Service\LogService;
  32. use Plugin\RemisePayment42\Service\UtilService;
  33. use Plugin\RemisePayment42\Service\AcService;
  34. use Plugin\RemisePayment42\Repository\RemiseACMemberRepository;
  35. use Plugin\RemisePayment42\Repository\RemiseTaxRateRepository;
  36. use Plugin\RemisePayment42\Repository\Emv3dsRepository;
  37. /**
  38.  * 決済処理用
  39.  */
  40. class PaymentController extends AbstractController
  41. {
  42.     /**
  43.      * @var EccubeConfig
  44.      */
  45.     protected $eccubeConfig;
  46.     /**
  47.      * @var SessionInterface
  48.      */
  49.     protected $session;
  50.     /**
  51.      * @var ParameterBag
  52.      */
  53.     protected $parameterBag;
  54.     /**
  55.      * @var CartService
  56.      */
  57.     protected $cartService;
  58.     /**
  59.      * @var MailService
  60.      */
  61.     protected $mailService;
  62.     /**
  63.      * @var PurchaseFlow
  64.      */
  65.     private $purchaseFlow;
  66.     /**
  67.      * @var UtilService
  68.      */
  69.     protected $utilService;
  70.     /**
  71.      * @var LogService
  72.      */
  73.     protected $logService;
  74.     /**
  75.      * @var AcService
  76.      */
  77.     protected $acService;
  78.     /**
  79.      *
  80.      * @var RemiseACMemberRepository
  81.      */
  82.     protected $remiseACMemberRepository;
  83.     /**
  84.      * @var RemiseTaxRateRepository
  85.      */
  86.     protected $remiseTaxRateRepository;
  87.     /**
  88.      *
  89.      * @var OrderItemRepository
  90.      */
  91.     protected $orderItemRepository;
  92.     /**
  93.      *
  94.      * @var Emv3dsRepository
  95.      */
  96.     private $emv3dsRepository;
  97.     /**
  98.      * コンストラクタ
  99.      *
  100.      * @param EccubeConfig $eccubeConfig
  101.      * @param SessionInterface $session
  102.      * @param ParameterBag $parameterBag
  103.      * @param CartService $cartService
  104.      * @param MailService $mailService
  105.      * @param PurchaseFlow $shoppingPurchaseFlow
  106.      * @param UtilService $utilService
  107.      * @param LogService $logService
  108.      * @param AcService $acService
  109.      * @param RemiseACMemberRepository $remiseACMemberRepository
  110.      * @param RemiseTaxRateRepository $remiseTaxRateRepository
  111.      * @param OrderItemRepository $orderItemRepository
  112.      * @param Emv3dsRepository $emv3dsRepository
  113.      */
  114.     public function __construct(
  115.         EccubeConfig $eccubeConfig,
  116.         SessionInterface $session,
  117.         ParameterBag $parameterBag,
  118.         CartService $cartService,
  119.         MailService $mailService,
  120.         PurchaseFlow $shoppingPurchaseFlow,
  121.         UtilService $utilService,
  122.         LogService $logService,
  123.         AcService $acService,
  124.         RemiseACMemberRepository $remiseACMemberRepository,
  125.         RemiseTaxRateRepository $remiseTaxRateRepository,
  126.         OrderItemRepository $orderItemRepository,
  127.         Emv3dsRepository $emv3dsRepository
  128.         ) {
  129.         $this->eccubeConfig $eccubeConfig;
  130.         $this->session $session;
  131.         $this->parameterBag $parameterBag;
  132.         $this->cartService $cartService;
  133.         $this->mailService $mailService;
  134.         $this->purchaseFlow $shoppingPurchaseFlow;
  135.         $this->utilService $utilService;
  136.         $this->logService $logService;
  137.         $this->acService $acService;
  138.         $this->remiseACMemberRepository $remiseACMemberRepository;
  139.         $this->remiseTaxRateRepository $remiseTaxRateRepository;
  140.         $this->orderItemRepository $orderItemRepository;
  141.         $this->emv3dsRepository $emv3dsRepository;
  142.     }
  143.     /**
  144.      * 決済画面の呼び出し
  145.      *
  146.      * @param  $request
  147.      *
  148.      * @Route("/shopping/remise_payment", name="remise_payment")
  149.      * @Template("@RemisePayment42/redirect.twig")
  150.      */
  151.     public function payment(Request $request)
  152.     {
  153.         $this->logService->logInfo('Payment');
  154.         // 受注情報の取得
  155.         $Order $this->parameterBag->get('remise.Order');
  156.         if (!$Order)
  157.         {
  158.             $this->logService->logError('Payment -- Not Found Order');
  159.             $this->addError(trans('remise_payment4.front.text.notfound.order'));
  160.             return $this->redirectToRoute('shopping');
  161.         }
  162.         $orderNo $Order->getOrderNo();
  163.         if ($this->getUser() != $Order->getCustomer())
  164.         {
  165.             $this->logService->logError('Payment -- Unmatch Customer (' $orderNo ')');
  166.             $this->addError(trans('remise_payment4.front.text.notfound.order'));
  167.             return $this->redirectToRoute('shopping');
  168.         }
  169.         // EC-CUBE支払方法の取得
  170.         $Payment $Order->getPayment();
  171.         if (!$Payment)
  172.         {
  173.             $this->logService->logError('Payment -- Not Found Payment (' $orderNo ')');
  174.             $this->addError(trans('remise_payment4.front.text.invalid.payment'));
  175.             return $this->redirectToRoute('shopping');
  176.         }
  177.         $paymentId $Payment->getId();
  178.         // ルミーズ支払方法の取得
  179.         $RemisePayment $this->utilService->getRemisePayment($paymentId);
  180.         if (!$RemisePayment)
  181.         {
  182.             $this->logService->logError('Payment -- Unmatch Payment (' $orderNo ')');
  183.             $this->addError(trans('remise_payment4.front.text.invalid.payment'));
  184.             return $this->redirectToRoute('shopping');
  185.         }
  186.         // プラグイン設定情報の取得
  187.         $ConfigInfo $this->utilService->getConfigInfo();
  188.         if (!$ConfigInfo)
  189.         {
  190.             $this->logService->logError('Payment -- Not Found Config');
  191.             $this->addError(trans('remise_payment4.front.text.unsetting.plugin'));
  192.             return $this->redirectToRoute('shopping');
  193.         }
  194.         $sendUrl '';
  195.         $sendData = array();
  196.         // 決済履歴の生成
  197.         $OrderResult $this->utilService->createOrderResult($Order);
  198.         $OrderResult->setRequestDate(new \DateTime());
  199.         $OrderResult->setUpdateDate(new \DateTime());
  200.         $OrderResultCard null;
  201.         $OrderResultCvs null;
  202.         // カード決済
  203.         if ($RemisePayment->getKind() == trans('remise_payment4.common.label.payment.kind.card'))
  204.         {
  205.             // 決済情報送信先URL
  206.             $sendUrl $ConfigInfo->getCardUrl();
  207.             // カード決済用送信データの取得
  208.             $sendData $this->getCardSendData($Order$ConfigInfo);
  209.             // 定期購買が有効の場合
  210.             if($ConfigInfo->useOptionAC())
  211.             {
  212.                 // カード決済用送信データの取得(定期購買)
  213.                 $sendData $this->getCardSendDataAC($Order$sendData);
  214.             }
  215.             // カード決済用送信データの取得(EMV3Dセキュア)
  216.             $sendData $this->getCardSendDataEMV3DS($Order$sendData);
  217.             // 決済履歴の設定
  218.             $OrderResult->setKind(trans('remise_payment4.common.label.payment.kind.card'));
  219.             // カード決済履歴詳細の生成
  220.             $OrderResultCard $this->utilService->createOrderResultCard($Order);
  221.             $OrderResultCard->setUsePayquickId($sendData['PAYQUICKID']);
  222.             $OrderResultCard->setState(trans('remise_payment4.common.label.card.state.payment'));
  223.             $OrderResultCard->setJob($sendData['JOB']);
  224.             $OrderResultCard->setUpdateDate(new \DateTime());
  225.             // マルチ決済履歴詳細が存在する場合
  226.             $OrderResultCvs $this->utilService->getOrderResultCvs($Order->getId());
  227.             if ($OrderResultCvs)
  228.             {
  229.                 // マルチ決済履歴詳細を削除
  230.                 $this->utilService->deleteOrderResultCvs($OrderResultCvs);
  231.                 $this->entityManager->flush();
  232.                 $OrderResultCvs null;
  233.             }
  234.         }
  235.         // マルチ決済
  236.         else if ($RemisePayment->getKind() == trans('remise_payment4.common.label.payment.kind.cvs'))
  237.         {
  238.             // 決済情報送信先URL
  239.             $sendUrl $ConfigInfo->getCvsUrl();
  240.             // マルチ決済用送信データの取得
  241.             $sendData $this->getCvsSendData($Order$ConfigInfo);
  242.             // 決済履歴の設定
  243.             $OrderResult->setKind(trans('remise_payment4.common.label.payment.kind.cvs'));
  244.             // マルチ決済履歴詳細の生成
  245.             $OrderResultCvs $this->utilService->createOrderResultCvs($Order);
  246.             $OrderResultCvs->setUpdateDate(new \DateTime());
  247.             // カード決済履歴詳細が存在する場合
  248.             $OrderResultCard $this->utilService->getOrderResultCard($Order->getId());
  249.             if ($OrderResultCard)
  250.             {
  251.                 // カード決済履歴詳細を削除
  252.                 $this->utilService->deleteOrderResultCard($OrderResultCard);
  253.                 $this->entityManager->flush();
  254.                 $OrderResultCard null;
  255.             }
  256.         }
  257.         // 決済履歴の登録
  258.         $this->logService->logInfo('Payment -- Save OrderResult (' $orderNo ')');
  259.         $this->entityManager->persist($OrderResult);
  260.         $this->entityManager->flush($OrderResult);
  261.         // カード決済履歴詳細の登録
  262.         if (!empty($OrderResultCard))
  263.         {
  264.             $this->logService->logInfo('Payment -- Save OrderResultCard (' $orderNo ')');
  265.             $this->entityManager->persist($OrderResultCard);
  266.             $this->entityManager->flush($OrderResultCard);
  267.         }
  268.         // マルチ決済履歴詳細の登録
  269.         if (!empty($OrderResultCvs))
  270.         {
  271.             $this->logService->logInfo('Payment -- Save OrderResultCvs (' $orderNo ')');
  272.             $this->entityManager->persist($OrderResultCvs);
  273.             $this->entityManager->flush($OrderResultCvs);
  274.         }
  275.         $this->logService->logInfo('Payment -- Done');
  276.         return [
  277.             'send_url'  => $sendUrl,
  278.             'send_data' => $sendData,
  279.         ];
  280.     }
  281.     /**
  282.      * カード決済用送信データの取得
  283.      *
  284.      * @param  $Order  受注情報
  285.      * @param  $ConfigInfo  設定情報
  286.      *
  287.      * @return  $sendData  送信データ
  288.      */
  289.     private function getCardSendData($Order$ConfigInfo)
  290.     {
  291.         // プラグイン情報の取得
  292.         $Plugin $this->utilService->getPlugin();
  293.         $exitUrl $this->generateUrl('remise_payment4_back', ['no' => $Order->getOrderNo()], UrlGeneratorInterface::ABSOLUTE_URL);
  294.         $retUrl $this->generateUrl('remise_payment4_result_card', [], UrlGeneratorInterface::ABSOLUTE_URL);
  295.         $ngRetUrl $this->generateUrl('remise_payment4_result_card', [], UrlGeneratorInterface::ABSOLUTE_URL);
  296.         $method '';
  297.         $ptimes '';
  298.         $payquick '';
  299.         $payquickId '';
  300.         // 会員の購入処理でペイクイック利用の場合
  301.         if ($Order->getCustomer() && $ConfigInfo->getPayquickFlag() === '1')
  302.         {
  303.             // セッションから取得
  304.             //   ペイクイック利用
  305.             $work $this->session->get('remise_payment4.use_payquick.' $Order->getId());
  306.             if (!is_null($work) && $work == '1')
  307.             {
  308.                 // ペイクイック情報の取得
  309.                 $Payquick $this->utilService->getPayquickByCustomer($Order->getCustomer());
  310.                 if ($Payquick)
  311.                 {
  312.                     $payquickId $Payquick->getPayquickId();
  313.                 }
  314.             }
  315.             //   支払方法
  316.             $work $this->session->get('remise_payment4.method.' $Order->getId());
  317.             if (!is_null($work))
  318.             {
  319.                 $method $work;
  320.             }
  321.             //   分割回数
  322.             if ($method == '61')
  323.             {
  324.                 $work $this->session->get('remise_payment4.ptimes.' $Order->getId());
  325.                 if (!is_null($work))
  326.                 {
  327.                     $ptimes $work;
  328.                 }
  329.             }
  330.             //   クレジットカード登録
  331.             $work $this->session->get('remise_payment4.regist_payquick.' $Order->getId());
  332.             if (!is_null($work) && $work == '1')
  333.             {
  334.                 $payquick '1';
  335.             }
  336.         }
  337.         $sendData = array();
  338.         $sendData['ECCUBE_VER']     = Constant::VERSION;            // EC-CUBEバージョン番号
  339.         if ($Plugin)
  340.         {
  341.             $sendData[$Plugin->getCode() . '_PLG_VER'] = $Plugin->getVersion(); // ルミーズ決済プラグインバージョン番号
  342.         }
  343.         $sendData['SHOPCO']         = $ConfigInfo->getShopco();     // 加盟店コード
  344.         $sendData['HOSTID']         = $ConfigInfo->getHostid();     // ホストID
  345.         $sendData['S_TORIHIKI_NO']  = $Order->getOrderNo();         // 請求番号
  346.         $sendData['JOB']            = $ConfigInfo->getJob();        // 処理区分
  347.         $sendData['CARD']           = '';                           // カード番号、セキュリティコード
  348.         $sendData['EXPIRE']         = '';                           // 有効期限
  349.         $sendData['NAME']           = '';                           // 名義人
  350.         $sendData['MAIL']           = $Order->getEmail();           // e-mail
  351.         $sendData['FORWARD']        = '';                           // 仕向先コード
  352.         $sendData['ITEM']           = '0000120';                    // 商品コード
  353.         $sendData['AMOUNT']         = round($Order->getPaymentTotal()); // 金額
  354.         $sendData['TAX']            = '0';                          // 税送料
  355.         $sendData['TOTAL']          = round($Order->getPaymentTotal()); // 合計金額
  356.         $sendData['METHOD']         = $method;                      // 支払区分
  357.         $sendData['PTIMES']         = $ptimes;                      // 分割回数
  358.         $sendData['BTIMES']         = '';                           // ボーナス回数
  359.         $sendData['BAMOUNT']        = '';                           // ボーナス金額
  360.         $sendData['EXITURL']        = $exitUrl;                     // 中止URL
  361.         $sendData['RETURL']         = $retUrl;                      // 完了通知URL
  362.         $sendData['DIRECT']         = 'OFF';                        // ダイレクトモード
  363.         $sendData['OPT']            = '';                           // オプション
  364.         $sendData['NG_RETURL']      = $ngRetUrl;                    // NG完了通知URL
  365.         $sendData['PAYQUICK']       = $payquick;                    // ペイクイック機能
  366.         $sendData['PAYQUICKID']     = $payquickId;                  // ペイクイックID
  367.         $sendData['REMARKS3']       = 'A0000155';                   // 代理店コード
  368.         if ($Order->getCustomer())
  369.         {
  370.             $sendData['REMARKS5']   = $Order->getCustomer()->getId();
  371.         }
  372.         $sendData['AUTOCHARGE']     = '';                           // 自動継続課金
  373.         $sendData['AC_MEMBERID']    = '';                           // メンバーID
  374.         $sendData['AC_S_KAIIN_NO']  = '';                           // 加盟店会員番号
  375.         $sendData['AC_NAME']        = '';                           // 会員名
  376.         $sendData['AC_KANA']        = '';                           // 会員名カナ
  377.         $sendData['AC_TEL']         = '';                           // 会員電話番号
  378.         $sendData['AC_AMOUNT']      = '';                           // 金額
  379.         $sendData['AC_TAX']         = '';                           // 税送料
  380.         $sendData['AC_TOTAL']       = '';                           // 合計金額
  381.         $sendData['AC_NEXT_DATE']   = '';                           // 次回課金日
  382.         $sendData['AC_INTERVAL']    = '';                           // 決済間隔
  383.         $sendData['AC_COUNT']       = '';                           // 決済回数
  384.         $this->logService->logInfo('Payment -- Create Card Info', [
  385.             'S_TORIHIKI_NO' => $sendData['S_TORIHIKI_NO'],
  386.             'JOB'           => $sendData['JOB'],
  387.             'MAIL'          => $sendData['MAIL'],
  388.             'AMOUNT'        => $sendData['AMOUNT'],
  389.             'TAX'           => $sendData['TAX'],
  390.             'TOTAL'         => $sendData['TOTAL'],
  391.             'METHOD'        => $sendData['METHOD'],
  392.             'PAYQUICK'      => $sendData['PAYQUICK'],
  393.         ]);
  394.         return $sendData;
  395.     }
  396.     /**
  397.      * カード決済用送信データの取得(定期購買)
  398.      *
  399.      * @param  $Order  受注情報
  400.      * @param  $sendData  設定情報
  401.      *
  402.      * @return  $sendData  送信データ
  403.      */
  404.     private function getCardSendDataAC($Order$sendData)
  405.     {
  406.         // 定期購買商品でない場合は処理を抜ける
  407.         if(!$this->acService->checkACOrder($Order))
  408.         {
  409.             return $sendData;
  410.         }
  411.         // 加盟店会員番号取得
  412.         $Customer $Order->getCustomer();
  413.         if($Customer){
  414.             // 会員
  415.             $CustomerId $Customer->getId();
  416.         }else{
  417.             // 非会員
  418.             $CustomerId '';
  419.         }
  420.         // 会員名取得
  421.         $name1 mb_convert_kana($Order->getName01(), "ASKHV""UTF-8");
  422.         $name2 mb_convert_kana($Order->getName02(), "ASKHV""UTF-8");
  423.         // 会員名カナ取得
  424.         $kana1 mb_convert_kana($Order->getKana01(), "ASKHV""UTF-8");
  425.         $kana2 mb_convert_kana($Order->getKana02(), "ASKHV""UTF-8");
  426.         // 会員電話番号取得
  427.         $tel   $Order->getPhoneNumber();
  428.         // ルミーズ定期購買情報作成
  429.         $remiseACMember = new RemiseACMember();
  430.         $remiseACMember $this->acService->createRemiseACMember($Order);
  431.         $sendData['AUTOCHARGE']     = trans('remise_payment4.ac.front.payment.senddata.autocharge'); // 自動継続課金
  432.         $sendData['AC_MEMBERID']    = '';                             // メンバーID
  433.         $sendData['AC_S_KAIIN_NO']  = $CustomerId;                    // 加盟店会員番号
  434.         $sendData['AC_NAME']        = $name1.$name2;                  // 会員名
  435.         $sendData['AC_KANA']        = $kana1.$kana2;                  // 会員名カナ
  436.         $sendData['AC_TEL']         = $tel;                           // 会員電話番号
  437.         $sendData['AC_AMOUNT']      = $remiseACMember->getTotal();    // 金額
  438.         $sendData['AC_TAX']         = trans('remise_payment4.ac.front.payment.senddata.ac_tax');     // 税送料
  439.         $sendData['AC_TOTAL']       = $remiseACMember->getTotal();    // 合計金額
  440.         $sendData['AC_NEXT_DATE']   = $remiseACMember->getNextDateStr(); // 次回課金日
  441.         $sendData['AC_INTERVAL']    = strval($remiseACMember->getIntervalValue()).strval($remiseACMember->getIntervalMark());  // 決済間隔
  442.         $sendData['AC_COUNT']       = $remiseACMember->getCount();    // 決済回数
  443.         // 初回金額0円の場合、有効性チェック(CHECK)に変更する
  444.         if(round($Order->getPaymentTotal()) == 0){
  445.             $sendData['JOB']        = trans('remise_payment4.ac.front.payment.senddata.job.check');
  446.         }
  447.         $this->logService->logInfo('Payment -- Create Card AC Info', [
  448.             'AUTOCHARGE'     => $sendData['AUTOCHARGE'],
  449.             'AC_MEMBERID'    => $sendData['AC_MEMBERID'],
  450.             'AC_S_KAIIN_NO'  => $sendData['AC_S_KAIIN_NO'],
  451.             'AC_AMOUNT'      => $sendData['AC_AMOUNT'],
  452.             'AC_TAX'         => $sendData['AC_TAX'],
  453.             'AC_TOTAL'       => $sendData['AC_TOTAL'],
  454.             'AC_NEXT_DATE'   => $sendData['AC_NEXT_DATE'],
  455.             'AC_INTERVAL'    => $sendData['AC_INTERVAL'],
  456.             'AC_COUNT'       => $sendData['AC_COUNT']
  457.         ]);
  458.         return $sendData;
  459.     }
  460.     /**
  461.      * マルチ決済用送信データの取得
  462.      *
  463.      * @param  $Order  受注情報
  464.      * @param  $ConfigInfo  設定情報
  465.      *
  466.      * @return  $sendData  送信データ
  467.      */
  468.     private function getCvsSendData($Order$ConfigInfo)
  469.     {
  470.         // プラグイン情報の取得
  471.         $Plugin $this->utilService->getPlugin();
  472.         $name1 mb_convert_kana($Order->getName01(), "ASKHV""UTF-8");
  473.         $name2 mb_convert_kana($Order->getName02(), "ASKHV""UTF-8");
  474.         $kana1 mb_convert_kana($Order->getKana01(), "ASKHV""UTF-8");
  475.         $kana2 mb_convert_kana($Order->getKana02(), "ASKHV""UTF-8");
  476.         $yubin1 '';
  477.         $yubin2 '';
  478.         if (strlen($Order->getPostalCode()) == 7)
  479.         {
  480.             $yubin1 substr($Order->getPostalCode(), 03);
  481.             $yubin2 substr($Order->getPostalCode(), 34);
  482.         }
  483.         $add1 mb_convert_kana($Order->getPref()->getName(), "ASKHV""UTF-8");
  484.         $add2 mb_convert_kana($Order->getAddr01(), "ASKHV""UTF-8");
  485.         $add3 mb_convert_kana($Order->getAddr02(), "ASKHV""UTF-8");
  486.         $payDate '';
  487.         if ($ConfigInfo->getPayDate() !== "")
  488.         {
  489.             $payDate date("Ymd"strtotime("+" $ConfigInfo->getPayDate() . "day"));
  490.         }
  491.         $exitUrl $this->generateUrl('remise_payment4_back', ['no' => $Order->getOrderNo()], UrlGeneratorInterface::ABSOLUTE_URL);
  492.         $retUrl $this->generateUrl('remise_payment4_result_cvs', [], UrlGeneratorInterface::ABSOLUTE_URL);
  493.         $ngRetUrl $this->generateUrl('remise_payment4_result_cvs', [], UrlGeneratorInterface::ABSOLUTE_URL);
  494.         $sendData = array();
  495.         $sendData['ECCUBE_VER']     = Constant::VERSION;            // EC-CUBEバージョン番号
  496.         if ($Plugin)
  497.         {
  498.             $sendData[$Plugin->getCode() . '_PLG_VER'] = $Plugin->getVersion(); // ルミーズ決済プラグインバージョン番号
  499.         }
  500.         // 税率設定取得
  501.         $currentTaxRate $this->remiseTaxRateRepository->getCurrentTaxRate();
  502.         // 受注情報詳細リスト
  503.         $OrderItems $this->orderItemRepository->findBy(['Order' => $Order->getId() ],['OrderItemType' => 'ASC']);
  504.         // 受注情報詳細リストから商品明細の受注情報詳細を取得
  505.         $productTax 0;
  506.         foreach ($OrderItems as $tmpOrderItem){
  507.             if($tmpOrderItem->isProduct()){
  508.                 $productTax $productTax $tmpOrderItem->getTax();
  509.             }
  510.         }
  511.         // 送料(税込)
  512.         $deliveryFeeTotal $Order->getDeliveryFeeTotal();
  513.         // 手数料(税込)
  514.         $charge $Order->getCharge();
  515.         // 送料の消費税額
  516.         if ($currentTaxRate->getCalcRule() == 1) {
  517.             // 四捨五入 stringでキャストを行うことで、丸め誤差を回避する
  518.             $deliveryFeeTotal_tax round( (string)( $deliveryFeeTotal - ( $deliveryFeeTotal / (+ ( $currentTaxRate->getTaxRate() / 100) ) ) ) );
  519.         } else if ($currentTaxRate->getCalcRule() == 2) {
  520.             // 切り捨て stringでキャストを行うことで、丸め誤差を回避する
  521.             $deliveryFeeTotal_tax floor( (string)( $deliveryFeeTotal - ( $deliveryFeeTotal / (+ ( $currentTaxRate->getTaxRate() / 100) ) ) ) );
  522.         } else if ($currentTaxRate->getCalcRule() == 3) {
  523.             // 切り上げ stringでキャストを行うことで、丸め誤差を回避する
  524.             $deliveryFeeTotal_tax ceil( (string)( $deliveryFeeTotal - ( $deliveryFeeTotal / (+ ( $currentTaxRate->getTaxRate() / 100) ) ) ) );
  525.         }
  526.         // 手数料の消費税額
  527.         if ($currentTaxRate->getCalcRule() == 1) {
  528.             // 四捨五入 stringでキャストを行うことで、丸め誤差を回避する
  529.             $charge_tax round( (string)( $charge - ( $charge / (+ ( $currentTaxRate->getTaxRate() / 100) ) ) ) );
  530.         } else if ($currentTaxRate->getCalcRule() == 2) {
  531.             // 切り捨て stringでキャストを行うことで、丸め誤差を回避する
  532.             $charge_tax floor( (string)( $charge - ( $charge / (+ ( $currentTaxRate->getTaxRate() / 100) ) ) ) );
  533.         } else if ($currentTaxRate->getCalcRule() == 3) {
  534.             // 切り上げ stringでキャストを行うことで、丸め誤差を回避する
  535.             $charge_tax ceil( (string)( $charge - ( $charge / (+ ( $currentTaxRate->getTaxRate() / 100) ) ) ) );
  536.         }
  537.         // TAX = 商品の消費税 + 送料の消費税 + 手数料の消費税
  538.         $tax $productTax $deliveryFeeTotal_tax $charge_tax;
  539.         // TOTAL = 合計金額 - 商品の消費税 - 送料の消費税 - 手数料の消費税
  540.         $total $Order->getPaymentTotal() - $tax;
  541.         $sendData['SHOPCO']         = $ConfigInfo->getShopco();     // 加盟店コード
  542.         $sendData['HOSTID']         = $ConfigInfo->getHostid();     // ホストID
  543.         $sendData['S_TORIHIKI_NO']  = $Order->getOrderNo();         // 請求番号
  544.         $sendData['NAME1']          = $name1;                       // 顧客名1
  545.         $sendData['NAME2']          = $name2;                       // 顧客名2
  546.         $sendData['KANA1']          = $kana1;                       // 顧客名カナ1
  547.         $sendData['KANA2']          = $kana2;                       // 顧客名カナ2
  548.         $sendData['YUBIN1']         = $yubin1;                      // 郵便番号1
  549.         $sendData['YUBIN2']         = $yubin2;                      // 郵便番号2
  550.         $sendData['ADD1']           = $add1;                        // 住所1
  551.         $sendData['ADD2']           = $add2;                        // 住所2
  552.         $sendData['ADD3']           = $add3;                        // 住所3
  553.         $sendData['TEL']            = $Order->getPhoneNumber();     // 電話番号
  554.         $sendData['MAIL']           = $Order->getEmail();           // e-mail
  555.         $sendData['TOTAL']          = round($Order->getPaymentTotal()); // 合計金額
  556.         $sendData['TAX']            = $tax;                         // 税送料
  557.         $sendData['S_PAYDATE']      = $payDate;                     // 支払期限
  558.         $sendData['SEIYAKUDATE']    = '';                           // 成約日
  559.         $sendData['REMARKS3']       = 'A0000155';                   // 代理店コード
  560.         $sendData['BIKO']           = '';                           // 備考
  561.         $sendData['PAY_WAY']        = '';                           // 支払方法コード
  562.         $sendData['PAY_CSV']        = '';                           // 支払先コード
  563.         $sendData['MNAME_01']       = '商品代金';                   // 明細品名1(最大7個のため、商品代金として全体で出力する)
  564.         $sendData['MSUM_01']        = $total;                       // 明細金額1
  565.         $sendData['EXITURL']        = $exitUrl;                     // 中止URL
  566.         $sendData['RETURL']         = $retUrl;                      // 完了通知URL
  567.         $sendData['DIRECT']         = 'OFF';                        // ダイレクトモード
  568.         $sendData['OPT']            = '';                           // オプション
  569.         $sendData['NG_RETURL']      = $ngRetUrl;                    // NG完了通知URL
  570.         $this->logService->logInfo('Payment -- Create Cvs Info', [
  571.             'S_TORIHIKI_NO' => $sendData['S_TORIHIKI_NO'],
  572.             'NAME1'         => $sendData['NAME1'],
  573.             'NAME2'         => $sendData['NAME2'],
  574.             'MAIL'          => $sendData['MAIL'],
  575.             'TOTAL'         => $sendData['TOTAL'],
  576.             'S_PAYDATE'     => $sendData['S_PAYDATE'],
  577.         ]);
  578.         return $sendData;
  579.     }
  580.     /**
  581.      * 決済画面から加盟店へ戻る
  582.      *
  583.      * @param  $request
  584.      *
  585.      * @Route("/remise_payment4_back", name="remise_payment4_back")
  586.      */
  587.     public function back(Request $request)
  588.     {
  589.         $this->logService->logInfo('Payment Back');
  590.         $orderNo $request->get('no');
  591.         if (empty($orderNo))
  592.         {
  593.             $this->logService->logError('Payment Back -- Empty Id');
  594.             $this->addError(trans('remise_payment4.front.text.notfound.order'));
  595.             return $this->redirectToRoute('shopping');
  596.         }
  597.         // 受注情報の取得
  598.         $Order $this->utilService->getOrderByPending($orderNo);
  599.         if (!$Order)
  600.         {
  601.             $this->logService->logError('Payment Back -- Not Found Order (' $orderNo ')');
  602.             $this->addError(trans('remise_payment4.front.text.notfound.order'));
  603.             return $this->redirectToRoute('shopping');
  604.         }
  605.         if ($this->getUser() != $Order->getCustomer())
  606.         {
  607.             $this->logService->logError('Payment Back -- Unmatch Customer (' $orderNo ')');
  608.             $this->addError(trans('remise_payment4.front.text.notfound.order'));
  609.             return $this->redirectToRoute('shopping');
  610.         }
  611.         // 購入処理をロールバック
  612.         $this->logService->logInfo('Payment Back -- Rollback Order (' $orderNo ')');
  613.         $this->rollbackOrder($Order);
  614.         $this->logService->logInfo('Payment Back -- Done');
  615.         return $this->redirectToRoute('shopping');
  616.     }
  617.     /**
  618.      * 購入処理をロールバックする
  619.      *
  620.      * @param  $Order  受注情報
  621.      */
  622.     private function rollbackOrder($Order)
  623.     {
  624.         // 購入処理中に更新
  625.         $Order $this->utilService->setOrderStatusByProcessing($Order);
  626.         // 仮確定の取り消し
  627.         $this->purchaseFlow->rollback($Order, new PurchaseContext());
  628.         $this->entityManager->flush();
  629.     }
  630.     /**
  631.      * カード決済の完了通知
  632.      *
  633.      * @param  $request
  634.      *
  635.      * @Route("/remise_payment4_result_card", name="remise_payment4_result_card")
  636.      */
  637.     public function cardResult(Request $request)
  638.     {
  639.         $this->logService->logInfo('Payment Card Complete');
  640.         $ConfigInfo $this->utilService->getConfigInfo();
  641.         // リクエスト情報
  642.         $requestData $request->request->all();
  643.         $this->logService->logInfo('Payment Card Complete -- Request'$requestData);
  644.         // リクエストデータなし
  645.         $tranid $this->utilService->getValue($requestData'X-TRANID');
  646.         if (empty($tranid))
  647.         {
  648.             $this->logService->logError('Payment Card Complete -- Request Error');
  649.             return $this->redirectToRoute('shopping_error');
  650.         }
  651.         // 戻り区分不正
  652.         if ($this->utilService->getValue($requestData'REC_TYPE') != 'END')
  653.         {
  654.             $this->logService->logError('Payment Card Complete -- REC_TYPE Error');
  655.             return $this->redirectToRoute('shopping_error');
  656.         }
  657.         // 受注番号
  658.         $orderNo $this->utilService->getValue($requestData'X-S_TORIHIKI_NO');
  659.         // 金額
  660.         $paymentTotal $this->utilService->getValue($requestData'X-TOTAL');
  661.         // 受注情報の取得
  662.         $Order $this->utilService->getOrderByNew($orderNo);
  663.         if (!$Order)
  664.         {
  665.             $this->logService->logError('Payment Card Complete -- Not Found Order (' $orderNo ')');
  666.             return $this->redirectToRoute('shopping_error');
  667.         }
  668.         if ($this->getUser() != $Order->getCustomer())
  669.         {
  670.             // 購入処理をロールバック
  671.             $this->logService->logInfo('Payment Card Complete -- Rollback Order (' $orderNo ')');
  672.             $this->rollbackOrder($Order);
  673.             $this->logService->logError('Payment Card Complete -- Unmatch Customer (' $orderNo ')');
  674.             return $this->redirectToRoute('shopping_error');
  675.         }
  676.         // EC-CUBE支払方法の取得
  677.         $Payment $Order->getPayment();
  678.         if (!$Payment)
  679.         {
  680.             // 購入処理をロールバック
  681.             $this->logService->logInfo('Payment Card Complete -- Rollback Order (' $orderNo ')');
  682.             $this->rollbackOrder($Order);
  683.             $this->logService->logError('Payment Card Complete -- Not Found Payment (' $orderNo ')');
  684.             return $this->redirectToRoute('shopping_error');
  685.         }
  686.         // 支払方法
  687.         $paymentId $Payment->getId();
  688.         // ルミーズ支払方法の取得
  689.         $RemisePayment $this->utilService->getRemisePayment($paymentId);
  690.         if (!$RemisePayment)
  691.         {
  692.             // 購入処理をロールバック
  693.             $this->logService->logInfo('Payment Card Complete -- Rollback Order (' $orderNo ')');
  694.             $this->rollbackOrder($Order);
  695.             $this->logService->logError('Payment Card Complete -- Unmatch Payment (' $orderNo ')');
  696.             return $this->redirectToRoute('shopping_error');
  697.         }
  698.         // 決済履歴の取得
  699.         $OrderResult $this->utilService->getOrderResult($Order->getId());
  700.         if (!$OrderResult)
  701.         {
  702.             // 購入処理をロールバック
  703.             $this->logService->logInfo('Payment Card Complete -- Rollback Order (' $orderNo ')');
  704.             $this->rollbackOrder($Order);
  705.             $this->logService->logError('Payment Card Complete -- Not Found OrderResult (' $orderNo ')');
  706.             return $this->redirectToRoute('shopping_error');
  707.         }
  708.         // カード決済履歴詳細の取得
  709.         $OrderResultCard $this->utilService->getOrderResultCard($Order->getId());
  710.         if (!$OrderResultCard)
  711.         {
  712.             // 購入処理をロールバック
  713.             $this->logService->logInfo('Payment Card Complete -- Rollback Order (' $orderNo ')');
  714.             $this->rollbackOrder($Order);
  715.             $this->logService->logError('Payment Card Complete -- Not Found OrderResultCard (' $orderNo ')');
  716.             return $this->redirectToRoute('shopping_error');
  717.         }
  718.         // 金額の相違
  719.         if (round($Order->getPaymentTotal()) != $paymentTotal)
  720.         {
  721.             // 購入処理をロールバック
  722.             $this->logService->logInfo('Payment Card Complete -- Rollback Order (' $orderNo ')');
  723.             $this->rollbackOrder($Order);
  724.             $this->logService->logError('Payment Card Complete -- Unmatch Total (' $orderNo ', EC-CUBE:' round($Order->getPaymentTotal()) . ', REMISE:' $paymentTotal ')');
  725.             return $this->redirectToRoute('shopping_error');
  726.         }
  727.         // 結果取得
  728.         $rCode $this->utilService->getValue($requestData'X-R_CODE');
  729.         $errcode $this->utilService->getValue($requestData'X-ERRCODE');
  730.         $errinfo $this->utilService->getValue($requestData'X-ERRINFO');
  731.         $errlevel $this->utilService->getValue($requestData'X-ERRLEVEL');
  732.         if (!empty($errcode)) $errcode trim($errcode);
  733.         // 結果判定
  734.         $errMsg '';
  735.         if ($rCode != trans('remise_payment4.common.label.r_code.success')
  736.          || $errcode !== ""
  737.          || $errinfo != trans('remise_payment4.common.label.errinfo.success')
  738.          || $errlevel != trans('remise_payment4.common.label.errlevel.success')
  739.         ) {
  740.             // エラーメッセージ取得
  741.             $messageKey 'remise_payment4.front.text.r_code.' $rCode;
  742.             $errMsg trans($messageKey);
  743.             if ($errMsg == $messageKey)
  744.             {
  745.                 $head substr($rCode03);
  746.                 $tail substr($rCode, -1);
  747.                 if ($head == "8:1" || $head == "8:2" || $head == "8:3")
  748.                 {
  749.                     if ($tail == "8") {
  750.                         $messageKey 'remise_payment4.front.text.r_code.8:x008';
  751.                     } else {
  752.                         $messageKey 'remise_payment4.front.text.r_code.' $head 'xxx';
  753.                     }
  754.                     $errMsg trans($messageKey);
  755.                 }
  756.             }
  757.             if ($errMsg == $messageKey)
  758.             {
  759.                 $errMsg trans('remise_payment4.front.text.r_code.error');
  760.             }
  761.             $dispErrMsg trans('remise_payment4.front.text.payment.error') . ":" $errMsg "(" $rCode ")";
  762.             // 購入処理をロールバック
  763.             $this->logService->logInfo('Payment Card Complete -- Rollback Order (' $orderNo ')');
  764.             $this->rollbackOrder($Order);
  765.             $this->logService->logError('Payment Card Complete -- Error Judge (' $orderNo ':' $dispErrMsg ')');
  766.             $this->addError($dispErrMsg);
  767.             return $this->redirectToRoute('shopping');
  768.         }
  769.         // 決済履歴の設定
  770.         $OrderResult->setCompleteDate(new \DateTime());
  771.         $OrderResult->setUpdateDate(new \DateTime());
  772.         // 決済履歴の登録
  773.         $this->logService->logInfo('Payment Card Complete -- Save OrderResult (' $orderNo ')');
  774.         $this->entityManager->persist($OrderResult);
  775.         $this->entityManager->flush();
  776.         // カード決済履歴詳細の設定
  777.         $OrderResultCard->setState      (trans('remise_payment4.common.label.card.state.complete')   );
  778.         $OrderResultCard->setTranid     ($this->utilService->getValue($requestData'X-TRANID'      ));
  779.         $OrderResultCard->setMemberId   ($this->utilService->getValue($requestData'X-AC_MEMBERID' ));
  780.         $OrderResultCard->setAcTotal    ($this->utilService->getValue($requestData'X-AC_TOTAL'    ));
  781.         $OrderResultCard->setAcNextDate ($this->utilService->getDate ($requestData'X-AC_NEXT_DATE'));
  782.         $OrderResultCard->setAcInterval ($this->utilService->getValue($requestData'X-AC_INTERVAL' ));
  783.         $OrderResultCard->setUpdateDate(new \DateTime());
  784.         // カード決済履歴詳細の登録
  785.         $this->logService->logInfo('Payment Card Complete -- Save OrderResultCard (' $orderNo ')');
  786.         $this->entityManager->persist($OrderResultCard);
  787.         $this->entityManager->flush();
  788.         // 売上
  789.         if ($OrderResultCard->getJob() == 'CAPTURE')
  790.         {
  791.             // 入金済みに更新
  792.             $this->logService->logInfo('Payment Card Complete -- Save Order (CAPTURE) (' $orderNo ')');
  793.             $Order $this->utilService->setOrderStatusByPaid($Order);
  794.         }
  795.         // 仮売上
  796.         else
  797.         {
  798.             // 新規受付に更新
  799.             $this->logService->logInfo('Payment Card Complete -- Save Order (AUTH) (' $orderNo ')');
  800.             $Order $this->utilService->setOrderStatusByNew($Order);
  801.         }
  802.         $this->entityManager->persist($Order);
  803.         $this->entityManager->flush();
  804.         // 定期購買が有効の場合
  805.         if ($ConfigInfo && $ConfigInfo->useOptionAC() && $OrderResultCard->getMemberId()) {
  806.             // ルミーズ定期購買情報作成
  807.             $remiseACMember $this->remiseACMemberRepository->findOneBy([
  808.                 'id' => $OrderResultCard->getMemberId()
  809.             ]);
  810.             $remiseACMember $this->acService->createRemiseACMember($Order$remiseACMember);
  811.             $remiseACMember->setId($OrderResultCard->getMemberId());
  812.             $this->entityManager->persist($remiseACMember);
  813.             $this->entityManager->flush();
  814.             $remiseACResult $this->acService->createRemiseACResult($Order->getId(),trans('remise_payment4.ac.plg_remise_payment4_remise_ac_result.result.first.key'));
  815.             $this->entityManager->persist($remiseACResult);
  816.             $this->entityManager->flush();
  817.         }
  818.         // カート削除
  819.         $this->cartService->clear();
  820.         // 受注IDをセッションにセット
  821.         $this->session->set('eccube.front.shopping.order.id'$Order->getId());
  822.         // メール送信
  823.         $this->logService->logInfo('Payment Card Complete -- Send Mail (' $orderNo ')');
  824.         if ($ConfigInfo && $ConfigInfo->useOptionAC() && $OrderResultCard->getMemberId()) {
  825.             // 定期購買が有効の場合
  826.             // ルミーズ定期購買メンバー情報を取得
  827.             $remiseACMember $this->acService->getRemiseACMemberByOrderId($Order->getId());
  828.             // 定期購買用メール送信
  829.             $this->acService->sendMailAcOrder($Order$remiseACMember);
  830.             // 完了メッセージを追加
  831.             $interval "";
  832.             if (strcmp($remiseACMember->getIntervalMark(), trans('remise_payment4.ac.plg_remise_payment4_remise_ac_type.interval_marks.m.key')) == 0)
  833.             {
  834.                 $interval $remiseACMember->getIntervalValue().trans('remise_payment4.ac.plg_remise_payment4_remise_ac_type.interval_marks.m.value');
  835.             }
  836.             else if(strcmp($remiseACMember->getIntervalMark(), trans('remise_payment4.ac.plg_remise_payment4_remise_ac_type.interval_marks.d.key')) == 0)
  837.             {
  838.                 $interval $remiseACMember->getIntervalValue().trans('remise_payment4.ac.plg_remise_payment4_remise_ac_type.interval_marks.d.value');
  839.             }
  840.             // 課金回数
  841.             $countText "";
  842.             if($remiseACMember->getCount() && $remiseACMember->getCount() > 0){
  843.                 $countText $remiseACMember->getCount().trans('remise_payment4.ac.plg_remise_payment4_remise_ac_type.count.value');
  844.             }else{
  845.                 $countText "";
  846.             }
  847.             // コンテキストのクリア
  848.             $this->entityManager->clear();
  849.             // 受注情報の再取得
  850.             $Order $this->utilService->getOrderByOrderNo($orderNo);
  851.             $twig 'RemisePayment42/Resource/template/sub_shopping_complete_autocharge.twig';
  852.             $msg $this->renderView($twig, ['Order' => $Order'RemiseACMember' => $remiseACMember'interval' => $interval'remiseAcCount' => $countText ]);
  853.             $Order->appendCompleteMessage($msg);
  854.             $this->entityManager->persist($Order);
  855.             $this->entityManager->flush();
  856.         } else { 
  857.             // 通常の商品購入
  858.             $MailHistory $this->mailService->sendOrderMail($Order);
  859.             $this->entityManager->flush();
  860.         }
  861.         // 受注完了ページへ遷移
  862.         $this->logService->logInfo('Payment Card Complete -- Done');
  863.         return $this->redirectToRoute('shopping_complete');
  864.     }
  865.     /**
  866.      * マルチ決済の完了通知
  867.      *
  868.      * @param  $request
  869.      *
  870.      * @Route("/remise_payment4_result_cvs", name="remise_payment4_result_cvs")
  871.      */
  872.     public function cvsResult(Request $request)
  873.     {
  874.         $this->logService->logInfo('Payment Cvs Complete');
  875.         // リクエスト情報
  876.         $requestData $request->request->all();
  877.         $this->logService->logInfo('Payment Cvs Complete -- Request'$requestData);
  878.         // リクエストデータなし
  879.         $tranid $this->utilService->getValue($requestData'X-JOB_ID');
  880.         if (empty($tranid))
  881.         {
  882.             $this->logService->logError('Payment Cvs Complete -- Request Error');
  883.             return $this->redirectToRoute('shopping_error');
  884.         }
  885.         // 受注番号
  886.         $orderNo $this->utilService->getValue($requestData'X-S_TORIHIKI_NO');
  887.         // 金額
  888.         $paymentTotal $this->utilService->getValue($requestData'X-TOTAL');
  889.         // 受注情報の取得
  890.         $Order $this->utilService->getOrderByPending($orderNo);
  891.         if (!$Order)
  892.         {
  893.             $this->logService->logError('Payment Cvs Complete -- Not Found Order (' $orderNo ')');
  894.             return $this->redirectToRoute('shopping_error');
  895.         }
  896.         if ($this->getUser() != $Order->getCustomer())
  897.         {
  898.             // 購入処理をロールバック
  899.             $this->logService->logInfo('Payment Cvs Complete -- Rollback Order (' $orderNo ')');
  900.             $this->rollbackOrder($Order);
  901.             $this->logService->logError('Payment Cvs Complete -- Unmatch Customer (' $orderNo ')');
  902.             return $this->redirectToRoute('shopping_error');
  903.         }
  904.         // EC-CUBE支払方法の取得
  905.         $Payment $Order->getPayment();
  906.         if (!$Payment)
  907.         {
  908.             // 購入処理をロールバック
  909.             $this->logService->logInfo('Payment Cvs Complete -- Rollback Order (' $orderNo ')');
  910.             $this->rollbackOrder($Order);
  911.             $this->logService->logError('Payment Cvs Complete -- Not Found Payment (' $orderNo ')');
  912.             return $this->redirectToRoute('shopping_error');
  913.         }
  914.         // 支払方法
  915.         $paymentId $Payment->getId();
  916.         // ルミーズ支払方法の取得
  917.         $RemisePayment $this->utilService->getRemisePayment($paymentId);
  918.         if (!$RemisePayment)
  919.         {
  920.             // 購入処理をロールバック
  921.             $this->logService->logInfo('Payment Cvs Complete -- Rollback Order (' $orderNo ')');
  922.             $this->rollbackOrder($Order);
  923.             $this->logService->logError('Payment Cvs Complete -- Unmatch Payment (' $orderNo ')');
  924.             return $this->redirectToRoute('shopping_error');
  925.         }
  926.         // 決済履歴の取得
  927.         $OrderResult $this->utilService->getOrderResult($Order->getId());
  928.         if (!$OrderResult)
  929.         {
  930.             // 購入処理をロールバック
  931.             $this->logService->logInfo('Payment Cvs Complete -- Rollback Order (' $orderNo ')');
  932.             $this->rollbackOrder($Order);
  933.             $this->logService->logError('Payment Cvs Complete -- Not Found OrderResult (' $orderNo ')');
  934.             return $this->redirectToRoute('shopping_error');
  935.         }
  936.         // マルチ決済履歴詳細の取得
  937.         $OrderResultCvs $this->utilService->getOrderResultCvs($Order->getId());
  938.         if (!$OrderResultCvs)
  939.         {
  940.             // 購入処理をロールバック
  941.             $this->logService->logInfo('Payment Cvs Complete -- Rollback Order (' $orderNo ')');
  942.             $this->rollbackOrder($Order);
  943.             $this->logService->logError('Payment Cvs Complete -- Not Found OrderResultCvs (' $orderNo ')');
  944.             return $this->redirectToRoute('shopping_error');
  945.         }
  946.         // 金額の相違
  947.         if (round($Order->getPaymentTotal()) != $paymentTotal)
  948.         {
  949.             // 購入処理をロールバック
  950.             $this->logService->logInfo('Payment Cvs Complete -- Rollback Order (' $orderNo ')');
  951.             $this->rollbackOrder($Order);
  952.             $this->logService->logError('Payment Cvs Complete -- Unmatch Total (' $orderNo ', EC-CUBE:' round($Order->getPaymentTotal()) . ', REMISE:' $paymentTotal ')');
  953.             return $this->redirectToRoute('shopping_error');
  954.         }
  955.         // 結果取得
  956.         $rCode $this->utilService->getValue($requestData'X-R_CODE');
  957.         // 結果判定
  958.         $errMsg '';
  959.         if ($rCode != trans('remise_payment4.common.label.r_code.success'))
  960.         {
  961.             // エラーメッセージ取得
  962.             $messageKey 'remise_payment4.front.text.r_code.' $rCode;
  963.             $errMsg trans($messageKey);
  964.             if ($errMsg == $messageKey)
  965.             {
  966.                 $head substr($rCode03);
  967.                 $tail substr($rCode, -1);
  968.                 if ($head == "8:1" || $head == "8:2" || $head == "8:3")
  969.                 {
  970.                     if ($tail == "8") {
  971.                         $messageKey 'remise_payment4.front.text.r_code.8:x008';
  972.                     } else {
  973.                         $messageKey 'remise_payment4.front.text.r_code.' $head 'xxx';
  974.                     }
  975.                     $errMsg trans($messageKey);
  976.                 }
  977.             }
  978.             if ($errMsg == $messageKey)
  979.             {
  980.                 $errMsg trans('remise_payment4.front.text.r_code.error');
  981.             }
  982.             $dispErrMsg trans('remise_payment4.front.text.payment.error') . ":" $errMsg "(" $rCode ")";
  983.             // 購入処理をロールバック
  984.             $this->logService->logInfo('Payment Cvs Complete -- Rollback Order (' $orderNo ')');
  985.             $this->rollbackOrder($Order);
  986.             $this->logService->logError('Payment Cvs Complete -- Error Judge (' $dispErrMsg ')');
  987.             $this->addError($dispErrMsg);
  988.             return $this->redirectToRoute('shopping');
  989.         }
  990.         // 決済履歴の設定
  991.         $OrderResult->setCompleteDate(new \DateTime());
  992.         $OrderResult->setUpdateDate(new \DateTime());
  993.         // 決済履歴の登録
  994.         $this->logService->logInfo('Payment Cvs Complete -- Save OrderResult (' $orderNo ')');
  995.         $this->entityManager->persist($OrderResult);
  996.         $this->entityManager->flush($OrderResult);
  997.         // マルチ決済履歴詳細の設定
  998.         $OrderResultCvs->setJobid   ($this->utilService->getValue($requestData'X-JOB_ID'  ));
  999.         $OrderResultCvs->setRCode   ($this->utilService->getValue($requestData'X-R_CODE'  ));
  1000.         $OrderResultCvs->setPayWay  ($this->utilService->getValue($requestData'X-PAY_WAY' ));
  1001.         $OrderResultCvs->setPayCsv  ($this->utilService->getValue($requestData'X-PAY_CSV' ));
  1002.         $OrderResultCvs->setPayNo1  ($this->utilService->getValue($requestData'X-PAY_NO1' ));
  1003.         $OrderResultCvs->setPayNo2  ($this->utilService->getValue($requestData'X-PAY_NO2' ));
  1004.         $OrderResultCvs->setPayDate ($this->utilService->getDate ($requestData'X-PAYDATE' ));
  1005.         $OrderResultCvs->setUpdateDate(new \DateTime());
  1006.         // マルチ決済履歴詳細の登録
  1007.         $this->logService->logInfo('Payment Cvs Complete -- Save OrderResultCard (' $orderNo ')');
  1008.         $this->entityManager->persist($OrderResultCvs);
  1009.         $this->entityManager->flush($OrderResultCvs);
  1010.         // 追加情報
  1011.         $cvsInfo $this->utilService->getCvsInfo($Order$OrderResultCvs);
  1012.         // 完了メッセージを追加
  1013.         $twig 'RemisePayment42/Resource/template/order_cvs.twig';
  1014.         $msg $this->renderView($twig$cvsInfo);
  1015.         $Order->appendCompleteMessage($msg);
  1016.         // 注文完了メールにメッセージを追加
  1017.         $twig 'RemisePayment42/Resource/template/mail/order_cvs.twig';
  1018.         $msg $this->renderView($twig$cvsInfo);
  1019.         $Order->appendCompleteMailMessage($msg);
  1020.         // 購入処理中の受注を確定
  1021.         $this->logService->logInfo('Payment Cvs Complete -- Commit Order (' $orderNo ')');
  1022.         $this->purchaseFlow->commit($Order, new PurchaseContext());
  1023.         // EC-CUBE受注ステータスを更新
  1024.         $this->logService->logInfo('Payment Cvs Complete -- Save Order (' $orderNo ')');
  1025.         $Order $this->utilService->setOrderStatusByNew($Order);
  1026.         $this->entityManager->persist($Order);
  1027.         $this->entityManager->flush();
  1028.         // カート削除
  1029.         $this->cartService->clear();
  1030.         // 受注IDをセッションにセット
  1031.         $this->session->set('eccube.front.shopping.order.id'$Order->getId());
  1032.         // メール送信
  1033.         $this->logService->logInfo('Payment Cvs Complete -- Send Mail (' $orderNo ')');
  1034.         $MailHistory $this->mailService->sendOrderMail($Order);
  1035.         $this->entityManager->flush();
  1036.         // 受注完了ページへ遷移
  1037.         $this->logService->logInfo('Payment Cvs Complete -- Done');
  1038.         return $this->redirectToRoute('shopping_complete');
  1039.     }
  1040.     /**
  1041.      * 定期購買のダミーURL生成用
  1042.      *
  1043.      * @param  $request
  1044.      *
  1045.      * @Route("/remise_shopping", name="remise_shopping")
  1046.      * @Route("/remise_shopping_complete", name="remise_shopping_complete")
  1047.      *
  1048.      */
  1049.     public function remiseShoppingDummy(Request $request)
  1050.     {
  1051.     }
  1052.     /**
  1053.      * カード決済用送信データの取得(EMV3Dセキュア)
  1054.      *
  1055.      * @param \Eccube\Entity\Order $Order
  1056.      * @param $sendData
  1057.      *
  1058.      * @return $sendData  送信データ
  1059.      */
  1060.     private function getCardSendDataEMV3DS($Order$sendData)
  1061.     {
  1062.         // 会員情報を取得
  1063.         $Customer $Order->getCustomer();
  1064.         // 支払情報を取得
  1065.         $Payment $Order->getPayment();
  1066.         // 配送方法の取得
  1067.         $Shipping $Order->getShippings()->first();
  1068.         
  1069.         $sendData['chAccDate'] = $this->getChAccDate($Customer);                                                    // アカウント情報の作成日
  1070.         $sendData['chAccAgeInd'] = $this->getChAccAgeInd($Customer);                                                // アカウントを取得してからの経過期間
  1071.         // アカウント情報の最終変更日を取得
  1072.         $chAccChange $this->getAccChange($Customer);
  1073.         $sendData['chAccChange'] = $this->ConvertYmd($chAccChange);                                                 // アカウント情報の最終変更日
  1074.         $sendData['chAccChangeInd'] = $this->getIndicator($chAccChange);                                            // アカウント情報の最終変更日からの経過期間
  1075.         $sendData['txnActivityDay'] = $this->getTxnActivityDay($Customer$Payment);                                // 直近24時間の取引回数
  1076.         $sendData['txnActivityYear'] = $this->getTxnActivityYear($Customer$Payment);                              // 直近1年間の取引回数
  1077.         $sendData['nbPurchaseAccount'] = $this->getNbPurchaseAccount($Customer);                                    // 直近6ヶ月の購買回数
  1078.         // この取引の出荷先の初回利用日を取得
  1079.         $shipAddressUsage $this->getShipAddressUsage($Order$Customer$Shipping);
  1080.         $sendData['shipAddressUsage'] = $this->ConvertYmd($shipAddressUsage);                                       // この取引の出荷先の初回利用日
  1081.         $sendData['shipAddressUsageInd'] = $this->getIndicator($shipAddressUsage);                                  // この取引の出荷先の初回利用日からの経過期間
  1082.         $sendData['shipNameIndicator'] = $this->getShipNameIndicator($Order$Shipping);                            // カード所有者名と配送先宛名が同じか否か
  1083.         $sendData['threeDSReqAuthMethod'] = $this->getThreeDSReqAuthMethod($Customer);                              // 加盟店がアカウントを認証した方法
  1084.         $sendData['reorderItemsInd'] = $this->getReorderItemsInd($Order$Customer);                                // カード会員の過去注文商品か否か
  1085.         $sendData['shipIndicator'] = $this->getShipIndicator($Order$Shipping);                                    // この取引の配送方法
  1086.         $sendData['addrMatch'] = $this->getAddrMatch($Order$Shipping);                                            // カード会員の住所と出荷先が同じか否か
  1087.         $sendData['billAddrCountry'] = $this->eccubeConfig['remise_payment4']['emv3ds']['country_codes_jp'];        // カード会員の住所(国)
  1088.         $sendData['billAddrPostCode'] = $Order->getPostalCode();                                                    // カード会員の住所(郵便番号)
  1089.         $sendData['billAddrState'] = sprintf('%02d'$Order->getPref()->getId());                                   // カード会員の住所(都道府県)
  1090.         $sendData['billAddrLine1'] = $Order->getAddr01();                                                           // カード会員の住所(町域・丁目番地)
  1091.         $sendData['billAddrLine2'] = $Order->getAddr02();                                                           // カード会員の住所(建物・号室)
  1092.         $sendData['email'] = $Order->getEmail();                                                                    // カード会員のメールアドレス
  1093.         $sendData['homePhoneCc'] = $this->eccubeConfig['remise_payment4']['emv3ds']['country_calling_codes_jp'];    // カード会員の連絡先(国)
  1094.         $sendData['homePhoneSubscriber'] = $Order->getPhoneNumber();                                                // カード会員の連絡先(電話番号)
  1095.         $sendData['shipAddrCountry'] = $this->eccubeConfig['remise_payment4']['emv3ds']['country_codes_jp'];        // 出荷先の住所(国)
  1096.         $sendData['shipAddrPostCode'] = $Shipping->getPostalCode();                                                 // 出荷先の住所(郵便番号)
  1097.         $sendData['shipAddrState'] = sprintf('%02d'$Shipping->getPref()->getId());                                // 出荷先の住所(都道府県)
  1098.         $sendData['shipAddrLine1'] = $Shipping->getAddr01();                                                        // 出荷先の住所(町域・丁目番地)
  1099.         $sendData['shipAddrLine2'] = $Shipping->getAddr02();                                                        // 出荷先の住所(建物・号室)
  1100.         
  1101.         $this->logService->logInfo('Payment -- Create Card EMV3DS Info', [
  1102.             'chAccDate' => $sendData['chAccDate'],
  1103.             'chAccAgeInd' => $sendData['chAccAgeInd'],
  1104.             'chAccChange' => $sendData['chAccChange'],
  1105.             'chAccChangeInd' => $sendData['chAccChangeInd'],
  1106.             'txnActivityDay' => $sendData['txnActivityDay'],
  1107.             'txnActivityYear' => $sendData['txnActivityYear'],
  1108.             'nbPurchaseAccount' => $sendData['nbPurchaseAccount'],
  1109.             'shipAddressUsage' => $sendData['shipAddressUsage'],
  1110.             'shipAddressUsageInd' => $sendData['shipAddressUsageInd'],
  1111.             'shipNameIndicator' => $sendData['shipNameIndicator'],
  1112.             'threeDSReqAuthMethod' => $sendData['threeDSReqAuthMethod'],
  1113.             'reorderItemsInd' => $sendData['reorderItemsInd'],
  1114.             'shipIndicator' => $sendData['shipIndicator'],
  1115.             'addrMatch' => $sendData['addrMatch'],
  1116.             'billAddrCountry' => $sendData['billAddrCountry'],
  1117.             'billAddrPostCode' => $sendData['billAddrPostCode'],
  1118.             'billAddrState' => $sendData['billAddrState'],
  1119.             'billAddrLine1' => $sendData['billAddrLine1'],
  1120.             'billAddrLine2' => $sendData['billAddrLine2'],
  1121.             'email' => $sendData['email'],
  1122.             'homePhoneCc' => $sendData['homePhoneCc'],
  1123.             'homePhoneSubscriber' => $sendData['homePhoneSubscriber'],
  1124.             'shipAddrCountry' => $sendData['shipAddrCountry'],
  1125.             'shipAddrPostCode' => $sendData['shipAddrPostCode'],
  1126.             'shipAddrState' => $sendData['shipAddrState'],
  1127.             'shipAddrLine1' => $sendData['shipAddrLine1'],
  1128.             'shipAddrLine2' => $sendData['shipAddrLine2']
  1129.         ]);
  1130.         
  1131.         return $sendData;
  1132.     }
  1133.     
  1134.     /**
  1135.      * アカウント情報の作成日を取得
  1136.      *
  1137.      * @param \Eccube\Entity\Customer $Customer
  1138.      *
  1139.      * @return string
  1140.      */
  1141.     private function getChAccDate($Customer)
  1142.     {
  1143.         if (is_null($Customer)) {
  1144.             return "";
  1145.         }
  1146.         
  1147.         $createDate $Customer->getCreateDate();
  1148.         
  1149.         return $this->ConvertYmd($createDate);
  1150.     }
  1151.     
  1152.     /**
  1153.      * アカウントを取得してからの経過期間を取得
  1154.      *
  1155.      * @param \Eccube\Entity\Customer $Customer
  1156.      *
  1157.      * @return string
  1158.      */
  1159.     private function getChAccAgeInd($Customer)
  1160.     {
  1161.         if (is_null($Customer)) {
  1162.             return $this->eccubeConfig['remise_payment4']['emv3ds']['ch_acc_age']['no_account'];
  1163.         }
  1164.         
  1165.         $createDate $Customer->getCreateDate();
  1166.         $sysDate = new \DateTime();
  1167.         $interval $createDate->diff($sysDate);
  1168.         if ($interval->format('%a') == 0) {
  1169.             return $this->eccubeConfig['remise_payment4']['emv3ds']['ch_acc_age']['this_transaction'];
  1170.         } elseif ($interval->format('%a') < 30) {
  1171.             return $this->eccubeConfig['remise_payment4']['emv3ds']['ch_acc_age']['less_30days'];
  1172.         } elseif ($interval->format('%a') < 60) {
  1173.             return $this->eccubeConfig['remise_payment4']['emv3ds']['ch_acc_age']['less_60days'];
  1174.         } else {
  1175.             return $this->eccubeConfig['remise_payment4']['emv3ds']['ch_acc_age']['more_60days'];
  1176.         }
  1177.     }
  1178.     
  1179.     /**
  1180.      * アカウント情報の最終変更日を取得
  1181.      *
  1182.      * @param \Eccube\Entity\Customer $Customer
  1183.      *
  1184.      * @return \DateTime|null
  1185.      */
  1186.     private function getAccChange($Customer)
  1187.     {
  1188.         if (is_null($Customer)) {
  1189.             return NULL;
  1190.         }
  1191.         
  1192.         $updateDate $Customer->getUpdateDate();
  1193.         $lastUpdateDate $this->emv3dsRepository->getLastUpdateDate($Customer);
  1194.         
  1195.         return is_null($lastUpdateDate) ? $updateDate $lastUpdateDate;
  1196.     }
  1197.     
  1198.     /**
  1199.      * 直近24時間の取引回数を取得
  1200.      *
  1201.      * @param \Eccube\Entity\Customer $Customer
  1202.      * @param \Eccube\Entity\Payment $payment
  1203.      *
  1204.      * @return int
  1205.      */
  1206.     private function getTxnActivityDay($Customer$Payment)
  1207.     {
  1208.         if (is_null($Customer)) {
  1209.             return "";
  1210.         }
  1211.         $sysDate = new \DateTime();
  1212.         $date $sysDate->modify('-24 hours');
  1213.         $count $this->emv3dsRepository->getActivityCount($Customer$Payment$date);
  1214.         return $count 999 $count 999;
  1215.     }
  1216.     
  1217.     /**
  1218.      * 直近1年間の取引回数を取得
  1219.      *
  1220.      * @param \Eccube\Entity\Customer $Customer
  1221.      * @param \Eccube\Entity\Payment $payment
  1222.      *
  1223.      * @return int
  1224.      */
  1225.     private function getTxnActivityYear($Customer$Payment)
  1226.     {
  1227.         if (is_null($Customer)) {
  1228.             return "";
  1229.         }
  1230.         $sysDate = new \DateTime();
  1231.         $date $sysDate->modify('-12 months');
  1232.         $count $this->emv3dsRepository->getActivityCount($Customer$Payment$date);
  1233.         return $count 999 $count 999;
  1234.     }
  1235.     
  1236.     /**
  1237.      * 直近6ヶ月の購買回数を取得
  1238.      *
  1239.      * @param \Eccube\Entity\Customer $Customer
  1240.      *
  1241.      * @return int
  1242.      */
  1243.     private function getNbPurchaseAccount($Customer)
  1244.     {
  1245.         if (is_null($Customer)) {
  1246.             return "";
  1247.         }
  1248.         $sysDate = new \DateTime();
  1249.         $date $sysDate->modify('-6 months');
  1250.         $count $this->emv3dsRepository->getPurchaseCount($Customer$date);
  1251.         return $count 9999 $count 9999;
  1252.     }
  1253.     
  1254.     /**
  1255.      * この取引の出荷先の初回利用日を取得
  1256.      *
  1257.      * @param \Eccube\Entity\Order $Order
  1258.      * @param \Eccube\Entity\Customer $Customer
  1259.      * @param \Eccube\Entity\Shipping $Shipping
  1260.      *
  1261.      * @return \DateTime|null
  1262.      */
  1263.     private function getShipAddressUsage($Order$Customer$Shipping)
  1264.     {
  1265.         if (is_null($Customer)) {
  1266.             return NULL;
  1267.         }
  1268.         
  1269.         $orderDate $this->emv3dsRepository->getShipAddressUsage($Customer$Shipping);
  1270.         
  1271.         return is_null($orderDate) ? new \DateTime() : $orderDate;
  1272.     }
  1273.     
  1274.     /**
  1275.      * カード所有者名と配送先宛名が同じか否かを取得
  1276.      *
  1277.      * @param \Eccube\Entity\Order $Order
  1278.      * @param \Eccube\Entity\Shipping $Shipping
  1279.      *
  1280.      * @return string
  1281.      */
  1282.     private function getShipNameIndicator($Order$Shipping)
  1283.     {
  1284.         if ($Order->getName01() !== $Shipping->getName01()) {
  1285.             return $this->eccubeConfig['remise_payment4']['emv3ds']['different'];
  1286.         }
  1287.         
  1288.         if ($Order->getName02() !== $Shipping->getName02()) {
  1289.             return $this->eccubeConfig['remise_payment4']['emv3ds']['different'];
  1290.         }
  1291.         
  1292.         return $this->eccubeConfig['remise_payment4']['emv3ds']['identical'];
  1293.     }
  1294.     
  1295.     /**
  1296.      * 加盟店がアカウントを認証した方法を取得
  1297.      *
  1298.      * @param \Eccube\Entity\Customer $Customer
  1299.      *
  1300.      * @return string
  1301.      */
  1302.     private function getThreeDSReqAuthMethod($Customer)
  1303.     {
  1304.         if ($Customer) {
  1305.             return $this->eccubeConfig['remise_payment4']['emv3ds']['own_credentials'];
  1306.         } else {
  1307.             return $this->eccubeConfig['remise_payment4']['emv3ds']['no_authentication'];
  1308.         }
  1309.     }
  1310.     
  1311.     /**
  1312.      * カード会員の過去注文商品か否かを取得
  1313.      *
  1314.      * @param \Eccube\Entity\Order $Order
  1315.      * @param \Eccube\Entity\Customer $Customer
  1316.      *
  1317.      * @return string
  1318.      */
  1319.     private function getReorderItemsInd($Order$Customer)
  1320.     {
  1321.         if (is_null($Customer)) {
  1322.             return "";
  1323.         }
  1324.         
  1325.         $count $this->emv3dsRepository->getReorderItemCount($Order$Customer);
  1326.         
  1327.         if ($count 0) {
  1328.             return $this->eccubeConfig['remise_payment4']['emv3ds']['reordered'];
  1329.         }
  1330.         
  1331.         return $this->eccubeConfig['remise_payment4']['emv3ds']['first_ordered'];
  1332.     }
  1333.     
  1334.     /**
  1335.      * この取引の配送方法を取得
  1336.      *
  1337.      * @param \Eccube\Entity\Order $Order
  1338.      * @param \Eccube\Entity\Shipping $Shipping
  1339.      *
  1340.      * @return string
  1341.      */
  1342.     private function getShipIndicator($Order$Shipping)
  1343.     {
  1344.         if ($Order->getPostalCode() !== $Shipping->getPostalCode()) {
  1345.             return $this->eccubeConfig['remise_payment4']['emv3ds']['different_address'];
  1346.         }
  1347.         
  1348.         if ($Order->getPref() !== $Shipping->getPref()) {
  1349.             return $this->eccubeConfig['remise_payment4']['emv3ds']['different_address'];
  1350.         }
  1351.         
  1352.         if ($Order->getAddr01() !== $Shipping->getAddr01()) {
  1353.             return $this->eccubeConfig['remise_payment4']['emv3ds']['different_address'];
  1354.         }
  1355.         
  1356.         if ($Order->getAddr02() !== $Shipping->getAddr02()) {
  1357.             return $this->eccubeConfig['remise_payment4']['emv3ds']['different_address'];
  1358.         }
  1359.         
  1360.         return $this->eccubeConfig['remise_payment4']['emv3ds']['billing_address'];
  1361.     }
  1362.     
  1363.     /**
  1364.      * カード会員の住所と出荷先が同じか否かを取得
  1365.      *
  1366.      * @param \Eccube\Entity\Order $Order
  1367.      * @param \Eccube\Entity\Shipping $Shipping
  1368.      *
  1369.      * @return string
  1370.      */
  1371.     private function getAddrMatch($Order$Shipping)
  1372.     {
  1373.         if ($Order->getPostalCode() !== $Shipping->getPostalCode()) {
  1374.             return $this->eccubeConfig['remise_payment4']['emv3ds']['does_not_match'];
  1375.         }
  1376.         
  1377.         if ($Order->getPref() !== $Shipping->getPref()) {
  1378.             return $this->eccubeConfig['remise_payment4']['emv3ds']['does_not_match'];
  1379.         }
  1380.         
  1381.         if ($Order->getAddr01() !== $Shipping->getAddr01()) {
  1382.             return $this->eccubeConfig['remise_payment4']['emv3ds']['does_not_match'];
  1383.         }
  1384.         
  1385.         if ($Order->getAddr02() !== $Shipping->getAddr02()) {
  1386.             return $this->eccubeConfig['remise_payment4']['emv3ds']['does_not_match'];
  1387.         }
  1388.         
  1389.         return $this->eccubeConfig['remise_payment4']['emv3ds']['matches'];
  1390.     }
  1391.     
  1392.     /**
  1393.      * Indicatorを取得
  1394.      *
  1395.      * @param \DateTime $date
  1396.      *
  1397.      * @return string
  1398.      */
  1399.     private function getIndicator($date)
  1400.     {
  1401.         if (empty($date)) {
  1402.             return "";
  1403.         }
  1404.         
  1405.         $sysDate = new \DateTime();
  1406.         $interval $date->diff($sysDate);
  1407.         if ($interval->format('%a') == 0) {
  1408.             return $this->eccubeConfig['remise_payment4']['emv3ds']['this_transaction'];
  1409.         } elseif ($interval->format('%a') < 30) {
  1410.             return $this->eccubeConfig['remise_payment4']['emv3ds']['less_30days'];
  1411.         } elseif ($interval->format('%a') < 60) {
  1412.             return $this->eccubeConfig['remise_payment4']['emv3ds']['less_60days'];
  1413.         } else {
  1414.             return $this->eccubeConfig['remise_payment4']['emv3ds']['more_60days'];
  1415.         }
  1416.     }
  1417.     
  1418.     /**
  1419.      * 年月日形式に変換
  1420.      *
  1421.      * @param \DateTime $dateTime
  1422.      *
  1423.      * @return string
  1424.      */
  1425.     private function ConvertYmd($dateTime)
  1426.     {
  1427.         if (empty($dateTime)) {
  1428.             return "";
  1429.         }
  1430.         
  1431.         return $dateTime
  1432.         ->setTimeZone(new \DateTimeZone('UTC'))
  1433.         ->format('Ymd');
  1434.     }
  1435. }