public function directCallBack3D(Varien_Object $payment, $PARes, $MD)
 {
     $error = '';
     $request = $this->_buildRequest3D($PARes, $MD);
     Sage_Log::log($request, null, '3D-Request.log');
     $result = $this->_postRequest($request, true);
     Sage_Log::log($result, null, '3D-Result.log');
     if (Mage::helper('sagepaysuite')->surchargesModuleEnabled() == true) {
         //save surcharge to server post for later use
         $session_surcharge_amount = Mage::getSingleton('sagepaysuite/session')->getSurcharge();
         if (!is_null($session_surcharge_amount) && $session_surcharge_amount > 0) {
             $result->setData('Surcharge', $session_surcharge_amount);
         }
     }
     Mage::register('sageserverpost', $result);
     if ($result->getResponseStatus() == self::RESPONSE_CODE_APPROVED || $result->getResponseStatus() == 'AUTHENTICATED' || $result->getResponseStatus() == self::RESPONSE_CODE_REGISTERED) {
         if (strtoupper($this->getConfigData('payment_action')) == self::REQUEST_TYPE_PAYMENT) {
             $this->getSageSuiteSession()->setInvoicePayment(true);
         }
         $onePage = Mage::getSingleton('checkout/type_onepage');
         $quote = $onePage->getQuote();
         $quote->collectTotals();
         Mage::helper('sagepaysuite')->ignoreAddressValidation($quote);
         $onePage->saveOrder();
         $_transaction = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($this->getSageSuiteSession()->getLastVendorTxCode())->setVpsProtocol($result->getData('VPSProtocol'))->setSecurityKey($result->getData('SecurityKey'))->setStatus($result->getData('Status'))->setStatusDetail($result->getData('StatusDetail'))->setVpsTxId($result->getData('VPSTxId'))->setTxAuthNo($result->getData('TxAuthNo'))->setAvscv2($result->getData('AVSCV2'))->setPostcodeResult($result->getData('PostCodeResult'))->setAddressResult($result->getData('AddressResult'))->setCv2result($result->getData('CV2Result'))->setThreedSecureStatus($result->getData('3DSecureStatus'))->setCavv($result->getData('CAVV'))->setRedFraudResponse($result->getData('FraudResponse'))->setSurchargeAmount($result->getData('Surcharge'))->setBankAuthCode($result->getData('BankAuthCode'))->setDeclineCode($result->getData('DeclineCode'))->save();
         //Saving TOKEN after 3D response.
         if ($result->getData('Token')) {
             $tokenData = array('Token' => $result->getData('Token'), 'Status' => $result->getData('Status'), 'Vendor' => $_transaction->getVendorname(), 'CardType' => $_transaction->getCardType(), 'ExpiryDate' => $result->getData('ExpiryDate'), 'StatusDetail' => $result->getData('StatusDetail'), 'Protocol' => 'direct', 'CardNumber' => $_transaction->getLastFourDigits(), 'Nickname' => $_transaction->getNickname());
             Mage::getModel('sagepaysuite/sagePayToken')->persistCard($tokenData);
         }
         $payment->setSagePayResult($result);
         $payment->setStatus(self::STATUS_APPROVED)->setCcTransId($result->getVPSTxId())->setCcApproval(self::RESPONSE_CODE_APPROVED)->setLastTransId($result->getVPSTxId())->setAddressResult($result->getAddressResult())->setPostcodeResult($result->getPostCodeResult())->setCv2Result($result->getCV2Result())->setSecurityKey($result->getSecurityKey())->setCcCidStatus($result->getTxAuthNo())->setAdditionalData($result->getResponseStatusDetail());
         $payment->save();
     } else {
         //Update status if 3d failed
         Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($this->getSageSuiteSession()->getLastVendorTxCode())->setStatus($result->getResponseStatus())->setStatusDetail($result->getResponseStatusDetail())->setVpsTxId($result->getVpsTxId())->setSecurityKey($result->getSecurityKey())->setPares(null)->setMd(null)->setPareq(null)->save();
         if ($result->getResponseStatusDetail()) {
             if ($result->getResponseStatus() == self::RESPONSE_CODE_NOTAUTHED) {
                 $error = $this->_sageHelper()->__('Your credit card can not be authenticated: ');
             } else {
                 if ($result->getResponseStatus() == self::RESPONSE_CODE_REJECTED) {
                     $error = $this->_sageHelper()->__('Your credit card was rejected: ');
                 }
             }
             $error .= $result->getResponseStatusDetail();
         } else {
             $error = $this->_sageHelper()->__('Error in capturing the payment');
         }
     }
     if (!empty($error)) {
         Mage::throwException($error);
     }
     return $this;
 }
Example #2
0
 public function directCallBack3D(Varien_Object $payment, $PARes, $MD)
 {
     $error = '';
     $request = $this->_buildRequest3D($PARes, $MD);
     $result = $this->_postRequest($request, true);
     Sage_Log::log($result, null, '3D-Result.log');
     if ($result->getResponseStatus() == self::RESPONSE_CODE_APPROVED || $result->getResponseStatus() == 'AUTHENTICATED') {
         Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($this->getSageSuiteSession()->getLastVendorTxCode())->setVpsProtocol($result->getData('VPSProtocol'))->setSecurityKey($result->getData('SecurityKey'))->setStatus($result->getData('Status'))->setStatusDetail($result->getData('StatusDetail'))->setVpsTxId($result->getData('VPSTxId'))->setTxAuthNo($result->getData('TxAuthNo'))->setAvscv2($result->getData('AVSCV2'))->setPostcodeResult($result->getData('PostCodeResult'))->setAddressResult($result->getData('AddressResult'))->setCv2result($result->getData('CV2Result'))->setThreedSecureStatus($result->getData('3DSecureStatus'))->setCavv($result->getData('CAVV'))->setTrndate($this->getDate())->save();
         $payment->setSagePayResult($result);
         $payment->setStatus(self::STATUS_APPROVED)->setCcTransId($result->getVPSTxId())->setCcApproval(self::RESPONSE_CODE_APPROVED)->setLastTransId($result->getVPSTxId())->setAddressResult($result->getAddressResult())->setPostcodeResult($result->getPostCodeResult())->setCv2Result($result->getCV2Result())->setSecurityKey($result->getSecurityKey())->setCcCidStatus($result->getTxAuthNo())->setAdditionalData($result->getResponseStatusDetail());
         $payment->save();
         if (strtoupper($this->getConfigData('payment_action')) == self::REQUEST_TYPE_PAYMENT) {
             $this->getSageSuiteSession()->setInvoicePayment(true);
         }
         $quote = Mage::getSingleton('checkout/type_onepage')->getQuote();
         $quote->collectTotals();
         return Mage::getSingleton('checkout/type_onepage')->saveOrder();
     } else {
         //TODO: SAVE ORPHAN if 3D failed
         if ($result->getResponseStatusDetail()) {
             if ($result->getResponseStatus() == self::RESPONSE_CODE_NOTAUTHED) {
                 $error = $this->_sageHelper()->__('Your credit card can not be authenticated: ');
             } else {
                 if ($result->getResponseStatus() == self::RESPONSE_CODE_REJECTED) {
                     $error = $this->_sageHelper()->__('Your credit card was rejected: ');
                 }
             }
             $error .= $result->getResponseStatusDetail();
         } else {
             $error = $this->_sageHelper()->__('Error in capturing the payment');
         }
     }
     if (!empty($error)) {
         Mage::throwException($error);
     }
     return $this;
 }