1

failureAction()設定すると注文が失敗としてマークされ、それapp/code/core/Mage/Checkout/controller/OnepageController.phpが呼び出される1つのプロパティが何であるかを知りたいだけです。

私は、成功した支払いと失敗した支払いの請求書を作成し、注文をpending_paymentステータスとともに保存し、上部にエラーメッセージを表示してカートページにリダイレクトしたい Observer.php を持っています。

これはすべてうまくいきます。失敗した/失敗した支払いの場合は、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()、トリックをしていないようです。注文を「キャンセル済み」ステータスで保存した後、カートが空にならないようにするにはどうすればよいですか。

4

1 に答える 1

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();

コントローラー内のfailureActionアクションは、そのようなことは何もしません。手動で呼び出したい場合は、次を使用して URL を作成できます。Mage::getUrl()

于 2012-05-24T20:54:25.787 に答える