Exemple #1
0
 /**
  * Retrieve fraud score (3rd man) for transactions that do not have score.
  * @param  $cron Cron object
  * @return Ebizmarts_SagePayReporting_Model_Cron
  */
 public function getThirdmanScores($cron)
 {
     $logPrefix = "[CRON] ";
     Sage_Log::log($logPrefix . "Starting fraud checks... ", null, 'SagePaySuite_Thirdman.log');
     $fraudTblName = Mage::getSingleton('core/resource')->getTableName('sagepayreporting_fraud');
     $transactions = Mage::getResourceModel('sagepaysuite2/sagepaysuite_transaction_collection');
     $transactions->addFieldToSelect(array('order_id', 'vendor_tx_code', 'vps_tx_id'));
     $transactions->getSelect()->where("`main_table`.`order_id` IS NOT NULL AND (`main_table`.`order_id` NOT IN (SELECT `order_id` FROM " . $fraudTblName . "))")->order("main_table.created_at DESC")->limit(15);
     $now = strtotime("now");
     foreach ($transactions as $_trn) {
         $update = $_trn->updateFromApi();
         if (!$update->getFraud()) {
             Sage_Log::log($logPrefix . "3rd man check for " . $_trn->getVendorTxCode() . ": NO RESULT", null, 'SagePaySuite_Thirdman.log');
             continue;
         }
         try {
             $rs = $update->getFraud();
             $noresult = (string) $rs->getThirdmanAction() == 'NORESULT';
             $orderPlusOneDay = strtotime("+1 day", strtotime($_trn->getCreatedAt()));
             Sage_Log::log($logPrefix . "3rd man check for " . $_trn->getVendorTxCode() . ": " . (string) $rs->getThirdmanAction(), null, 'SagePaySuite_Thirdman.log');
         } catch (Exception $e) {
             Sage_Log::logException($e);
         }
     }
 }
 public function send()
 {
     try {
         $data = $this->grabData();
         $url = 'https://ebizmarts.com/sagepaysuite_tracker.php';
         $curl = curl_init();
         curl_setopt($curl, CURLOPT_URL, $url);
         curl_setopt($curl, CURLOPT_POST, 1);
         curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
         $sslversion = Mage::getStoreConfig('payment/sagepaysuite/curl_ssl_version');
         curl_setopt($curl, CURLOPT_SSLVERSION, $sslversion);
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($curl, CURLOPT_TIMEOUT, 4);
         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
         if (Mage::getStoreConfigFlag('payment/sagepaysuite/curl_proxy') == 1) {
             curl_setopt($curl, CURLOPT_PROXY, Mage::getStoreConfig('payment/sagepaysuite/curl_proxy_port'));
         }
         $response = curl_exec($curl);
         if (!curl_error($curl)) {
             return TRUE;
         }
         return FALSE;
     } catch (Exception $e) {
         Sage_Log::logException($e);
         return FALSE;
     }
 }
