예제 #1
0
 public function execute()
 {
     $active = null;
     // check if 3d is active
     $order = $this->_getOrder();
     if ($order->getPayment()) {
         $active = $order->getPayment()->getAdditionalInformation('3dActive');
     }
     // check if 3D secure is active. If not just go to success page
     if ($active) {
         $this->_adyenLogger->addAdyenResult("3D secure is active");
         // check if it is already processed
         if ($this->getRequest()->isPost()) {
             $this->_adyenLogger->addAdyenResult("Process 3D secure payment");
             $requestMD = $this->getRequest()->getPost('MD');
             $requestPaRes = $this->getRequest()->getPost('PaRes');
             $md = $order->getPayment()->getAdditionalInformation('md');
             if ($requestMD == $md) {
                 $order->getPayment()->setAdditionalInformation('paResponse', $requestPaRes);
                 try {
                     $result = $order->getPayment()->getMethodInstance()->authorise3d($order->getPayment());
                 } catch (Exception $e) {
                     $result = 'Refused';
                 }
                 // check if authorise3d was successful
                 if ($result == 'Authorised') {
                     $order->addStatusHistoryComment(__('3D-secure validation was successful'))->save();
                     $this->_redirect('checkout/onepage/success');
                 } else {
                     $order->addStatusHistoryComment(__('3D-secure validation was unsuccessful.'))->save();
                     $this->_adyenHelper->cancelOrder($order);
                 }
             }
         } else {
             $this->_adyenLogger->addAdyenResult("Customer was redirected to bank for 3D-secure validation.");
             $order->addStatusHistoryComment(__('Customer was redirected to bank for 3D-secure validation.'))->save();
             $this->_view->loadLayout();
             $this->_view->getLayout()->initMessages();
             $this->_view->renderLayout();
         }
     } else {
         $this->_redirect('checkout/onepage/success/');
     }
 }
예제 #2
0
 protected function _cancel($response)
 {
     $session = $this->_session;
     // restore the quote
     $session->restoreQuote();
     $order = $this->_order;
     $this->_adyenHelper->cancelOrder($order);
     if (isset($response['authResult']) && $response['authResult'] == \Adyen\Payment\Model\Notification::CANCELLED) {
         $this->messageManager->addError(__('You have cancelled the order. Please try again'));
     } else {
         $this->messageManager->addError(__('Your payment failed, Please try again later'));
     }
 }
예제 #3
0
 /**
  * Validate 3D secure payment
  */
 public function execute()
 {
     $active = null;
     // check if 3d is active
     $order = $this->_getOrder();
     if ($order->getPayment()) {
         $active = $order->getPayment()->getAdditionalInformation('3dActive');
     }
     // check if 3D secure is active. If not just go to success page
     if ($active) {
         $this->_adyenLogger->addAdyenResult("3D secure is active");
         // check if it is already processed
         if ($this->getRequest()->isPost()) {
             $this->_adyenLogger->addAdyenResult("Process 3D secure payment");
             $requestMD = $this->getRequest()->getPost('MD');
             $requestPaRes = $this->getRequest()->getPost('PaRes');
             $md = $order->getPayment()->getAdditionalInformation('md');
             if ($requestMD == $md) {
                 $order->getPayment()->setAdditionalInformation('paResponse', $requestPaRes);
                 try {
                     /**
                      * Magento should allow this.
                      * https://github.com/magento/magento2/issues/5819
                      */
                     //                        $result = $order->getPayment()->getMethodInstance()->executeCommand(
                     //                            'authorise_3d',
                     //                            ['payment' => $order->getPayment(), 'amount' => $order->getGrandTotal()]
                     //                        );
                     // old fashion way:
                     $result = $this->_authorise3d($order->getPayment());
                 } catch (\Exception $e) {
                     $this->_adyenLogger->addAdyenResult("Process 3D secure payment was refused");
                     $result = 'Refused';
                 }
                 $this->_adyenLogger->addAdyenResult("Process 3D secure payment result is: " . $result);
                 // check if authorise3d was successful
                 if ($result == 'Authorised') {
                     $order->addStatusHistoryComment(__('3D-secure validation was successful'))->save();
                     $this->_redirect('checkout/onepage/success');
                 } else {
                     $order->addStatusHistoryComment(__('3D-secure validation was unsuccessful.'))->save();
                     $this->_adyenHelper->cancelOrder($order);
                     $this->messageManager->addErrorMessage("3D-secure validation was unsuccessful");
                     // reactivate the quote
                     $session = $this->_getCheckout();
                     // restore the quote
                     $session->restoreQuote();
                     $this->_redirect('checkout/cart');
                 }
             }
         } else {
             $this->_adyenLogger->addAdyenResult("Customer was redirected to bank for 3D-secure validation.");
             $order->addStatusHistoryComment(__('Customer was redirected to bank for 3D-secure validation.'))->save();
             $this->_view->loadLayout();
             $this->_view->getLayout()->initMessages();
             $this->_view->renderLayout();
         }
     } else {
         $this->_redirect('checkout/onepage/success/');
     }
 }