コード例 #1
0
ファイル: Validate3d.php プロジェクト: pivulic/adyen-magento2
 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
ファイル: ResultPos.php プロジェクト: Adyen/adyen-magento2
 /**
  * Validate checksum from result parameters
  *
  * @param $response
  * @return bool
  */
 protected function _validateChecksum($response)
 {
     $checksum = $response['cs'];
     $result = $response['result'];
     $amount = $response['originalCustomAmount'];
     $currency = $response['originalCustomCurrency'];
     $sessionId = $response['sessionId'];
     // for android sessionis is with low i
     if ($sessionId == "") {
         $sessionId = $response['sessionid'];
     }
     // calculate amount checksum
     $amountChecksum = 0;
     $amountLength = strlen($amount);
     for ($i = 0; $i < $amountLength; $i++) {
         // ASCII value use ord
         $checksumCalc = ord($amount[$i]) - 48;
         $amountChecksum += $checksumCalc;
     }
     $currencyChecksum = 0;
     $currencyLength = strlen($currency);
     for ($i = 0; $i < $currencyLength; $i++) {
         $checksumCalc = ord($currency[$i]) - 64;
         $currencyChecksum += $checksumCalc;
     }
     $resultChecksum = 0;
     $resultLength = strlen($result);
     for ($i = 0; $i < $resultLength; $i++) {
         $checksumCalc = ord($result[$i]) - 64;
         $resultChecksum += $checksumCalc;
     }
     $sessionIdChecksum = 0;
     $sessionIdLength = strlen($sessionId);
     for ($i = 0; $i < $sessionIdLength; $i++) {
         $checksumCalc = $this->_getAscii2Int($sessionId[$i]);
         $sessionIdChecksum += $checksumCalc;
     }
     $totalResultChecksum = ($amountChecksum + $currencyChecksum + $resultChecksum) * $sessionIdChecksum % 100;
     // check if request is valid
     if ($totalResultChecksum == $checksum) {
         $this->_adyenLogger->addAdyenResult('Checksum is valid');
         return true;
     }
     $this->_adyenLogger->addAdyenResult('Checksum is invalid!');
     return false;
 }
コード例 #3
0
ファイル: Result.php プロジェクト: pivulic/adyen-magento2
 /**
  * @param $order
  * @param $params
  */
 protected function _validateUpdateOrder($order, $response)
 {
     $result = false;
     $this->_adyenLogger->addAdyenResult('Updating the order');
     $authResult = $response['authResult'];
     $paymentMethod = isset($response['paymentMethod']) ? trim($response['paymentMethod']) : '';
     $pspReference = isset($response['pspReference']) ? trim($response['pspReference']) : '';
     $type = 'Adyen Result URL response:';
     $comment = __('%1 <br /> authResult: %2 <br /> pspReference: %3 <br /> paymentMethod: %4', $type, $authResult, $pspReference, $paymentMethod);
     $history = $this->_orderHistoryFactory->create()->setComment($comment)->setEntityName('order')->setOrder($order);
     $history->save();
     // needed  becuase then we need to save $order objects
     $order->setAdyenResulturlEventCode($authResult);
     switch ($authResult) {
         case \Adyen\Payment\Model\Notification::AUTHORISED:
         case \Adyen\Payment\Model\Notification::PENDING:
             // do nothing wait for the notification
             $result = true;
             $this->_adyenLogger->addAdyenResult('Do nothing wait for the notification');
             break;
         case \Adyen\Payment\Model\Notification::CANCELLED:
             $this->_adyenLogger->addAdyenResult('Cancel or Hold the order');
             $result = false;
             break;
         case \Adyen\Payment\Model\Notification::REFUSED:
             // if refused there will be a AUTHORIZATION : FALSE notification send only exception is idea
             $this->_adyenLogger->addAdyenResult('Cancel or Hold the order');
             $result = false;
             break;
         case \Adyen\Payment\Model\Notification::ERROR:
             //attempt to hold/cancel
             $this->_adyenLogger->addAdyenResult('Cancel or Hold the order');
             $result = false;
             break;
         default:
             $this->_adyenLogger->addAdyenResult('This event is not supported: ' . $authResult);
             $result = false;
             break;
     }
     return $result;
 }
コード例 #4
0
ファイル: Validate3d.php プロジェクト: Adyen/adyen-magento2
 /**
  * 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/');
     }
 }