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; }
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; }