app/Plugin/SlnPayment42/Controller/PaymentController.php line 877

Open in your IDE?
  1. <?php
  2. namespace Plugin\SlnPayment42\Controller;
  3. use Eccube\Controller\AbstractController;
  4. use Eccube\Repository\OrderRepository;
  5. use Eccube\Repository\Master\OrderStatusRepository;
  6. use Eccube\Entity\Order;
  7. use Eccube\Entity\Master\OrderStatus;
  8. use Eccube\Service\CartService;
  9. use Eccube\Service\MailService;
  10. use Eccube\Service\PurchaseFlow\PurchaseContext;
  11. use Eccube\Service\PurchaseFlow\PurchaseFlow;
  12. use Eccube\Service\PurchaseFlow\Processor\PointProcessor;
  13. use Eccube\Service\PurchaseFlow\Processor\StockReduceProcessor;
  14. use Eccube\Exception\ShoppingException;
  15. use Eccube\Event\EventArgs;
  16. use Eccube\Common\Constant;
  17. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  18. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  19. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
  20. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  21. use Symfony\Component\HttpFoundation\Request;
  22. use Symfony\Component\HttpFoundation\Response;
  23. use Symfony\Component\Validator\Constraints as Assert;
  24. use Plugin\SlnPayment42\Repository\MemCardIdRepository;
  25. use Plugin\SlnPayment42\Repository\OrderPaymentStatusRepository;
  26. use Plugin\SlnPayment42\Repository\PluginConfigRepository;
  27. use Plugin\SlnPayment42\Form\Type\CardType;
  28. use Plugin\SlnPayment42\Service\SlnMailService;
  29. use Plugin\SlnPayment42\Service\BasicItem;
  30. use Plugin\SlnPayment42\Service\Util;
  31. use Plugin\SlnPayment42\Service\Method\CreditCard;
  32. use Plugin\SlnPayment42\Service\Method\RegisteredCreditCard;
  33. use Plugin\SlnPayment42\Service\Method\MethodUtils;
  34. use Plugin\SlnPayment42\Service\SlnAction\Cvs;
  35. use Plugin\SlnPayment42\Service\SlnAction\Credit;
  36. use Plugin\SlnPayment42\Service\SlnAction\Mem;
  37. use Plugin\SlnPayment42\Exception\SlnShoppingException;
  38. use Plugin\SlnPayment42\Repository\OrderPaymentSendRepository;
  39. use Doctrine\Common\Collections\ArrayCollection;
  40. class PaymentController extends AbstractController {
  41.     /**
  42.      * @var Mem
  43.      */
  44.     private $mem;
  45.     
  46.     /**
  47.      * @var Credit
  48.      */
  49.     private $credit;
  50.     
  51.     /**
  52.      * @var Cvs
  53.      */
  54.     private $cvs;
  55.     /**
  56.      * @var MemCardIdRepository
  57.      */
  58.     private $memCardIdRepository;
  59.     
  60.     /**
  61.      * @var OrderPaymentStatusRepository
  62.      */
  63.     private $orderPaymentStatusRepository;
  64.     /**
  65.      * @var PluginConfigRepository
  66.      */
  67.     private $configRepository;
  68.     
  69.     /**
  70.      * @var SlnMailService
  71.      */
  72.     private $slnMailService;
  73.     /**
  74.      * @var BasicItem
  75.      */
  76.     private $basicItem;
  77.     /**
  78.      * @var Util
  79.      */
  80.     private $util;
  81.     /**
  82.      * @var OrderRepository
  83.      */
  84.     private $orderRepository;
  85.     /**
  86.      * @var OrderStatusRepository
  87.      */
  88.     private $orderStatusRepository;
  89.     /**
  90.      * @var CartService
  91.      */
  92.     private $cartService;
  93.     /**
  94.      * @var MailService
  95.      */
  96.     private $mailService;
  97.     /**
  98.      * @var PurchaseFlow;
  99.      */
  100.     private $purchaseFlow;
  101.     /**
  102.      * @var string 受注IDキー
  103.      */
  104.     private $sessionOrderKey 'eccube.front.shopping.order.id';
  105.     
  106.     /**
  107.      * @var string 3D決済場合、支払い回数を記録する
  108.      */
  109.     private $sessionPayType 'sln.eccube.front.shopping.paytype';
  110.     /**
  111.      * @var OrderPaymentSendRepository
  112.      */
  113.     private $orderPaymentSendRepository;
  114.     /**
  115.      * @var PointProcessor
  116.      */
  117.     protected $pointProcessor;
  118.     /**
  119.      * @var StockReduceProcessor
  120.      */
  121.     protected $stockReduceProcessor;
  122.     /**
  123.      * @var bool
  124.      * 現在の決済ステータスが購入処理の対象か
  125.      */
  126.     private $isPurchaseProcessTarget;
  127.     /**
  128.      * @var bool
  129.      * 購入処理がOKで完了したか
  130.      */
  131.     private $isPurchaseProcessCompleted;
  132.     
  133.     public function __construct(
  134.         MemCardIdRepository $memCardIdRepository,
  135.         PluginConfigRepository $configRepository,
  136.         SlnMailService $slnMailService,
  137.         BasicItem $basicItem,
  138.         Util $util,
  139.         OrderRepository $orderRepository,
  140.         OrderStatusRepository $orderStatusRepository,
  141.         OrderPaymentStatusRepository $orderPaymentStatusRepository,
  142.         CartService $cartService,
  143.         MailService $mailService,
  144.         PurchaseFlow $shoppingPurchaseFlow,
  145.         Mem $mem,
  146.         Credit $credit,
  147.         Cvs $cvs,
  148.         OrderPaymentSendRepository $orderPaymentSendRepository,
  149.         PointProcessor $pointProcessor,
  150.         StockReduceProcessor $stockReduceProcessor
  151.     ) {
  152.         $this->memCardIdRepository $memCardIdRepository;
  153.         $this->configRepository $configRepository;
  154.         $this->slnMailService $slnMailService;
  155.         $this->basicItem $basicItem;
  156.         $this->util $util;
  157.         $this->orderRepository $orderRepository;
  158.         $this->orderStatusRepository $orderStatusRepository;
  159.         $this->orderPaymentStatusRepository $orderPaymentStatusRepository;
  160.         $this->cartService $cartService;
  161.         $this->mailService $mailService;
  162.         $this->purchaseFlow $shoppingPurchaseFlow;
  163.         $this->mem $mem;
  164.         $this->credit $credit;
  165.         $this->cvs $cvs;
  166.         $this->orderPaymentSendRepository $orderPaymentSendRepository;
  167.         $this->pointProcessor $pointProcessor;
  168.         $this->stockReduceProcessor $stockReduceProcessor;
  169.         $this->isPurchaseProcessTarget false;
  170.         $this->isPurchaseProcessCompleted false;
  171.     }
  172.     /**
  173.      * @return \Symfony\Component\HttpFoundation\Response|\Symfony\Component\HttpFoundation\RedirectResponse|\Eccube\Entity\Order
  174.      */
  175.     protected function checkOrder()
  176.     {   
  177.         $Order null;
  178.         $preOrderId $this->cartService->getPreOrderId();
  179.         if ($preOrderId) {
  180.             $Order $this->orderRepository->findOneBy(
  181.                 ['pre_order_id' => $preOrderId]
  182.             );
  183.         }
  184.         
  185.         if (is_null($Order)) {
  186.             $error_title 'エラー';
  187.             $error_message "注文情報の取得が出来ませんでした。この手続きは無効となりました。";
  188.             return $this->render('error.twig', array('error_message' => $error_message'error_title'=> $error_title));
  189.         }
  190.         
  191.         return $Order;
  192.     }
  193.     
  194.     /**
  195.      * @Route("/shopping/sln_card_payment", name="sln_card_payment")
  196.      * @Template("@SlnPayment42/sln_card_payment.twig")
  197.      */
  198.     public function cardIndex(Request $request)
  199.     {
  200.         $isReCard false;
  201.       
  202.         $Order $this->checkOrder();
  203.         if (!($Order instanceof Order)) {
  204.             $this->addError("受注情報は存在していません。");
  205.             return $this->redirectToRoute('shopping_error');
  206.         }
  207.         $isUser $Order->getCustomer();
  208.         
  209.         $config $this->configRepository->getConfig();
  210.         
  211.         //クレジットカード支払い判断
  212.         $methodClass $Order->getPayment()->getMethodClass();
  213.         if (!MethodUtils::isCreditCardMethod($methodClass)) {
  214.             $this->addError("支払い方法を再度選択ください。");
  215.             return $this->redirectToRoute('shopping_error');
  216.         }
  217.         $cardNo "";
  218.         $form $this->createForm(CardType::class);
  219.         
  220.         if ($methodClass == RegisteredCreditCard::class) {
  221.             $isReCard true;
  222.             $mem $this->mem;
  223.             
  224.             //登録カード情報をとる
  225.             try {
  226.                 //カード登録判断
  227.                 //登録済クレジットカード存在判断
  228.                 $ReMemRef $mem->MemRef($Order->getCustomer(), $config);
  229.             
  230.                 if ($ReMemRef->getContent()->getKaiinStatus() == 0) {//カード登録済
  231.                     $cardNo $ReMemRef->getContent()->getCardNo();
  232.                 } else {
  233.                     $this->addError("登録済カード情報は存在していません。支払い方法を再度選択ください。");
  234.                     return $this->redirectToRoute('shopping_error');
  235.                 }
  236.             } catch (\Exception $e) {
  237.                 log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  238.             }
  239.             if (!$cardNo) {
  240.                 $this->addError("通信エラーが発生しました。支払い方法を再度選択ください。");
  241.                 return $this->redirectToRoute('shopping_error');
  242.             }
  243.             $form->remove('CardNo')
  244.                     ->remove('CardExpYear')
  245.                     ->remove('CardExpMonth')
  246.                     ->remove('KanaSei')
  247.                     ->remove('KanaMei')
  248.                     ->remove('BirthDay')
  249.                     ->remove('TelNo')
  250.                     ->remove('AddMem')
  251.                     ->remove('Token');
  252.         }
  253.         if ($request->getMethod() == "POST") {
  254.             $form->handleRequest($request);
  255.             if ($form->isSubmitted() && $form->isValid()) {
  256.                 $card $this->credit;
  257.                 $connection $this->entityManager->getConnection();
  258.                 
  259.                 $flowResult $this->purchaseFlow->validate($Order, new PurchaseContext($Order$Order->getCustomer()));
  260.                 if ($flowResult->hasWarning() || $flowResult->hasError()) {
  261.                     // 購入バリデーション失敗
  262.                     $this->addError('購入手続きに失敗しました。商品を購入できない状態です。');
  263.                     return $this->redirectToRoute('shopping_error');
  264.                 }
  265.                 try {
  266.                     // 仮購入の状態にする
  267.                     $this->purchaseFlow->prepare($Order, new PurchaseContext());
  268.                     $this->entityManager->flush();
  269.                     //決済状況を記録する
  270.                     $this->orderPaymentStatusRepository->unsettled($Order);
  271.                     if ($methodClass == RegisteredCreditCard::class) {
  272.                         if ($config->getThreedPay() == 1) {//3D決済
  273.                             $master = new \Plugin\SlnPayment42\Service\SlnContent\Credit\ThreeDMaster();
  274.                         } else {
  275.                             $master = new \Plugin\SlnPayment42\Service\SlnContent\Credit\Master();
  276.                         }
  277.                         
  278.                         if ($Order->getCustomer()) {
  279.                             list($KaiinId$KaiinPass) = $this->util->getNewKaiin($this->memCardIdRepository$Order->getCustomer(), $this->eccubeConfig->get('eccube_auth_magic'));
  280.                             
  281.                             $master->setKaiinId($KaiinId);
  282.                             $master->setKaiinPass($KaiinPass);
  283.                         } else {
  284.                             $this->orderPaymentStatusRepository->fail($Order);
  285.                             
  286.                             $this->addError("支払い方法を再度選択ください。");
  287.                             return $this->redirectToRoute('shopping_error');
  288.                         }
  289.                     } else {
  290.                         $master = new \Plugin\SlnPayment42\Service\SlnContent\Credit\ThreeDMaster();
  291.                         
  292.                         $AddMem $form->get('AddMem')->getData();
  293.                         
  294.                         $event = new EventArgs(
  295.                             array(
  296.                                 'AddMem' => $AddMem,
  297.                                 'Order' => $Order,
  298.                             ),
  299.                             $request
  300.                         );
  301.                         $this->eventDispatcher->dispatch($event'sln.payment.shopping.add_mem');
  302.                         $AddMem $event->getArgument('AddMem');
  303.                         
  304.                         if (count($AddMem) && $AddMem[0] == && $Order->getCustomer()) {
  305.                             if($form->get('Token')->getData()) {
  306.                                 //トークン決済
  307.                                 $member = new \Plugin\SlnPayment42\Service\SlnContent\Credit\Member();
  308.                                 $member->setToken($form->get('Token')->getData());
  309.                                 
  310.                                 $mem $this->mem;
  311.                                 $this->util->changeMemCard($mem$this->configRepository$Order->getCustomer(), $member);
  312.                                 
  313.                                 //会員決済
  314.                                 list($KaiinId$KaiinPass) = $this->util->getNewKaiin($this->memCardIdRepository$Order->getCustomer(), $this->eccubeConfig->get('eccube_auth_magic'));
  315.                                 $master->setKaiinId($KaiinId);
  316.                                 $master->setKaiinPass($KaiinPass);
  317.                             }
  318.                         } else {
  319.                             if($form->get('Token')->getData()) {
  320.                                 //トークン決済
  321.                                 $master->setToken($form->get('Token')->getData());
  322.                             }
  323.                         }
  324.                     }
  325.                     $master->setPayType($form->get('PayType')->getData());
  326.                     
  327.                     if ($config->getThreedPay() == 1) {
  328.                         // 3D決済処理
  329.                         $master->setBillingLastName($form->get('BillingLastName')->getData());
  330.                         $master->setBillingFirstName($form->get('BillingFirstName')->getData());
  331.                         $master->setBillingEmail($Order->getEmail());
  332.                         //強制金額を記録する
  333.                         $this->orderPaymentStatusRepository->setOrderStatus($Order0$Order->getPaymentTotal());
  334.                         
  335.                         if ($config->getOperateId() == "1Auth") {
  336.                             $html $card->ThreeDAuth($Order$config$master);
  337.                         } else {
  338.                             $html $card->ThreeDGathering($Order$config$master);
  339.                         }
  340.                         return new Response($html);
  341.                     } else {
  342.                         if ($config->getOperateId() == "1Auth") {
  343.                             $card->Auth($Order$config$master);
  344.                             $this->orderPaymentStatusRepository->auth($Order$master->getAmount());
  345.                         } else {
  346.                             $card->Gathering($Order$config$master);
  347.                             $this->orderPaymentStatusRepository->capture($Order$master->getAmount());
  348.                         }
  349.                     }
  350.                 
  351.                     // トランザクション制御
  352.                     $connection->beginTransaction();
  353.                     // 購入処理
  354.                     $Order->setOrderDate(new \DateTime());
  355.                     $this->purchaseFlow->commit($Order, new PurchaseContext());
  356.                     
  357.                     if ($config->getCardOrderPreEnd() == && $config->getOperateId() == "1Gathering") {
  358.                         $this->orderRepository->changeStatus($Order->getId(), $this->orderStatusRepository->find(OrderStatus::PAID));
  359.                     }
  360.                     else {
  361.                         $this->orderRepository->changeStatus($Order->getId(), $this->orderStatusRepository->find(OrderStatus::NEW));
  362.                     }
  363.                     
  364.                     $connection->commit();
  365.                 } catch (SlnShoppingException $e) {
  366.                     $connection->rollBack();
  367.                     log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  368.                     $this->addWarning($e->getMessage(), 'sln_payment');
  369.                 
  370.                     $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  371.                     $this->util->addCardNotice($log);
  372.                 
  373.                     if ($e->checkSystemError()) {
  374.                         $this->util->addErrorLog($e->getSlnErrorName() . $e->getSlnErrorDetail() . 'order_id:' $Order->getId());
  375.                         $this->slnMailService->sendErrorMail($e->getSlnErrorName() . $e->getSlnErrorDetail());
  376.                     }
  377.                 
  378.                     $this->orderPaymentStatusRepository->fail($Order);
  379.                     return $this->redirectToRoute('sln_card_payment');
  380.                 } catch (ShoppingException $e) {
  381.                     $connection->rollBack();
  382.                     log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  383.                     $this->addError($e->getMessage());
  384.                 
  385.                     $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  386.                     $this->util->addCardNotice($log);
  387.                     $this->util->addErrorLog($log);
  388.                 
  389.                     $this->slnMailService->sendErrorMail("在庫不足エラーが発生した可能性があるため、ログのご確認の上、払戻処理をお願いいたします。");
  390.                 
  391.                     $this->orderPaymentStatusRepository->fail($Order);
  392.                 
  393.                     return $this->redirectToRoute('shopping_error');
  394.                 } catch (\Exception $e) {
  395.                     $connection->rollBack();
  396.                     log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  397.                     $this->addError('front.shopping.system_error');
  398.                 
  399.                     $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  400.                     $this->util->addCardNotice($log);
  401.                     $this->util->addErrorLog($log);
  402.                 
  403.                     $this->slnMailService->sendErrorMail("購入時にシステムエラーが発生しました。ログのご確認の上、払戻処理をお願いいたします。");
  404.                 
  405.                     $this->orderPaymentStatusRepository->fail($Order);
  406.                 
  407.                     return $this->redirectToRoute('shopping_error');
  408.                 }
  409.                 
  410.                 // カート削除
  411.                 $this->cartService->clear()->save();
  412.                 
  413.                 $event = new EventArgs(
  414.                     array(
  415.                         'Order' => $Order,
  416.                     ),
  417.                     $request
  418.                 );
  419.                 $this->eventDispatcher->dispatch($event'sln.front.shopping.confirm.processing');
  420.                 
  421.                 if ($event->getResponse() !== null) {
  422.                     return $event->getResponse();
  423.                 }
  424.                 
  425.                 // 受注IDをセッションにセット
  426.                 $request->getSession()->set($this->sessionOrderKey$Order->getId());
  427.                 
  428.                 // メール送信
  429.                 $mail $this->mailService->sendOrderMail($Order);
  430.                 $this->entityManager->flush();
  431.                 
  432.                 // 完了画面表示
  433.                 return $this->redirectToRoute('shopping_complete');
  434.             } else {
  435.                 $this->addWarning('入力項目をご確認ください。''sln_payment');
  436.             }
  437.         }
  438.         
  439.         $IsAddMemView true;
  440.         
  441.         $event = new EventArgs(
  442.             array(
  443.                 'IsAddMemView' => $IsAddMemView,
  444.                 'Order' => $Order,
  445.             ),
  446.             $request
  447.             );
  448.         $this->eventDispatcher->dispatch($event'sln.payment.shopping.add_mem_view');
  449.         return [
  450.             'TokenJsUrl' => $config->getCreditConnectionPlace6(),
  451.             'TokenNinsyoCode' => $config->getTokenNinsyoCode(),
  452.             'form' => $form->createView(), 
  453.             'config' => $config,
  454.             'Order' => $Order,
  455.             'IsReCard' => $isReCard,
  456.             'IsUser' => $isUser,
  457.             'IsAddMemView' => $event->getArgument('IsAddMemView'),
  458.             'cardNo' => $cardNo,
  459.             'Is3DPay' => $config->getThreedPay() == 1,
  460.         ];
  461.     }
  462.     
  463.     /**
  464.      * @Route("/sln_payment/sln_3d_card", name="sln_3d_card")
  465.      */
  466.     public function threeCard(Request $request
  467.     {
  468.         // sleep(10);
  469.         $card $this->credit;
  470.         $config $this->configRepository->getConfig();
  471.         $connection $this->entityManager->getConnection();
  472.         try {
  473.             $EncryptValue $_POST['EncryptValue'];
  474.             if (!strlen($EncryptValue)) {
  475.                 $this->addError("受注情報は存在していません。");
  476.                 return $this->redirectToRoute('shopping_error');
  477.             }
  478.             
  479.             $Order $this->checkOrder();
  480.             if (!($Order instanceof \Eccube\Entity\Order)) {
  481.                 $this->addError("受注情報は存在していません。");
  482.                 return $this->redirectToRoute('shopping_error');
  483.             }
  484.             // 購入処理が未完了の場合は購入処理の対象とする
  485.             $paymentStatus $this->orderPaymentStatusRepository->getStatus($Order);
  486.             $this->isPurchaseProcessTarget $card->isPurchaseProcessTarget($paymentStatus);
  487.             // 決済処理結果を判定し、NGなら例外処理内で在庫戻し
  488.             $ReThreeDAuth $card->DeCodeThreeDResponse($EncryptValue$Order->getId(), "threeCard");
  489.             if ($ReThreeDAuth->getContent()->getMerchantFree1() != $Order->getId()) {
  490.                 $this->addError("受注情報は存在していません。");
  491.                 return $this->redirectToRoute('shopping_error');
  492.             }
  493.             if ($this->isPurchaseProcessTarget) {
  494.                 if ($ReThreeDAuth->getContent()->getOperateId() == "1Auth") {
  495.                     $this->orderPaymentStatusRepository->auth($Order$paymentStatus->getAmount());
  496.                 } else {
  497.                     $this->orderPaymentStatusRepository->capture($Order$paymentStatus->getAmount());
  498.                 }
  499.                 $connection->beginTransaction();
  500.                 // 購入処理
  501.                 $Order->setOrderDate(new \DateTime());
  502.                 $this->purchaseFlow->commit($Order, new PurchaseContext());
  503.                 if ($config->getCardOrderPreEnd() == && $config->getOperateId() == "1Gathering") {
  504.                     $this->orderRepository->changeStatus($Order->getId(), $this->orderStatusRepository->find(OrderStatus::PAID));
  505.                 }
  506.                 else {
  507.                     $this->orderRepository->changeStatus($Order->getId(), $this->orderStatusRepository->find(OrderStatus::NEW));
  508.                 }
  509.                 $connection->commit();
  510.                 $this->isPurchaseProcessCompleted true;
  511.             }
  512.         } catch (SlnShoppingException $e) {
  513.             $connection->rollBack();
  514.             //最新の3D決済送信情報を取得
  515.             $orderPaymentSend $this->orderPaymentSendRepository->getLatestData($Order"");
  516.             //未ロールバックであるならフラグをセットして、ロールバック処理を実行する
  517.             if (!$orderPaymentSend->getRollbackFlg()) {
  518.                 $orderPaymentSend->setRollbackFlg(1);
  519.                 // 在庫戻し
  520.                 $this->purchaseFlow->rollback($Order, new PurchaseContext());
  521.                 $this->entityManager->flush();
  522.             }
  523.                
  524.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  525.             $this->addWarning($e->getMessage(), 'sln_payment');
  526.         
  527.             $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  528.             $this->util->addCardNotice($log);
  529.         
  530.             if ($e->checkSystemError()) {
  531.                 $this->util->addErrorLog($e->getSlnErrorName() . $e->getSlnErrorDetail() . 'order_id:' $Order->getId())  . " " $e->getFile() . $e->getLine();
  532.                 $this->slnMailService->sendErrorMail($e->getSlnErrorName() . $e->getSlnErrorDetail());
  533.             }
  534.             // すでに購入処理後の決済ステータスになっている場合は決済失敗に更新しない
  535.             if ($this->isPurchaseProcessTarget) {
  536.                 $this->orderPaymentStatusRepository->fail($Order);
  537.             }
  538.             return $this->redirectToRoute('sln_card_payment');
  539.         } catch (ShoppingException $e) {
  540.             $connection->rollBack();
  541.             //最新の3D決済送信情報を取得
  542.             $orderPaymentSend $this->orderPaymentSendRepository->getLatestData($Order"");
  543.             //未ロールバックであるならフラグをセットして、ロールバック処理を実行する
  544.             if (!$orderPaymentSend->getRollbackFlg()) {
  545.                 $orderPaymentSend->setRollbackFlg(1);
  546.                 // 在庫戻し
  547.                 $this->purchaseFlow->rollback($Order, new PurchaseContext());
  548.                 $this->entityManager->flush();
  549.             }
  550.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  551.             $this->addError($e->getMessage());
  552.         
  553.             $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  554.             $this->util->addCardNotice($log);
  555.             $this->util->addErrorLog($log);
  556.         
  557.             $this->slnMailService->sendErrorMail("在庫不足エラーが発生した可能性があるため、ログのご確認の上、払戻処理をお願いいたします。");
  558.         
  559.             // すでに購入処理後の決済ステータスになっている場合は決済失敗に更新しない
  560.             if ($this->isPurchaseProcessTarget) {
  561.                 $this->orderPaymentStatusRepository->fail($Order);
  562.             }
  563.         
  564.             return $this->redirectToRoute('shopping_error');
  565.         } catch (\Exception $e) {
  566.             $connection->rollBack();
  567.             //最新の3D決済送信情報を取得
  568.             $orderPaymentSend $this->orderPaymentSendRepository->getLatestData($Order"");
  569.             //未ロールバックであるならフラグをセットして、ロールバック処理を実行する
  570.             if (!$orderPaymentSend->getRollbackFlg()) {
  571.                 $orderPaymentSend->setRollbackFlg(1);
  572.                 // 在庫戻し
  573.                 $this->purchaseFlow->rollback($Order, new PurchaseContext());
  574.                 $this->entityManager->flush();
  575.             }
  576.         
  577.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  578.             $this->addError('front.shopping.system_error');
  579.         
  580.             $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  581.             $this->util->addCardNotice($log);
  582.             $this->util->addErrorLog($log);
  583.         
  584.             $this->slnMailService->sendErrorMail("購入時にシステムエラーが発生しました。ログのご確認の上、払戻処理をお願いいたします。");
  585.         
  586.             // すでに購入処理後の決済ステータスになっている場合は決済失敗に更新しない
  587.             if ($this->isPurchaseProcessTarget) {
  588.                 $this->orderPaymentStatusRepository->fail($Order);
  589.             }
  590.         
  591.             return $this->redirectToRoute('shopping_error');
  592.         }
  593.         // カート削除
  594.         $this->cartService->clear()->save();
  595.         
  596.         // 受注IDをセッションにセット
  597.         $request->getSession()->set($this->sessionOrderKey$Order->getId());
  598.         // 購入完了メール送信
  599.         if ($this->isPurchaseProcessCompleted) {
  600.                 $event = new EventArgs(
  601.                     array(
  602.                         'Order' => $Order,
  603.                     ),
  604.                     $request);
  605.                 $this->eventDispatcher->dispatch($event'sln.front.shopping.confirm.processing');
  606.                 
  607.                 if ($event->getResponse() !== null) {
  608.                     return $event->getResponse();
  609.                 }
  610.                 $this->mailService->sendOrderMail($Order);
  611.                 $this->entityManager->flush();
  612.         }
  613.         // 完了画面表示
  614.         return $this->redirectToRoute('shopping_complete');
  615.     }
  616.     
  617.     /**
  618.      * @Route("/sln_payment/sln_3d_mem", name="sln_3d_mem_card")
  619.      */
  620.     public function threeMemCard(Request $request)
  621.     {
  622.         $EncryptValue $_POST['EncryptValue'];
  623.         if (!strlen($EncryptValue)) {
  624.             $this->addError("受注情報は存在していません。");
  625.             return $this->redirectToRoute('shopping_error');
  626.         }
  627.         
  628.         $Order $this->checkOrder();
  629.         if (!($Order instanceof \Eccube\Entity\Order)) {
  630.             $this->addError("受注情報は存在していません。");
  631.             return $this->redirectToRoute('shopping_error');
  632.         }
  633.         
  634.         $mem $this->mem;
  635.         $ReThreeDAuth $mem->DeCodeThreeDResponse($EncryptValue"threeMemCard");
  636.         
  637.         if ($ReThreeDAuth->getContent()->getMerchantFree1() != $Order->getId()) {
  638.             $this->addError("受注情報は存在していません。");
  639.             return $this->redirectToRoute('shopping_error');
  640.         }
  641.     
  642.         /* @var $paymentStatus \Plugin\SlnPayment42\Entity\OrderPaymentStatus */
  643.         $paymentStatus $this->orderPaymentStatusRepository->getStatus($Order);
  644.         
  645.         $master = new \Plugin\SlnPayment42\Service\SlnContent\Credit\Master();
  646.         list($KaiinId$KaiinPass) = $this->util->getNewKaiin($this->memCardIdRepository$Order->getCustomer(), $this->eccubeConfig->get('eccube_auth_magic'));
  647.         $master->setKaiinId($KaiinId);
  648.         $master->setKaiinPass($KaiinPass);
  649.         
  650.         $master->setPayType($request->getSession()->get($this->sessionPayType));
  651.         $request->getSession()->remove($this->sessionPayType);
  652.         
  653.         $card $this->credit;
  654.         
  655.         if ($config->getOperateId() == "1Auth") {
  656.             $card->Auth($Order$this->configRepository->getConfig(), $master);
  657.             $this->orderPaymentStatusRepository->auth($Order$master->getAmount());
  658.         } else {
  659.             $card->Gathering($Order$this->configRepository->getConfig(), $master);
  660.             $this->orderPaymentStatusRepository->capture($Order$paymentStatus->getAmount());
  661.         }
  662.         $connection $this->entityManager->getConnection();
  663.         $connection->beginTransaction();
  664.         try{
  665.             // 購入処理
  666.             $Order->setOrderDate(new \DateTime());
  667.             $this->purchaseFlow->commit($Order, new PurchaseContext());
  668.             
  669.             if ($config->getCardOrderPreEnd() == && $config->getOperateId() == "1Gathering") {
  670.                 $this->orderRepository->changeStatus($Order->getId(), $this->orderStatusRepository->find(OrderStatus::PAID));
  671.             }
  672.             else {
  673.                 $this->orderRepository->changeStatus($Order->getId(), $this->orderStatusRepository->find(OrderStatus::NEW));
  674.             }
  675.             
  676.             $connection->commit();
  677.         } catch (SlnShoppingException $e) {           
  678.             $connection->rollBack();
  679.             //最新の3D決済送信情報を取得
  680.             $orderPaymentSend $this->orderPaymentSendRepository->getLatestData($Order"");
  681.             //未ロールバックであるならフラグをセットして、ロールバック処理を実行する
  682.             if (!$orderPaymentSend->getRollbackFlg()) {
  683.                 $orderPaymentSend->setRollbackFlg(1);
  684.                 // 仮購入解除
  685.                 $this->purchaseFlow->rollback($Order, new PurchaseContext());
  686.                 $this->entityManager->flush();
  687.             }
  688.             
  689.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  690.             $this->addWarning($e->getMessage(), 'sln_payment');
  691.             
  692.             if ($Order->getCustomer()->getId()) {
  693.                 try {
  694.                     $this->util->delMemCard($Order->getCustomer());
  695.                 } catch (\Exception $e) {
  696.                     log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  697.                 }   
  698.             }
  699.         
  700.             $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  701.             $this->util->addCardNotice($log);
  702.         
  703.             if ($e->checkSystemError()) {
  704.                 $this->util->addErrorLog($e->getSlnErrorName() . $e->getSlnErrorDetail() . 'order_id:' $Order->getId())  . " " $e->getFile() . $e->getLine();
  705.                 $this->slnMailService->sendErrorMail($e->getSlnErrorName() . $e->getSlnErrorDetail());
  706.             }
  707.             
  708.             $this->orderPaymentStatusRepository->fail($Order);
  709.         
  710.             return $this->redirectToRoute('sln_card_payment');
  711.         } catch (ShoppingException $e) {
  712.             $connection->rollBack();
  713.             //最新の3D決済送信情報を取得
  714.             $orderPaymentSend $this->orderPaymentSendRepository->getLatestData($Order"");
  715.             //未ロールバックであるならフラグをセットして、ロールバック処理を実行する
  716.             if (!$orderPaymentSend->getRollbackFlg()) {
  717.                 $orderPaymentSend->setRollbackFlg(1);
  718.                 // 仮購入解除
  719.                 $this->purchaseFlow->rollback($Order, new PurchaseContext());
  720.                 $this->entityManager->flush();
  721.             }
  722.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  723.             $this->addError($e->getMessage());
  724.         
  725.             $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  726.             $this->util->addCardNotice($log);
  727.             $this->util->addErrorLog($log);
  728.         
  729.             $this->slnMailService->sendErrorMail("在庫不足エラーが発生した可能性があるため、ログのご確認の上、払戻処理をお願いいたします。");
  730.         
  731.             $this->orderPaymentStatusRepository->fail($Order);
  732.         
  733.             return $this->redirectToRoute('shopping_error');
  734.         } catch (\Exception $e) {
  735.             $connection->rollBack();
  736.             //最新の3D決済送信情報を取得
  737.             $orderPaymentSend $this->orderPaymentSendRepository->getLatestData($Order"");
  738.             //未ロールバックであるならフラグをセットして、ロールバック処理を実行する
  739.             if (!$orderPaymentSend->getRollbackFlg()) {
  740.                 $orderPaymentSend->setRollbackFlg(1);
  741.                 // 仮購入解除
  742.                 $this->purchaseFlow->rollback($Order, new PurchaseContext());
  743.                 $this->entityManager->flush();
  744.             }
  745.         
  746.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  747.             $this->addError('front.shopping.system_error');
  748.         
  749.             $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  750.             $this->util->addCardNotice($log);
  751.             $this->util->addErrorLog($log);
  752.         
  753.             $this->slnMailService->sendErrorMail("購入時にシステムエラーが発生しました。ログのご確認の上、払戻処理をお願いいたします。");
  754.         
  755.             $this->orderPaymentStatusRepository->fail($Order);
  756.         
  757.             return $this->redirectToRoute('shopping_error');
  758.         }
  759.         
  760.         // カート削除
  761.         $this->cartService->clear()->save();
  762.         
  763.         $event = new EventArgs(
  764.             array(
  765.                 'Order' => $Order,
  766.             ),
  767.             $request
  768.         );
  769.         $this->eventDispatcher->dispatch($event'sln.front.shopping.confirm.processing');
  770.         
  771.         if ($event->getResponse() !== null) {
  772.             return $event->getResponse();
  773.         }
  774.         
  775.         // 受注IDをセッションにセット
  776.         $request->getSession()->set($this->sessionOrderKey$Order->getId());
  777.         
  778.         // メール送信
  779.         $this->mailService->sendOrderMail($Order);
  780.         $this->entityManager->flush();
  781.         
  782.         // 完了画面表示
  783.         return $this->redirectToRoute('shopping_complete');
  784.     }
  785.     
  786.     /**
  787.      * @Route("/sln_payment/sln_3d_card_post", name="sln_3d_card_post")
  788.      * @Template("@SlnPayment42/sln_recv.twig")
  789.      */
  790.     public function threeCardPost(Request $request
  791.     {
  792.         sleep(10);// threeCardと時間をずらす
  793.         $card $this->credit;
  794.         $config $this->configRepository->getConfig();
  795.         $connection $this->entityManager->getConnection();
  796.         try {
  797.             $EncryptValue $_POST['EncryptValue'];
  798.             if (!strlen($EncryptValue)) {
  799.                 exit;
  800.             }
  801.             // 在庫戻し用にOrderをあらかじめ保持
  802.             $RespAuth $card->decodeRespAuth($EncryptValue"threeCardPost");
  803.             $Order $this->orderRepository->findOneBy(array('id' => $RespAuth->getContent()->getMerchantFree1()));
  804.             // 購入処理が未完了の場合は購入処理の対象とする
  805.             $paymentStatus $this->orderPaymentStatusRepository->getStatus($Order);
  806.             $this->isPurchaseProcessTarget $card->isPurchaseProcessTarget($paymentStatus);
  807.             // 決済処理結果を判定し、NGなら例外処理内で在庫戻し
  808.             $ReThreeDAuth $card->DeCodeThreeDResponse($EncryptValuenull"threeCardPost");
  809.             if ($this->isPurchaseProcessTarget) {
  810.                 if ($ReThreeDAuth->getContent()->getOperateId() == "1Auth") {
  811.                     $this->orderPaymentStatusRepository->auth($Order$paymentStatus->getAmount());
  812.                 } else {
  813.                     $this->orderPaymentStatusRepository->capture($Order$paymentStatus->getAmount());
  814.                 }
  815.                 $connection->beginTransaction();
  816.                 // 購入処理
  817.                 $Order->setOrderDate(new \DateTime());
  818.                 $this->purchaseFlow->commit($Order, new PurchaseContext());
  819.                 if ($config->getCardOrderPreEnd() == && $config->getOperateId() == "1Gathering") {
  820.                     $this->orderRepository->changeStatus($Order->getId(), $this->orderStatusRepository->find(OrderStatus::PAID));
  821.                 }
  822.                 else {
  823.                     $this->orderRepository->changeStatus($Order->getId(), $this->orderStatusRepository->find(OrderStatus::NEW));
  824.                 }
  825.                 $connection->commit();
  826.                 $this->isPurchaseProcessCompleted true;
  827.             }
  828.         } catch (SlnShoppingException $e) {
  829.             $connection->rollBack();
  830.             //最新の3D決済送信情報を取得
  831.             $orderPaymentSend $this->orderPaymentSendRepository->getLatestData($Order$RespAuth->getContent()->getProcNo());
  832.             //未ロールバックであるならフラグをセットして、ロールバック処理を実行する
  833.             if (!$orderPaymentSend->getRollbackFlg()) {
  834.                 $orderPaymentSend->setRollbackFlg(1);
  835.                 // 在庫戻し(POST電文用)
  836.                 $collection = new ArrayCollection([$this->pointProcessor$this->stockReduceProcessor]);
  837.                 $this->purchaseFlow->setPurchaseProcessors($collection);
  838.                 $this->purchaseFlow->rollback($Order, new PurchaseContext());
  839.                 $this->entityManager->flush();
  840.             }
  841.              
  842.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  843.             // $this->addWarning($e->getMessage(), 'sln_payment');
  844.         
  845.             $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $e->getSlnErrorOrderId())  . " " $e->getFile() . $e->getLine();
  846.             $this->util->addCardNotice($log);
  847.         
  848.             if ($e->checkSystemError()) {
  849.                 $this->util->addErrorLog($e->getSlnErrorName() . $e->getSlnErrorDetail() . 'order_id:' $e->getSlnErrorOrderId() . " " $e->getFile() . $e->getLine());
  850.                 // $this->slnMailService->sendErrorMail($e->getSlnErrorName() . $e->getSlnErrorDetail());
  851.             }
  852.         
  853.             // すでに購入処理後の決済ステータスになっている場合は決済失敗に更新しない
  854.             if ($this->isPurchaseProcessTarget) {
  855.                 $this->orderPaymentStatusRepository->fail($Order);
  856.             }
  857.         
  858.             return ['re_code' => ""];
  859.         } catch (ShoppingException $e) {
  860.             $connection->rollBack();
  861.             //最新の3D決済送信情報を取得
  862.             $orderPaymentSend $this->orderPaymentSendRepository->getLatestData($Order$RespAuth->getContent()->getProcNo());
  863.             //未ロールバックであるならフラグをセットして、ロールバック処理を実行する
  864.             if (!$orderPaymentSend->getRollbackFlg()) {
  865.                 $orderPaymentSend->setRollbackFlg(1);
  866.                 // 在庫戻し(POST電文用)
  867.                 $collection = new ArrayCollection([$this->pointProcessor$this->stockReduceProcessor]);
  868.                 $this->purchaseFlow->setPurchaseProcessors($collection);
  869.                 $this->purchaseFlow->rollback($Order, new PurchaseContext());
  870.                 $this->entityManager->flush();
  871.             }
  872.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  873.             $this->addError($e->getMessage());
  874.         
  875.             $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  876.             $this->util->addCardNotice($log);
  877.             $this->util->addErrorLog($log);
  878.         
  879.             $this->slnMailService->sendErrorMail("在庫不足エラーが発生した可能性があるため、ログのご確認の上、払戻処理をお願いいたします。");
  880.         
  881.             // すでに購入処理後の決済ステータスになっている場合は決済失敗に更新しない
  882.             if ($this->isPurchaseProcessTarget) {
  883.                 $this->orderPaymentStatusRepository->fail($Order);
  884.             }
  885.             
  886.             return ['re_code' => ""];
  887.         } catch (\Exception $e) {
  888.             $connection->rollBack();
  889.             //最新の3D決済送信情報を取得
  890.             $orderPaymentSend $this->orderPaymentSendRepository->getLatestData($Order$RespAuth->getContent()->getProcNo());
  891.             //未ロールバックであるならフラグをセットして、ロールバック処理を実行する
  892.             if (!$orderPaymentSend->getRollbackFlg()) {
  893.                 $orderPaymentSend->setRollbackFlg(1);
  894.                 // 在庫戻し(POST電文用)
  895.                 $collection = new ArrayCollection([$this->pointProcessor$this->stockReduceProcessor]);
  896.                 $this->purchaseFlow->setPurchaseProcessors($collection);
  897.                 $this->purchaseFlow->rollback($Order, new PurchaseContext());
  898.                 $this->entityManager->flush();
  899.             }
  900.         
  901.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  902.             $this->addError('front.shopping.system_error');
  903.         
  904.             $log sprintf("card shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId() . " " $e->getFile() . $e->getLine());
  905.             $this->util->addCardNotice($log);
  906.             $this->util->addErrorLog($log);
  907.         
  908.             $this->slnMailService->sendErrorMail("購入時にシステムエラーが発生しました。ログのご確認の上、払戻処理をお願いいたします。");
  909.         
  910.             // すでに購入処理後の決済ステータスになっている場合は決済失敗に更新しない
  911.             if ($this->isPurchaseProcessTarget) {
  912.                 $this->orderPaymentStatusRepository->fail($Order);
  913.             }
  914.             
  915.             return ['re_code' => ""];
  916.         }
  917.         // 購入完了メール送信
  918.         if ($this->isPurchaseProcessCompleted) {
  919.             $event = new EventArgs(
  920.                 array(
  921.                     'Order' => $Order,
  922.                 ),
  923.                 $request);
  924.             $this->eventDispatcher->dispatch($event'sln.front.shopping.confirm.processing');
  925.             
  926.             if ($event->getResponse() !== null) {
  927.                 return $event->getResponse();
  928.             }
  929.             
  930.             $this->mailService->sendOrderMail($Order);
  931.             $this->entityManager->flush();
  932.         }
  933.         
  934.         return ['re_code' => ""];
  935.     }
  936.     
  937.     /**
  938.      * @Route("/shopping/sln_cvs_payment", name="sln_cvs_payment")
  939.      */
  940.     public function cvsIndex(Request $request)
  941.     {
  942.         $Order $this->checkOrder();
  943.         if (!($Order instanceof \Eccube\Entity\Order)) {
  944.             $this->addError("受注情報は存在していません。");
  945.             return $this->redirectToRoute('shopping_error');
  946.         }
  947.         $methodClass $Order->getPayment()->getMethodClass();
  948.         if (!MethodUtils::isCvsMethod($methodClass)) {
  949.             $this->addError("支払い方法を再度選択ください。");
  950.             return $this->redirectToRoute('shopping_error');
  951.         }
  952.         $cvs $this->cvs;
  953.         
  954.         // 仮購入の状態にする
  955.         $this->purchaseFlow->prepare($Order, new PurchaseContext());
  956.         $this->entityManager->flush();
  957.         // トランザクション制御
  958.         $connection $this->entityManager->getConnection();
  959.         $connection->beginTransaction();
  960.         
  961.         try {
  962.             //決済状況を記録する
  963.             $this->orderPaymentStatusRepository->unsettled($Order);
  964.             
  965.             //通信処理を行う
  966.             list($reUrl$add) = $cvs->Add(
  967.                 $Order
  968.                 $this->configRepository->getConfig(), 
  969.                 $request->getSchemeAndHttpHost() . $this->generateUrl('shopping_complete'));
  970.             
  971.             $this->orderPaymentStatusRepository->requestSuccess($Order$add->getContent()->getAmount());
  972.             
  973.             // 購入処理
  974.             $Order->setOrderDate(new \DateTime());
  975.             $this->purchaseFlow->commit($Order, new PurchaseContext());
  976.             $this->orderRepository->changeStatus($Order->getId(), $this->orderStatusRepository->find(OrderStatus::NEW));
  977.         
  978.             $connection->commit();
  979.         } catch (SlnShoppingException $e) {
  980.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  981.             $this->addError($e->getMessage());
  982.             
  983.             $log sprintf("cvs shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId())  . " " $e->getFile() . $e->getLine();
  984.             $this->util->addCvsNotice($log);
  985.             
  986.             if ($e->checkSystemError()) {
  987.                 $this->util->addErrorLog($e->getSlnErrorName() . $e->getSlnErrorDetail() . 'order_id:' $Order->getId())  . " " $e->getFile() . $e->getLine();
  988.                 $this->slnMailService->sendErrorMail($e->getSlnErrorName() . $e->getSlnErrorDetail());
  989.             }
  990.             
  991.             $this->orderPaymentStatusRepository->fail($Order);
  992.             $connection->commit();
  993.             
  994.             return $this->redirectToRoute('shopping_error');
  995.             
  996.         } catch (ShoppingException $e) {
  997.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  998.             $this->addError($e->getMessage());
  999.             
  1000.             $log sprintf("cvs shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId())  . " " $e->getFile() . $e->getLine();
  1001.             $this->util->addCvsNotice($log);
  1002.             $this->util->addErrorLog($log);
  1003.             
  1004.             $this->slnMailService->sendErrorMail("在庫不足エラーが発生した可能性があるため、ログのご確認の上、払戻処理をお願いいたします。");
  1005.             
  1006.             $this->orderPaymentStatusRepository->fail($Order);
  1007.             $connection->commit();
  1008.             
  1009.             return $this->redirectToRoute('shopping_error');
  1010.         } catch (\Exception $e) {
  1011.             log_error(__FILE__ '(' __LINE__ ') ' $e->getMessage());
  1012.             $this->addError('front.shopping.system_error');
  1013.             
  1014.             $log sprintf("cvs shopping error:%s order_id(%s)"$e->getMessage(), $Order->getId())  . " " $e->getFile() . $e->getLine();
  1015.             $this->util->addCvsNotice($log);
  1016.             $this->util->addErrorLog($log);
  1017.             
  1018.             $this->slnMailService->sendErrorMail("購入時にシステムエラーが発生しました。ログのご確認の上、払戻処理をお願いいたします。");
  1019.             
  1020.             $this->orderPaymentStatusRepository->fail($Order);
  1021.             $connection->commit();
  1022.             
  1023.             return $this->redirectToRoute('shopping_error');
  1024.         }
  1025.         
  1026.          // カート削除
  1027.         $this->cartService->clear()->save();
  1028.         
  1029.         $event = new EventArgs(
  1030.                 array(
  1031.                     'Order' => $Order,
  1032.                 ),
  1033.                 $request
  1034.         );
  1035.         $this->eventDispatcher->dispatch($event'sln.front.shopping.confirm.processing');
  1036.         
  1037.         if ($event->getResponse() !== null) {
  1038.             return $event->getResponse();
  1039.         }
  1040.         
  1041.         // 受注IDをセッションにセット
  1042.         $request->getSession()->set($this->sessionOrderKey$Order->getId());
  1043.         
  1044.         // メール送信
  1045.         $this->slnMailService->sendOrderMail($Order$reUrl);
  1046.         $this->entityManager->flush();
  1047.         
  1048.         // オンライン収納画面に移動する
  1049.         return $this->redirect($reUrl);
  1050.     }
  1051.     
  1052.     /**
  1053.      * オンライン収納決済通知受信
  1054.      * 
  1055.      * @Method("POST")
  1056.      * @Route("/sln_payment/sln_recv", name="sln_recv")
  1057.      * @Template("@SlnPayment42/sln_recv.twig")
  1058.      */
  1059.     public function recvIndex(Request $request
  1060.     {
  1061.         $reCode 1;
  1062.         $paramHash = array();
  1063.         
  1064.         $this->util->addCvsNotice("recv request_post_data:" json_encode($request->request->all()));
  1065.         
  1066.         $all $request->request->all();
  1067.             
  1068.         $paramHash['TransactionId'] = $all['TransactionId'];
  1069.         $paramHash['TransactionDate'] = $all['TransactionDate'];
  1070.         $paramHash['Amount'] = $all['Amount'];
  1071.         
  1072.         if ($all['MerchantId'] && $all['TransactionId']) {//必要項目をチェックする
  1073.             
  1074.             try {
  1075.                 $cvs $this->cvs;
  1076.                 list($orderId$RecvContent) = $cvs->Recv($this->configRepository->getConfig(), $request);
  1077.                 
  1078.                 $Order $this->orderRepository->findOneBy(array('id' => $orderId));
  1079.                 
  1080.                 $paramHash['OrderId'] = $orderId;
  1081.                 $paramHash['PaymentTotal'] = $Order->getPaymentTotal();
  1082.                 
  1083.                 //状態コードを確認する
  1084.                 if ($RecvContent->getCondition() == '000') {
  1085.                     //通知結果判断
  1086.                     if ($RecvContent->getResponseCd() == "OK") {
  1087.                         
  1088.                         if ($Order->getPaymentTotal() == $RecvContent->getAmount()) {//支払い情報を確認
  1089.                             
  1090.                             //決済ステータスを変更する
  1091.                             $this->orderPaymentStatusRepository->paySuccess($Order$RecvContent->getCvsCd());
  1092.                             
  1093.                             //受注ステータスを更新する
  1094.                             $Order->setOrderStatus($this->orderStatusRepository->find(OrderStatus::PAID));
  1095.                             $Order->setPaymentDate(new \DateTime());
  1096.                             $this->entityManager->persist($Order);
  1097.                             $this->entityManager->flush();
  1098.                             $reCode 0;
  1099.                         } else {
  1100.                             $paramHash['message'] = "受注金額と決済金額が一致していません。";
  1101.                             $this->slnMailService->sendMailNoOrder($paramHash);
  1102.                         }
  1103.                     } else {
  1104.                         $arrErr $this->util->reErrorDecode($RecvContent->getResponseCd());
  1105.                         $paramHash['message'] = $arrErr[2] . "\nResponseCd:" $RecvContent->getResponseCd();
  1106.                         $this->slnMailService->sendMailNoOrder($paramHash);
  1107.                     }
  1108.                 } else {
  1109.                     $paramHash['message'] = sprintf("状態コード対象外です。(Condition:%s)"$RecvContent->getCondition());
  1110.                     $this->slnMailService->sendMailNoOrder($paramHash);
  1111.                 }
  1112.                 //$reCode = 0;
  1113.             } catch (\Exception $e) {
  1114.                 $mess $e->getMessage();
  1115.                 $paramHash['message'] = $mess;
  1116.                 
  1117.                 $this->slnMailService->sendMailNoOrder($paramHash);
  1118.             }
  1119.             
  1120.         } else {
  1121.             $paramHash['message'] = "MerchantId または TransactionIdが存在していません。";
  1122.             $this->slnMailService->sendMailNoOrder($paramHash);
  1123.         }
  1124.         
  1125.         return ['re_code' => $reCode];
  1126.     }
  1127. }