4

ユーザーがチェックアウト時に特定のオプションを選択できるようにしたいと考えています。その後、銀行のページにリダイレクトされ、そこでクレジット情報を使用して支払いを行い、magento にリダイレクトされて、成功または失敗時に承認済みとして注文が設定されます。そうでない場合

数日間、magento のコードをいじっていました。onepage コントローラーを「ハック」してリダイレクトを実行し、戻ってくることができましたが、注文のステータスを「承認済み」に変更することはできません。そのコントローラーから

「saveorderアクション」でコントローラーで基本的に行ったことは次のとおりです。-ユーザーが選択した支払い方法を確認します-必要なものである場合は、ユーザーを銀行ページに送信して、支払う金額を指定します-その後、そこから戻ります返されたステータスを確認する php ページへのページ。成功した場合は onepage/success/ にリダイレクトし、そうでない場合は onepage/failure にリダイレクトします。

それはすべてうまくいきますが、どうすれば注文状態を変更できますか?

このリンクにあるものを試しましたが、これは古いバージョンの Magento でのみ機能するようです http://blog.chapagain.com.np/magento-how-to-change-order-status-programmatically/

ありがとう

4

3 に答える 3

2

Paypalからの支払いが成功した後、この問題を解決しました。注文ステータスプロセスをダウンロード可能な製品に変更できます。

に移動しapp\code\core\Mage\paypal\controllers\StandardController.php 、支払いが成功したメールの送信と注文ステータスの後にコードを私のコードに置き換えます。

public function successAction() 
{ 
    $session = Mage::getSingleton('checkout/session'); 
    $session->setQuoteId($session->getPaypalStandardQuoteId(true)); 
    Mage::getSingleton('checkout/session')->getQuote()->setIsActive(false)->save(); 

    $session->setPaypalStandardQuoteId($session->getQuoteId()); 
    $order = Mage::getModel('sales/order'); 
    $order->load(Mage::getSingleton('checkout/session')->getLastOrderId()); 
    $state = Mage_Sales_Model_Order::STATE_PROCESSING; 
    $order->setState($state); 
    $order->setStatus('processing'); 
    $order->sendNewOrderEmail(); 
    $order->save(); 
    $this->_redirect('checkout/onepage/success', array('_secure'=>true)); 
} 
于 2011-06-29T09:43:49.090 に答える
2

成功ページで支払い状態が承認済みに変わるとは限らないことに注意してください。これは、支払い方法が異なれば、支払いが承認されるタイミングも異なる可能性があるためです。たとえば、Paypal は、処理する機会が得られるまで支払いを承認しません。

CC会社は、ステータスを更新するために使用できるコールバックを提供していますか? もしそうなら、これを処理する方法のテンプレートとして Paypal モジュールを使用することをお勧めします (コールバックを待ち、注文ステータスを更新します)。そうでない場合は、cronjob とその API を使用して支払い状況を確認してください。

全体として、顧客が支払った後に特定のページにアクセスすることに依存しないでください。そうでない状況がたくさんあるからです。

それが役立つことを願っています!

ありがとう、ジョー

于 2011-04-20T12:37:35.950 に答える
1

注文状態を変更するには (magento 1.5)

$order->setStatus(Mage_Sales_Model_Order::STATE_COMPLETE);
$order->setState(Mage_Sales_Model_Order::STATE_COMPLETE);
$order->save();
于 2011-04-20T11:23:14.387 に答える