Exemple #3
0
 public function getThirdmanScores($cron)
 {
     $tblName = Mage::getSingleton('core/resource')->getTableName('sagepayreporting_fraud');
     $sagepayOrders = Mage::getResourceModel('sales/order_grid_collection');
     $sagepayOrders->getSelect()->joinLeft(array('pmnt' => $sagepayOrders->getTable('sales/order_payment')), 'main_table.entity_id = pmnt.parent_id', array())->joinLeft(array('sls' => $sagepayOrders->getTable('sales/order')), 'main_table.entity_id = sls.entity_id', array())->where("(pmnt.method = 'sagepaydirectpro' OR pmnt.method = 'sagepayserver' OR pmnt.method = 'sagepayserver_moto' OR pmnt.method = 'sagepaydirectpro_moto' OR pmnt.method = 'sagepayform' OR pmnt.method = 'sagepaypaypal') AND (main_table.entity_id NOT IN (SELECT order_id FROM " . $tblName . "))")->limit(10);
     foreach ($sagepayOrders as $_order) {
         $_order = Mage::getModel('sales/order')->load($_order->getId());
         $rs = Mage::getModel('sagepayreporting/sagepayreporting')->getTransactionDetails($_order->getSagepayInfo()->getVendorTxCode());
         if (!is_object($rs) or $rs->getError()) {
             continue;
         }
         try {
             /**
              *  Automatic fulfill
              */
             if ((int) $rs->getT3mscore() && (string) $rs->getT3maction() != 'NORESULT') {
                 # Update Thirdman score on DB
                 Mage::getModel('sagepayreporting/fraud')->updateThirdMan($_order->getId(), $rs);
                 $dbtrn = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($_order->getSagepayInfo()->getVendorTxCode());
                 $canAuthorise = $dbtrn->getTxType() == 'AUTHENTICATE' && !$dbtrn->getAuthorised();
                 $canRelease = $dbtrn->getTxType() == 'DEFERRED' && !$dbtrn->getReleased();
                 $rank = $this->_getCanRank() && $this->_getRank() <= (int) $rs->getT3mscore();
                 if (($canAuthorise || $canRelease) && $rank) {
                     Mage::getModel('sagepaysuite/api_payment')->invoiceOrder($_order->getId(), Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
                 }
             }
             /**
              *  Automatic fulfill
              */
         } catch (Exception $e) {
             Sage_Log::logException($e);
         }
     }
 }
Exemple #4
0
 protected function _getServiceCount()
 {
     $count = '?';
     try {
         $r = Mage::getModel('sagepayreporting/sagepayreporting')->getTokenCount();
         $count = (int) $r->totalnumber;
     } catch (Exception $e) {
         Sage_Log::logException($e);
     }
     return $count;
 }
Exemple #5
0
 /**
  * Retrieve fraud score (3rd man) for transactions that do not have score.
  * @param  $cron Cron object
  * @return Ebizmarts_SagePayReporting_Model_Cron
  */
 public function getThirdmanScores($cron)
 {
     $logPrefix = "[CRON] ";
     //Sage_Log::log($logPrefix . "Starting fraud checks... ", null, 'SagePaySuite_Thirdman.log');
     $fraudTblName = Mage::getSingleton('core/resource')->getTableName('sagepayreporting_fraud');
     $transactions = Mage::getResourceModel('sagepaysuite2/sagepaysuite_transaction_collection');
     $transactions->addFieldToSelect(array('order_id', 'vendor_tx_code', 'vps_tx_id', 'tx_type'));
     $transactions->getSelect()->where("`main_table`.`order_id` IS NOT NULL AND (`main_table`.`order_id` NOT IN (SELECT `order_id` FROM " . $fraudTblName . "))")->order("main_table.created_at DESC")->limit(20);
     $now = strtotime("now");
     foreach ($transactions as $_trn) {
         $update = $_trn->updateFromApi();
         if (!$update->getFraud()) {
             //Sage_Log::log($logPrefix . "3rd man check for " . $_trn->getVendorTxCode() . ": NO RESULT", null, 'SagePaySuite_Thirdman.log');
             continue;
         }
         try {
             $rs = $update->getFraud();
             $noresult = (string) $rs->getThirdmanAction() == 'NORESULT';
             $orderPlusOneDay = strtotime("+1 day", strtotime($_trn->getCreatedAt()));
             Sage_Log::log($logPrefix . "3rd man check for " . $_trn->getVendorTxCode() . ": " . (string) $rs->getThirdmanAction(), null, 'SagePaySuite_Thirdman.log');
             if (!$noresult || $now > $orderPlusOneDay) {
                 /**
                  *  Automatic fulfill
                  */
                 $canAuthorise = $_trn->getTxType() == 'AUTHENTICATE' && !$_trn->getAuthorised();
                 $canRelease = $_trn->getTxType() == 'DEFERRED' && !$_trn->getReleased();
                 if (($canAuthorise || $canRelease) && $noresult && $now > $orderPlusOneDay) {
                     Sage_Log::log($logPrefix . "Auto invoicing (FORCED) for " . $_trn->getVendorTxCode(), null, 'SagePaySuite_Thirdman.log');
                     Mage::getModel('sagepaysuite/api_payment')->invoiceOrder($_trn->getOrderId(), Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
                 } else {
                     $rank = $this->_getCanRank() && $this->_getRank() >= (int) $rs->getThirdmanScore();
                     if (($canAuthorise || $canRelease) && $rank) {
                         Sage_Log::log($logPrefix . "Auto invoicing for " . $_trn->getVendorTxCode(), null, 'SagePaySuite_Thirdman.log');
                         Mage::getModel('sagepaysuite/api_payment')->invoiceOrder($_trn->getOrderId(), Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
                     } else {
                         if ($this->_getRank() < (int) $rs->getThirdmanScore()) {
                             Sage_Log::log($logPrefix . "No rank for " . $_trn->getVendorTxCode() . ": " . (int) $rs->getThirdmanScore(), null, 'SagePaySuite_Thirdman.log');
                         } elseif (!$canAuthorise && !$canRelease) {
                             Sage_Log::log($logPrefix . "Can not authorize nor release " . $_trn->getVendorTxCode(), null, 'SagePaySuite_Thirdman.log');
                         }
                     }
                 }
             }
         } catch (Exception $e) {
             Sage_Log::logException($e);
         }
     }
 }
 public function invoiceAction()
 {
     $orderIds = array();
     if ($this->getRequest()->isPost()) {
         $orderIds = $this->getRequest()->getPost('order_ids', array());
     } else {
         $orderIds[] = $this->getRequest()->getParam('order_id');
     }
     if (count($orderIds)) {
         #Mass action
         foreach ($orderIds as $orderId) {
             try {
                 $rs = $this->getPersistentFraud()->invoice($orderId);
                 $this->_getSession()->addSuccess($this->__('Invoiced: Order Id #%s', $orderId));
             } catch (Exception $e) {
                 Sage_Log::logException($e);
                 $this->_getSession()->addError($this->__('Cannot invoice order #%s. Reason: "%s"', $orderId, $e->getMessage()));
             }
         }
     }
     $this->_redirectReferer();
     return;
 }
Exemple #7
0
 public function send()
 {
     try {
         $data = $this->grabData();
         $url = 'http://ebizmarts.com/sagepaysuite_tracker.php';
         $curl = curl_init();
         curl_setopt($curl, CURLOPT_URL, $url);
         curl_setopt($curl, CURLOPT_POST, 1);
         curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data));
         curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($curl, CURLOPT_TIMEOUT, 4);
         curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
         curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2);
         $response = curl_exec($curl);
         if (!curl_error($curl)) {
             return TRUE;
         }
         return FALSE;
     } catch (Exception $e) {
         Sage_Log::logException($e);
         return FALSE;
     }
 }
 protected function _toHtml()
 {
     try {
         $vendorTxCode = $this->getRequest()->getParam('txc');
         $transaction = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($vendorTxCode);
         $form = new Varien_Data_Form();
         $form->setAction($transaction->getAcsurl())->setId('sagepaydirectpro_3dsecure')->setName('sagepaydirectpro_3dsecure')->setMethod('POST')->setUseContainer(true);
         $form->addField('PaReq', 'hidden', array('name' => 'PaReq', 'value' => $transaction->getPareq()));
         $form->addField('MD', 'hidden', array('name' => 'MD', 'value' => $transaction->getMd()));
         $params = array('_secure' => true, 'storeid' => Mage::app()->getStore()->getId(), 'v' => $vendorTxCode);
         $postUrl = Mage::getModel('core/url')->addSessionParam()->getUrl('sgps/directPayment/callback3d', $params);
         $form->addField('TermUrl', 'hidden', array('name' => 'TermUrl', 'value' => $postUrl));
         $html = '<html><body>';
         $html .= '<code>' . $this->__('Loading 3D secure form...') . '</code>';
         $html .= $form->toHtml();
         $html .= '<script type="text/javascript">document.getElementById("sagepaydirectpro_3dsecure").submit();</script>';
         $html .= '</body></html>';
         Sage_Log::log($vendorTxCode, null, 'SagePaySuite_REQUEST.log');
         Sage_Log::log($html, null, 'SagePaySuite_REQUEST.log');
     } catch (Exception $e) {
         Sage_Log::logException($e);
     }
     return $html;
 }
