2012-05-24 3 views
1

집합이 실패했을 때 주문을 표시하면 그 failureAction()app/code/core/Mage/Checkout/controller/OnepageController.php이 호출되는 속성이 무엇인지 알고 싶습니다.프로그래밍 방식으로 실패한 주문을 표시하는 방법 - Magento

Observer.php에서 성공적인 지불을 위해 인보이스를 생성하고 지불 실패로 인해 pending_payment 상태의 주문을 저장하고 맨 위에 오류 메시지가있는 장바구니 페이지로 리디렉션하려고합니다.

모든 문제가 발생합니다. 실패한/실패한 결제에 대해 pending_payment 상태로 주문을 저장하고 오류 메시지가 표시된 장바구니 페이지로 리디렉션하는 것과 함께 장바구니를 비울 필요가 없도록 유지하고 싶습니다.

그러나 행운에

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는 종류의 아무것도하지 않는다 , 당신은 그것을 사용하여 URL을 구축 할 수 있습니다 Mage::getUrl()

+0

답장을 보내 주셔서 감사합니다. 이미 제안한 코드를 시도했지만 실패 페이지로 이동하지는 않습니다. 제가 정말로하고 싶은 것은 장바구니를 저장하는 것입니다. 즉,'$ quote-> setIsActive (true) -> save()'를 사용하면 실패/취소 된 주문에 카트가 비어서 저장되지 않도록 할 수 있습니다. 항목을 다시 추가하는 번거 로움. 그 아이디어는 어떨까요? – ivn

+0

편집 : 자세한 내용은 편집 된 질문을 참조하십시오. – ivn

+0

관찰자는 어떤 이벤트를 듣습니까? 장바구니로 다시 위치를 변경하는 머리글을 보내면 예외가 발생할 수 있습니다. – Florian

관련 문제