2012-05-24 69 views
1

我只想知道什麼是一個屬性,當設置將標記爲失敗,以便failureAction()app/code/core/Mage/Checkout/controller/OnepageController.php被調用。如何以編程方式標記訂單失敗 - Magento

我有一個Observer.php,我正在爲成功的付款創建發票,併爲失敗的付款保存訂單pending_payment狀態,並希望將它們重定向到購物車頁面,並在頂部顯示錯誤消息。

所有這一切都很好。只是,對於不成功/失敗的付款,以及以pending_payment狀態保存訂單n將它們重定向到帶有錯誤消息的購物車頁面,我還想保留/保存購物車變空。

但沒有運氣

Observer.php

public function implementOrderStatus($event) 
{ 
    $order = $event->getEvent()->getOrder(); 
    if ($this->_getPaymentMethod($order) == 'mypaymentmodule') 
    { 
       $quote = Mage::getModel('sales/quote')->load($order->getQuoteId()); 
     if($order->getPayment()->getCcTransId() == NULL) 
     { 
      $order->cancel(); 
      $order->setStatus('canceled'); 
      $order->save(); 
      $quote->setIsActive(1)->save(); 
      /*$state = 'pending_payment'; 
      $status = 'pending_payment'; 
      $comment = 'Payment transaction failed due to incorrect AVS/CVD details.'; 
      $isNotified = false; 
      $order->setState($state,$status,$comment,$isNotified)->save(); 
      $order->setCanSendNewEmailFlag(false);*/ 

      Mage::getSingleton('checkout/session')->addError('Sorry, either of your card information (billing address or card validation digits) dint match. Please try again');     

      Mage::app()->getFrontController()->getResponse()->setRedirect('checkout/cart/')->sendResponse(); 
     } 
     else 
     { 
      if ($order->canInvoice()) 

      $this->_processOrderStatus($order); 
     } 
    } 
    return $this; 
} 

$quote->setIsActive(true)->save()似乎並沒有做的伎倆。任何幫助,如何在保存「取消」狀態的訂單後將我的購物車保存爲空。

回答

0

你也許應該看看./app/code/core/Mage/Sales/Model/Order.php。在那裏,你會發現一個命令,可以用來設置訂單的狀態,像這樣幾個常數:

<?php 
// [...] all your code within your custom action or script 

//load your order by order_id (or by increment_id, if you like to, here, it's your order id 
$order = Mage::getModel('sales/order')->load($your_order_id); 
$order->setState(Mage_Sales_Model_Order::STATE_CANCELED); //or whatever distinct order status you'd like 
$order->save(); 

在controiller行動的failureAction做這樣的事,如果你想手動調用它,你可以使用Mage::getUrl()

+0

感謝您的回覆。我已經嘗試了你建議的代碼,但是這並沒有把我帶到失敗頁面。我真正想要做的就是保存購物車,例如'$ quote-> setIsActive(true) - > save()'以保存購物車在失敗/取消的訂單上變空,以便客戶不必通過再次添加項目的麻煩。任何想法做到這一點? – ivn

+0

編輯:請參閱編輯的問題了解更多信息。 – ivn

+0

觀察者正在聽哪個事件?您可能可以通過發送一個標頭,將位置更改回購物車,從而通過例外。 – Florian

相關問題