Exemple #9
0
 public function abortPayment($trn)
 {
     /**
      * SecurityKey from the "Admin & Access API"
      */
     if (!$trn->getSecurityKey() && strtoupper($trn->getIntegration()) == 'FORM') {
         $this->_addSecurityKey($trn);
     }
     $data = array();
     $data['VPSProtocol'] = $trn->getVpsProtocol();
     $data['TxType'] = self::REQUEST_TYPE_ABORT;
     $data['ReferrerID'] = $this->getConfigData('referrer_id');
     $data['Vendor'] = $trn->getVendorname();
     $data['VendorTxCode'] = $trn->getVendorTxCode();
     $data['VPSTxId'] = $trn->getVpsTxId();
     $data['SecurityKey'] = $trn->getSecurityKey();
     $data['TxAuthNo'] = $trn->getTxAuthNo();
     try {
         $result = $this->requestPost($this->getUrl('abort', false, $this->_getIntegrationCode($trn->getIntegration()), $trn->getMode()), $data);
     } catch (Exception $e) {
         Sage_Log::logException($e);
         Mage::throwException($this->_getHelper()->__('Transaction could not be aborted at SagePay. You may want to delete it from the local database and check the transaction at the SagePay admin panel.'));
     }
     if ($result['Status'] != 'OK') {
         $statusDetail = $result['StatusDetail'];
         Sage_Log::log($statusDetail);
         //For expired DEFERRED transactions
         if (1 === preg_match('/^4039/i', $statusDetail) || 1 === preg_match('/^4028/i', $statusDetail)) {
             $this->_getAdminSession()->addError("Order canceled but an error occurred at SagePay: " . $statusDetail);
         } else {
             Mage::throwException(Mage::helper('sagepaysuite')->__($statusDetail));
         }
     } else {
         $this->saveAction($trn->getOrderId(), $data, $result);
         $trn->setAborted(1)->save();
     }
 }
 protected function _oscSuscribeNewsletter($customerEmail)
 {
     try {
         $model = Mage::getModel('newsletter/subscriber');
         $result = $model->loadByEmail($customerEmail);
         if ($result->getId() === NULL) {
             // Not subscribed, OK to subscribe
             Mage::getModel('newsletter/subscriber')->subscribe($customerEmail);
         }
     } catch (Exception $e) {
         Sage_Log::logException($e);
     }
 }
 public function sendPaymentFailedEmail($observer)
 {
     //Check if enabled in config.
     if (0 === (int) Mage::getStoreConfig('payment/sagepaysuite/send_payment_failed_emails')) {
         return $this;
     }
     $quote = $observer->getEvent()->getQuote();
     $message = $observer->getEvent()->getMessage();
     try {
         Mage::helper('sagepaysuite/checkout')->sendPaymentFailedEmail($quote, $message);
     } catch (Exception $ex) {
         Sage_Log::logException($ex);
     }
     return $this;
 }
    public function callback3dAction()
    {
        $vendorTxCode = $this->getRequest()->getParam('v');
        $transaction = Mage::getModel('sagepaysuite2/sagepaysuite_transaction')->loadByVendorTxCode($vendorTxCode);
        $emede = $transaction->getMd();
        $pares = $this->getRequest()->getPost('PaRes');
        $transaction->setPares($pares)->save();
        header('Content-type: text/html; charset=utf-8');
        $image = Mage::helper('sagepaysuite')->getIndicator();
        echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><html><head></head><body>
					<div style="background-image:url(' . $image . '); background-position: center center;background-repeat: no-repeat;height: 400px;">&nbsp;</div>';
        echo $this->__('<small>%s</small>', "Processing order, please stand by...  ");
        $error = false;
        $quote = Mage::getSingleton('checkout/type_onepage')->getQuote();
        try {
            //Check cart health on callback.
            if (1 === (int) Mage::getStoreConfig('payment/sagepaysuite/verify_cart_consistency')) {
                if (Mage::helper('sagepaysuite/checkout')->cartExpire($quote)) {
                    Sage_Log::log("Transaction " . $transaction->getVendorTxCode() . " not completed, cart was modified while customer on 3D payment pages.", Zend_Log::CRIT, 'SagePaySuite_REQUEST.log');
                    Mage::throwException($this->__('Your order could not be completed, please try again. Thanks.'));
                }
            }
            //Check cart health on callback.
            if ($pares && $emede) {
                Mage::getModel('sagepaysuite/sagePayDirectPro')->saveOrderAfter3dSecure($pares, $emede);
                echo $this->__('<small>%s</small>', "Done. Redirecting...");
            } else {
                Mage::dispatchEvent('sagepay_payment_failed', array('quote' => $quote, 'message' => $this->__("3D callback error.")));
                Mage::throwException($this->__("Invalid request. PARes and MD are empty."));
            }
        } catch (Exception $e) {
            Mage::getSingleton('sagepaysuite/session')->setAcsurl(null)->setPareq(null)->setSageOrderId(null)->setSecure3d(null)->setEmede(null)->setPares(null)->setMd(null);
            Sage_Log::logException($e);
            Mage::dispatchEvent('sagepay_payment_failed', array('quote' => $quote, 'message' => $e->getMessage()));
            $error = true;
            $message = $e->getMessage();
            $layout = Mage::getModel('sagepaysuite/sagePayDirectPro')->getConfigData('threed_layout');
            if ($layout == 'redirect') {
                Mage::getSingleton('checkout/session')->addError($message);
                echo '<script type="text/javascript">window.location.href="' . Mage::getUrl('checkout/cart') . '"</script>';
            } else {
                echo '<script type="text/javascript">
                    if((typeof window.parent.restoreOscLoad) != "undefined"){
                    window.parent.restoreOscLoad();
                    window.parent.notifyThreedError("' . $message . '");
                    }
                    else {
                        alert("' . $message . '");
                    }
                </script>';
            }
            echo '</body></html>';
        }
        if (!$error) {
            Mage::getSingleton('checkout/type_onepage')->getQuote()->save();
            $successUrl = Mage::getUrl('checkout/onepage/success', array('_secure' => true));
            echo '<script type="text/javascript">
					(parent.location == window.location)? window.location.href="' . $successUrl . '" : window.parent.setLocation("' . $successUrl . '");
				  </script>
				  </body></html>';
        }
    }
 protected function _postRequest(Varien_Object $request, $callback3D = false)
 {
     $result = Mage::getModel('sagepaysuite/sagepaysuite_result');
     $mode = $request->getMode() ? $request->getMode() : null;
     $uri = $this->getUrl('post', $callback3D, null, $mode);
     $requestData = $request->getData();
     try {
         $response = $this->requestPost($uri, $request->getData());
     } catch (Exception $e) {
         $result->setResponseCode(-1)->setResponseReasonCode($e->getCode())->setResponseReasonText($e->getMessage());
         Mage::throwException($this->_SageHelper()->__('Gateway request error: %s', $e->getMessage()));
     }
     $r = $response;
     $result->setRequest($request);
     try {
         if (empty($r) or !isset($r['Status'])) {
             $msg = $this->_SageHelper()->__('Sage Pay is not available at this time. Please try again later.');
             Sage_Log::log($msg, 1);
             $result->setResponseStatus('ERROR')->setResponseStatusDetail($msg);
             return $result;
         }
         if (isset($r['VPSTxId'])) {
             $result->setVpsTxId($r['VPSTxId']);
         }
         if (isset($r['SecurityKey'])) {
             $result->setSecurityKey($r['SecurityKey']);
         }
         switch ($r['Status']) {
             case 'FAIL':
                 $params['order'] = Mage::getSingleton('checkout/session')->getQuote()->getReservedOrderId();
                 $params['error'] = Mage::helper('sagepaysuite')->__($r['StatusDetail']);
                 //$rc = $this->sendNotificationEmail('', '', $params);
                 $result->setResponseStatus($r['Status'])->setResponseStatusDetail(Mage::helper('sagepaysuite')->__($r['StatusDetail']))->setVPSTxID(1)->setSecurityKey(1)->setTxAuthNo(1)->setAVSCV2(1)->setAddressResult(1)->setPostCodeResult(1)->setCV2Result(1)->setTrnSecuritykey(1);
                 return $result;
                 break;
             case 'FAIL_NOMAIL':
                 Mage::throwException($this->_SageHelper()->__($r['StatusDetail']));
                 break;
             case parent::RESPONSE_CODE_INVALID:
                 Mage::throwException($this->_SageHelper()->__('INVALID. %s', Mage::helper('sagepaysuite')->__($r['StatusDetail'])));
                 break;
             case parent::RESPONSE_CODE_MALFORMED:
                 Mage::throwException($this->_SageHelper()->__('MALFORMED. %s', Mage::helper('sagepaysuite')->__($r['StatusDetail'])));
                 break;
             case parent::RESPONSE_CODE_ERROR:
                 Mage::throwException($this->_SageHelper()->__('ERROR. %s', Mage::helper('sagepaysuite')->__($r['StatusDetail'])));
                 break;
             case parent::RESPONSE_CODE_REJECTED:
                 Mage::throwException($this->_SageHelper()->__('REJECTED. %s', Mage::helper('sagepaysuite')->__($r['StatusDetail'])));
                 break;
             case parent::RESPONSE_CODE_3DAUTH:
                 $result->setResponseStatus($r['Status'])->setResponseStatusDetail(isset($r['StatusDetail']) ? $r['StatusDetail'] : '')->set3DSecureStatus($r['3DSecureStatus'])->setMD($r['MD'])->setACSURL($r['ACSURL'])->setPAReq($r['PAReq']);
                 break;
             case parent::RESPONSE_CODE_PAYPAL_REDIRECT:
                 $result->setResponseStatus($r['Status'])->setResponseStatusDetail($r['StatusDetail'])->setVpsTxId($r['VPSTxId'])->setPayPalRedirectUrl($r['PayPalRedirectURL']);
                 break;
             default:
                 $result->setResponseStatus($r['Status'])->setResponseStatusDetail($r['StatusDetail'])->setVpsTxId($r['VPSTxId'])->setSecurityKey($r['SecurityKey'])->setTrnSecuritykey($r['SecurityKey']);
                 if (isset($r['3DSecureStatus'])) {
                     $result->set3DSecureStatus($r['3DSecureStatus']);
                 }
                 if (isset($r['CAVV'])) {
                     $result->setCAVV($r['CAVV']);
                 }
                 if (isset($r['TxAuthNo'])) {
                     $result->setTxAuthNo($r['TxAuthNo']);
                 }
                 if (isset($r['AVSCV2'])) {
                     $result->setAvscv2($r['AVSCV2']);
                 }
                 if (isset($r['PostCodeResult'])) {
                     $result->setPostCodeResult($r['PostCodeResult']);
                 }
                 if (isset($r['CV2Result'])) {
                     $result->setCv2result($r['CV2Result']);
                 }
                 if (isset($r['AddressResult'])) {
                     $result->setAddressResult($r['AddressResult']);
                 }
                 $result->addData($r);
                 //Saving TOKEN.
                 if (!$callback3D && $result->getData('Token')) {
                     $tokenData = array('Token' => $result->getData('Token'), 'Status' => $result->getData('Status'), 'Vendor' => $request->getData('Vendor'), 'CardType' => $request->getData('CardType'), 'ExpiryDate' => $request->getData('ExpiryDate'), 'StatusDetail' => $result->getData('StatusDetail'), 'Protocol' => 'direct', 'CardNumber' => $request->getData('CardNumber'), 'Nickname' => $request->getData('Nickname'));
                     Mage::getModel('sagepaysuite/sagePayToken')->persistCard($tokenData);
                 }
                 break;
         }
     } catch (Exception $e) {
         Sage_Log::logException($e);
         $result->setResponseStatus('ERROR')->setResponseStatusDetail(Mage::helper('sagepaysuite')->__($e->getMessage()));
         return $result;
     }
     return $result;
 }
 public function massThirdmanCheckAction()
 {
     $logPrefix = "[MANUAL] ";
     //Sage_Log::log($logPrefix . "Starting fraud checks... ", null, 'SagePaySuite_Thirdman.log');
     $fraudTblName = Mage::getSingleton('core/resource')->getTableName('sagepayreporting_fraud');
     $transactions = Mage::getResourceModel('sagepaysuite2/sagepaysuite_transaction_collection');
     $transactions->addFieldToSelect(array('order_id', 'vendor_tx_code', 'vps_tx_id', 'tx_type'));
     $transactions->getSelect()->where("`main_table`.`order_id` IS NOT NULL AND (`main_table`.`order_id` NOT IN (SELECT `order_id` FROM " . $fraudTblName . "))")->order("main_table.created_at DESC")->limit(15);
     $transactionsChecked = array();
     $transactionsNOTChecked = array();
     $transactionsAutoInvoiced = array();
     foreach ($transactions as $_trn) {
         $update = $_trn->updateFromApi();
         if (!$update->getFraud()) {
             Sage_Log::log($logPrefix . "3rd man check for " . $_trn->getVendorTxCode() . ": UNABLE TO GET FRAUD SCORE", null, 'SagePaySuite_Thirdman.log');
             $transactionsNOTChecked[] = $_trn->getVendorTxCode();
             continue;
         }
         try {
             $rs = $update->getFraud();
             $noresult = (string) $rs->getThirdmanAction() == 'NORESULT';
             $transactionsChecked[] = $_trn->getVendorTxCode();
             Sage_Log::log($logPrefix . "3rd man check for " . $_trn->getVendorTxCode() . ": " . (string) $rs->getThirdmanAction(), null, 'SagePaySuite_Thirdman.log');
             if (!$noresult) {
                 //Automatic fulfill
                 $canAuthorise = $_trn->getTxType() == 'AUTHENTICATE' && !$_trn->getAuthorised();
                 $canRelease = $_trn->getTxType() == 'DEFERRED' && !$_trn->getReleased();
                 $canRank = Mage::getStoreConfigFlag('payment/sagepaysuite/auto_fulfill_low_risk_trn');
                 $configRank = (int) Mage::getStoreConfig('payment/sagepaysuite/auto_fulfill_low_risk_trn_value');
                 $rank = $canRank && $configRank >= (int) $rs->getThirdmanScore();
                 if (($canAuthorise || $canRelease) && $rank) {
                     Sage_Log::log($logPrefix . "Auto invoicing for " . $_trn->getVendorTxCode(), null, 'SagePaySuite_Thirdman.log');
                     $transactionsAutoInvoiced[] = $_trn->getVendorTxCode();
                     Mage::getModel('sagepaysuite/api_payment')->invoiceOrder($_trn->getOrderId(), Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
                 } else {
                 }
             }
         } catch (Exception $e) {
             Sage_Log::logException($e);
         }
     }
     //user messages
     if (count($transactionsChecked) > 0) {
         $msg = "Transactions successfully checked: ";
         for ($i = 0; $i < count($transactionsChecked); $i++) {
             $msg .= $i > 0 ? "  " : "";
             $msg .= $transactionsChecked[$i];
         }
         Mage::getSingleton('adminhtml/session')->addSuccess($msg);
     }
     if (count($transactionsNOTChecked) > 0) {
         $msg = "An error occurred while checking some transactions: ";
         for ($i = 0; $i < count($transactionsNOTChecked); $i++) {
             $msg .= $i > 0 ? "  " : "";
             $msg .= $transactionsNOTChecked[$i];
         }
         Mage::getSingleton('adminhtml/session')->addError($msg);
     }
     if (count($transactionsAutoInvoiced) > 0) {
         $msg = "Transactions successfully auto-invoiced: ";
         for ($i = 0; $i < count($transactionsAutoInvoiced); $i++) {
             $msg .= $i > 0 ? "  " : "";
             $msg .= $transactionsAutoInvoiced[$i];
         }
         Mage::getSingleton('adminhtml/session')->addSuccess($msg);
     }
     $this->_redirect('adminhtml/sagepayreporting_fraud');
 }
    public function callback3dAction()
    {
        header('Content-type: text/html');
        $image = Mage::helper('sagepaysuite')->getIndicator();
        echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><html><head></head><body>
					<div style="background-image:url(' . $image . '); background-position: center center;background-repeat: no-repeat;height: 400px;">&nbsp;</div>';
        $error = false;
        try {
            Mage::getModel('sagepaysuite/sagePayDirectPro')->saveOrderAfter3dSecure($this->getRequest()->getPost('PaRes'), Mage::getSingleton('sagepaysuite/session')->getEmede());
        } catch (Exception $e) {
            /*try{
            			//VOID transaction if there was a problem
            			$vendorTxCode = Mage::getSingleton('sagepaysuite/session')->getLastVendorTxCode();
            			Mage::helper('sagepaysuite')->voidTransaction($vendorTxCode, 'sagepaydirectpro');
            		}catch(Exception $ex){
            		}*/
            Mage::getSingleton('sagepaysuite/session')->setAcsurl(null)->setPareq(null)->setSageOrderId(null)->setSecure3d(null)->setEmede(null)->setPares(null)->setMd(null);
            Sage_Log::logException($e);
            $error = true;
            $message = $e->getMessage();
            echo '<script type="text/javascript">window.parent.notifyThreedError("' . $message . '");</script></body>
			  </html>';
            die;
        }
        if (!$error) {
            /**
             * set the quote as inactive after back from paypal
             */
            Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save();
            /**
             * send confirmation email to customer
             */
            $order = Mage::getModel('sales/order');
            $order->load(Mage::getSingleton('checkout/session')->getLastOrderId());
            if ($order->getId() && Mage::helper('sagepaysuite')->isLocalhost() === false) {
                $order->sendNewOrderEmail();
            }
            $this->getResponse()->setBody('<script type="text/javascript">window.parent.location.href="' . Mage::getUrl('checkout/onepage/success', array('_secure' => true)) . '";</script></body></html>');
        }
    }
 public function successAction()
 {
     $_r = $this->getRequest();
     Sage_Log::log($_r->getPost(), null, 'SagePaySuite_FORM_Callback.log');
     if ($_r->getParam('crypt') && $_r->getParam('vtxc')) {
         $strDecoded = $this->getFormModel()->decrypt($_r->getParam('crypt'));
         $token = Mage::helper('sagepaysuite/form')->getToken($strDecoded);
         Sage_Log::log($token, null, 'SagePaySuite_FORM_Callback.log');
         $db = Mage::helper('sagepaysuite')->arrayKeysToUnderscore($token);
         # Add data to DB transaction
         $trn = $this->_getTransaction()->loadByVendorTxCode($_r->getParam('vtxc'));
         $trn->addData($db);
         if (isset($db['post_code_result'])) {
             $trn->setPostcodeResult($db['post_code_result']);
         }
         if (isset($db['cv2_result'])) {
             $trn->setCv2result($db['cv2_result']);
         }
         if (isset($db['3_d_secure_status'])) {
             $trn->setThreedSecureStatus($db['3_d_secure_status']);
         }
         if (isset($db['last4_digits'])) {
             $trn->setLastFourDigits($db['last4_digits']);
         }
         if (isset($db['gift_aid'])) {
             $trn->setGiftAid($db['gift_aid']);
         }
         if (isset($db['fraud_response'])) {
             $trn->setRedFraudResponse($db['fraud_response']);
         }
         $trn->save();
         //Check cart health on callback.
         if (1 === (int) Mage::getStoreConfig('payment/sagepaysuite/verify_cart_consistency')) {
             if (Mage::helper('sagepaysuite/checkout')->cartExpire($this->getOnepage()->getQuote())) {
                 try {
                     Mage::helper('sagepaysuite')->voidTransaction($trn->getVendorTxCode(), 'sagepayform');
                     Sage_Log::log("Transaction " . $trn->getVendorTxCode() . " cancelled, cart was modified while customer on payment pages.", Zend_Log::CRIT, 'SagePaySuite_FORM_Callback.log');
                     Mage::getSingleton('checkout/session')->addError($this->__('Your order could not be completed, please try again. Thanks.'));
                 } catch (Exception $ex) {
                     Sage_Log::log("Transaction " . $trn->getVendorTxCode() . " could not be cancelled and order was not created, cart was modified while customer on payment pages.", Zend_Log::CRIT, 'SagePaySuite_FORM_Callback.log');
                     Mage::getSingleton('checkout/session')->addError($this->__('Your order could not be completed but we could not cancel the payment, please contact us and mention this transaction reference number: %s. Thanks.', $db['vendor_tx_code']));
                 }
                 $this->_redirect('checkout/cart');
                 return;
             }
         }
         //Check cart health on callback.
         Mage::register('sageserverpost', new Varien_Object($token));
         Mage::getSingleton('sagepaysuite/session')->setInvoicePayment(true);
         try {
             $this->getOnepage()->getQuote()->collectTotals();
             $this->getOnepage()->saveOrder();
         } catch (Exception $e) {
             $trn->setStatus('MAGE_ERROR')->setStatusDetail($e->getMessage() . $trn->getStatusDetail())->save();
             Sage_Log::logException($e);
             Mage::dispatchEvent('sagepay_payment_failed', array('quote' => $this->getOnepage()->getQuote(), 'message' => $e->getMessage()));
             $this->_getSession()->addError('<strong>' . $this->__('The payment was made with success however an error occurred, your credit card has been charged. Please contact our support team.') . '</strong>');
             Mage::helper('sagepaysuite/checkout')->deleteQuote();
             $this->_redirect('checkout/cart');
             return;
         }
         Mage::helper('sagepaysuite/checkout')->deleteQuote();
         $this->_redirect('checkout/onepage/success');
         return;
     }
     $this->_redirect('/');
     return;
 }
 public function massThirdmanCheckAction()
 {
     $logPrefix = "[MANUAL] ";
     Sage_Log::log($logPrefix . "Starting fraud checks... ", null, 'SagePaySuite_Thirdman.log');
     $fraudTblName = Mage::getSingleton('core/resource')->getTableName('sagepayreporting_fraud');
     $transactions = Mage::getResourceModel('sagepaysuite2/sagepaysuite_transaction_collection');
     $transactions->addFieldToSelect(array('order_id', 'vendor_tx_code', 'vps_tx_id', 'tx_type'));
     $transactions->getSelect()->where("`main_table`.`order_id` IS NOT NULL AND (`main_table`.`order_id` NOT IN (SELECT `order_id` FROM " . $fraudTblName . "))")->order("main_table.created_at DESC")->limit(15);
     $transactionsChecked = array();
     $transactionsNOTChecked = array();
     foreach ($transactions as $_trn) {
         $update = $_trn->updateFromApi();
         if (!$update->getFraud()) {
             Sage_Log::log($logPrefix . "3rd man check for " . $_trn->getVendorTxCode() . ": UNABLE TO GET FRAUD SCORE", null, 'SagePaySuite_Thirdman.log');
             $transactionsNOTChecked[] = $_trn->getVendorTxCode();
             continue;
         }
         try {
             $rs = $update->getFraud();
             $noresult = (string) $rs->getThirdmanAction() == 'NORESULT';
             $transactionsChecked[] = $_trn->getVendorTxCode();
             Sage_Log::log($logPrefix . "3rd man check for " . $_trn->getVendorTxCode() . ": " . (string) $rs->getThirdmanAction(), null, 'SagePaySuite_Thirdman.log');
         } catch (Exception $e) {
             Sage_Log::logException($e);
         }
     }
     //user messages
     if (count($transactionsChecked) > 0) {
         $msg = "Transactions successfully checked: ";
         for ($i = 0; $i < count($transactionsChecked); $i++) {
             $msg .= $i > 0 ? "  " : "";
             $msg .= $transactionsChecked[$i];
         }
         Mage::getSingleton('adminhtml/session')->addSuccess($msg);
     }
     if (count($transactionsNOTChecked) > 0) {
         $msg = "An error occurred while checking some transactions: ";
         for ($i = 0; $i < count($transactionsNOTChecked); $i++) {
             $msg .= $i > 0 ? "  " : "";
             $msg .= $transactionsNOTChecked[$i];
         }
         Mage::getSingleton('adminhtml/session')->addError($msg);
     }
     $this->_redirect('adminhtml/sagepayreporting_fraud');
 }
Exemple #18
0
 /**
  * Invoice existing order
  *
  * @param int $id Order id
  * @param string $captureMode Mode capture, OFFLINE-ONLINE-NOTCAPTURE
  */
 public function invoiceOrder($id = null, $captureMode = Mage_Sales_Model_Order_Invoice::CAPTURE_OFFLINE, $silent = true)
 {
     if (is_object($id)) {
         $order = $id;
     } else {
         $order = Mage::getModel('sales/order')->load($id);
     }
     try {
         if (!$order->canInvoice()) {
             $emessage = $this->_getCoreHelper()->__('Cannot create an invoice.');
             if (!$silent) {
                 Mage::throwException($emessage);
             }
             Sage_Log::log($emessage);
             return false;
         }
         $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
         if (!$invoice->getTotalQty()) {
             $emessage = $this->_getCoreHelper()->__('Cannot create an invoice without products.');
             if (!$silent) {
                 Mage::throwException($emessage);
             }
             Sage_Log::log($emessage);
             return false;
         }
         $invoice->setRequestedCaptureCase($captureMode);
         # New in 1.4.2.0, if there is not such value, only REFUND OFFLINE shows up
         # TODO: @see Mage_Sales_Model_Order_Payment::registerCaptureNotification
         //$invoice->setTransactionId($order->getSagepayInfo()->getId());
         $invoice->setTransactionId(time());
         $invoice->register();
         //Send email
         $sendemail = (bool) $this->getConfigData('email_on_invoice');
         $invoice->setEmailSent($sendemail);
         $invoice->getOrder()->setCustomerNoteNotify($sendemail);
         $transactionSave = Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder());
         $transactionSave->save();
         if ($sendemail) {
             try {
                 $invoice->sendEmail(TRUE, '');
             } catch (Exception $em) {
                 Mage::logException($em);
             }
         }
         return true;
     } catch (Mage_Core_Exception $e) {
         if (!$silent) {
             Mage::throwException($e->getMessage());
         }
         Sage_Log::logException($e);
         return false;
     }
 }
 public function updateordermethodAction()
 {
     $vote = $this->getRequest()->getPost('vote');
     if ($vote) {
         $this->voteAdd();
     }
     if (!$this->isCustomerLoggedIn()) {
         if (isset($_POST['register_new_account'])) {
             $isguest = $this->getRequest()->getPost('register_new_account');
             if ($isguest == '1' or Mage::helper('onestepcheckout')->haveProductDownloadable()) {
                 //if checkbox register_new_accoutn checked or exist downloadable product, create new acc
                 $result_save_method = $this->getOnepage()->saveCheckoutMethod('register');
             } else {
                 $result_save_method = $this->getOnepage()->saveCheckoutMethod('guest');
             }
         } else {
             if (!Mage::getStoreConfig('onestepcheckout/config/allowguestcheckout') || !Mage::getStoreConfig('checkout/options/guest_checkout') || Mage::helper('onestepcheckout')->haveProductDownloadable()) {
                 $result_save_method = $this->getOnepage()->saveCheckoutMethod('register');
             } else {
                 $result_save_method = $this->getOnepage()->saveCheckoutMethod('guest');
             }
         }
     }
     if ($this->getRequest()->isPost()) {
         $data_save_billing = $this->filterdata($this->getRequest()->getPost('billing', array()), false);
         if ($this->isCustomerLoggedIn()) {
             $this->saveAddress('billing', $data_save_billing);
         }
         $customerAddressId = $this->getRequest()->getPost('billing_address_id', false);
         if ($this->getRequest()->getPost('billing_address_id') != "" && (!isset($data_save_billing['save_in_address_book']) || (isset($data_save_billing['save_in_address_book']) && $data_save_billing['save_in_address_book']) == 0)) {
             $customerAddressId = "";
         }
         if ($this->isCustomerLoggedIn() && (isset($data_save_billing['save_in_address_book']) && $data_save_billing['save_in_address_book'] == 1) && !Mage::getStoreConfig('onestepcheckout/addfield/addressbook')) {
             $customerAddressId = $this->getDefaultAddress('billing');
         }
         if (isset($data_save_billing['email'])) {
             $data_save_billing['email'] = trim($data_save_billing['email']);
             if (Mage::helper('onestepcheckout')->issubcribleemail($data_save_billing['email'])) {
                 if ($this->getRequest()->getPost('subscribe_newsletter') == '1') {
                     if ($this->isCustomerLoggedIn()) {
                         $customer = Mage::getSingleton('customer/session')->getCustomer();
                         $customer->setIsSubscribed(1);
                     } else {
                         $this->savesubscibe($data_save_billing['email']);
                     }
                 }
             }
         }
         $result_save_billing = $this->getOnepage()->saveBilling($data_save_billing, $customerAddressId);
         $data_customercomment = $this->getrequest()->getpost('onestepcheckout_comments');
         $Deliverystatus = $this->getrequest()->getpost('deliverydate');
         $Deliverydate = $this->getrequest()->getpost('onestepcheckout_date');
         $Deliverytime = $this->getrequest()->getpost('onestepcheckout_time');
         if (Mage::getStoreConfig("onestepcheckout/deliverydate/timerange")) {
             $Deliverytime = $this->getrequest()->getpost('delivery-timerange');
         }
         $delivery_infor = array($data_customercomment, $Deliverystatus, $Deliverydate, $Deliverytime);
         Mage::getSingleton('core/session')->setDeliveryInforOrder($delivery_infor);
         Mage::getSingleton('core/session')->setDeliveryInforEmail($delivery_infor);
         if (isset($data_save_billing['save_into_account']) && intval($data_save_billing['save_into_account']) == 1 && $this->isCustomerLoggedIn()) {
             $this->setAccountInfoSession($data_save_billing);
         }
     }
     // Shipping
     $isclick = $this->getRequest()->getPost('ship_to_same_address');
     $ship = "billing";
     if ($isclick != '1') {
         $ship = "shipping";
     }
     if ($this->getrequest()->ispost()) {
         $data_save_shipping = $this->filterdata($this->getrequest()->getpost($ship, array()), false);
         if ($this->isCustomerLoggedIn() && !$isclick) {
             $this->saveAddress('shipping', $data_save_shipping);
         }
         if ($isclick == '1') {
             $data_save_shipping['same_as_billing'] = 1;
         }
         // change address if user change infomation
         // reassign customeraddressid and save to shipping
         $customeraddressid = $this->getrequest()->getpost($ship . '_address_id', false);
         // if user chage shipping, billing infomation but not save to database
         if ($isclick || $this->getRequest()->getPost('shipping_address_id') != "" && (!isset($data_save_shipping['save_in_address_book']) || isset($data_save_shipping['save_in_address_book']) && $data_save_shipping['save_in_address_book'] == 0)) {
             $customeraddressid = "";
         }
         if (!$isclick && $this->isCustomerLoggedIn() && (isset($data_save_shipping['save_in_address_book']) && $data_save_shipping['save_in_address_book'] == 1) && !Mage::getStoreConfig('onestepcheckout/addfield/addressbook')) {
             $customeraddressid = $this->getDefaultAddress('shipping');
         }
         $result_save_shipping = $this->getonepage()->saveshipping($data_save_shipping, $customeraddressid);
         //save shipping
     }
     // Shipping method
     if ($this->getRequest()->isPost()) {
         $data_save_shipping_method = $this->getRequest()->getPost('shipping_method', '');
         $result_save_shipping_method = $this->getOnepage()->saveShippingMethod($data_save_shipping_method);
         if (!$result_save_shipping_method) {
             Mage::dispatchEvent('checkout_controller_onepage_save_shipping_method', array('request' => $this->getRequest(), 'quote' => $this->getOnepage()->getQuote()));
             $this->getOnepage()->getQuote()->collectTotals();
         }
         $this->getOnepage()->getQuote()->collectTotals();
     }
     // Payment method
     $result_savepayment = array();
     $this->getOnepage()->getQuote()->getPayment()->setMethodInstance(null);
     $data_savepayment = $this->getRequest()->getPost('payment', array());
     try {
         $result_savepayment = $this->getOnepage()->savePayment($data_savepayment);
     } catch (Exception $e) {
         $message = $e->getMessage();
         echo 'error: ' . $message;
         return;
     }
     $redirectUrl = $this->getOnepage()->getQuote()->getPayment()->getCheckoutRedirectUrl();
     if (isset($redirectUrl)) {
         echo 'redirect: ' . $redirectUrl;
         return;
     }
     $result_order = array();
     if ($data_order = $this->getRequest()->getPost('payment', false)) {
         $this->getOnepage()->getQuote()->getPayment()->importData($data_order);
     }
     //Fix for Sagepay
     $paymentMethod = $this->getOnepage()->getQuote()->getPayment()->getMethod();
     Mage::getSingleton('core/session')->unsErrorpayment();
     if ($paymentMethod == 'sagepayserver') {
         $resultData = array();
         try {
             Mage::helper('sagepaysuite')->validateQuote();
             $result = Mage::getModel('sagepaysuite/sagePayServer')->registerTransaction($this->getRequest()->getPost());
             $resultData = $result->getData();
             if ($result->getResponseStatus() == Ebizmarts_SagePaySuite_Model_Api_Payment::RESPONSE_CODE_APPROVED) {
                 $redirectUrl = $result->getNextUrl();
             } else {
                 Mage::getSingleton('core/session')->setErrorpayment($resultData['response_status_detail']);
                 echo 'error: ' . $resultData['response_status_detail'];
                 return;
             }
         } catch (Exception $e) {
             $resultData['response_status'] = 'ERROR';
             $resultData['response_status_detail'] = $e->getMessage();
             Mage::getSingleton('core/session')->setErrorpayment($resultData['response_status_detail']);
             echo 'error: ' . $resultData['response_status_detail'];
             return;
         }
         if (isset($redirectUrl)) {
             echo 'redirect: ' . $redirectUrl;
             return;
         }
     } else {
         if ($paymentMethod == 'sagepaydirectpro') {
             $resultData = array();
             try {
                 Mage::helper('sagepaysuite')->validateQuote();
                 $directModel = Mage::getModel('sagepaysuite/sagePayDirectPro');
                 $result = $directModel->registerTransaction($this->getRequest()->getPost());
                 $resultData = $result->getData();
                 $response_status = $result->getResponseStatus();
                 if ($response_status == Ebizmarts_SagePaySuite_Model_Api_Payment::RESPONSE_CODE_3DAUTH) {
                     $this->_forward('_expireAjax', 'directPayment', 'sgps', $this->getRequest()->getParams());
                     $this->_forward('threedPost', 'directPayment', 'sgps', $this->getRequest()->getParams());
                     return;
                 } else {
                     try {
                         $this->getOnepage()->saveOrder();
                     } catch (Exception $e) {
                         Mage::getSingleton('core/session')->setErrorpayment($e->getMessage());
                         $this->_redirect('checkout/onepage');
                         return;
                     }
                     $redirectUrl = $this->getOnepage()->getCheckout()->getRedirectUrl();
                     $result_order['success'] = true;
                     $result_order['error'] = false;
                     $cart = Mage::getModel('checkout/cart');
                     $cartItems = $cart->getItems();
                     foreach ($cartItems as $item) {
                         $cart->removeItem($item->getId())->save();
                     }
                     $this->getOnepage()->getQuote()->save();
                     if (isset($redirectUrl)) {
                         $this->_redirectUrl($redirectUrl);
                         return;
                     }
                     $this->_redirect('checkout/onepage/success');
                 }
             } catch (Exception $e) {
                 Sage_Log::logException($e);
                 $result_order['response_status'] = 'ERROR';
                 $result_order['response_status_detail'] = $e->getMessage();
                 Mage::getSingleton('core/session')->setErrorpayment($result_order['response_status_detail']);
                 $this->_redirect('checkout/onepage');
                 return;
             }
         } elseif ($paymentMethod == 'sagepayform') {
             Mage::helper('sagepaysuite')->validateQuote();
             $this->_forward('_initCheckout', 'formPayment', 'sgps', $this->getRequest()->getPost());
             $this->_forward('go', 'formPayment', 'sgps', $this->getRequest()->getPost());
             return;
         } else {
             if ($paymentMethod == "hosted_pro" || $paymentMethod == "payflow_link" || $paymentMethod == "payflow_advanced") {
                 echo "error: hosted_pro";
                 return;
             } else {
                 try {
                     $this->getOnepage()->saveOrder();
                 } catch (Exception $e) {
                     echo 'error: ' . $e->getMessage();
                     return;
                 }
                 $redirectUrl = $this->getOnepage()->getCheckout()->getRedirectUrl();
                 $result_order['success'] = true;
                 $result_order['error'] = false;
                 $cart = Mage::getModel('checkout/cart');
                 $cartItems = $cart->getItems();
                 foreach ($cartItems as $item) {
                     $cart->removeItem($item->getId())->save();
                 }
                 $this->getOnepage()->getQuote()->save();
                 if (isset($redirectUrl)) {
                     echo 'redirect: ' . $redirectUrl;
                     return;
                 }
                 echo 'redirect: ' . Mage::getUrl('checkout/onepage/success');
                 return;
             }
         }
     }
 }