4

我希望能够允许用户在结帐时选择某个选项,然后他们将被重定向到他们使用信用信息支付的银行页面,然后重定向回 magento 并将订单设置为成功或失败时批准如果不

几天来我一直在搞乱magento的代码,我能够通过onepage控制器“破解”进行重定向然后返回,但我无法将订单状态更改为“已批准”从那个控制器

我基本上在“保存订单操作”中在控制器中所做的是: - 检查用户选择的付款方式 - 如果是我需要的,请将用户发送到银行页面并支付要支付的金额 - 然后从那里返回page 到检查返回状态的 php 页面,如果成功则重定向到 onepage/success/ ,如果不是,则重定向到 onepage/failure

这一切都很好,但我怎样才能改变订单状态?

我尝试了此链接中的内容,但这仅适用于旧版本的 Magento 似乎 http://blog.chapagain.com.np/magento-how-to-change-order-status-programmatically/

谢谢

4

3 回答 3

2

请记住,成功页面并不一定会将付款状态更改为已批准。这是因为不同的付款方式可能会在不同的时间批准付款。例如,Paypal 在有机会处理付款之前不会批准付款。

您的 CC 公司是否提供可用于更新状态的回调?如果是这样,我建议使用 Paypal 模块作为如何处理此问题的模板(等待回调,更新订单状态)。如果没有,也许使用 cronjob 和他们的 API 来检查付款状态。

总体而言,不要依赖客户在付款后访问某个页面,因为在很多情况下情况并非如此。

希望有帮助!

谢谢,乔

于 2011-04-20T12:37:35.950 回答
2

我从贝宝付款成功后解决了这个问题。您可以将订单状态更改为可下载的产品,

付款发送邮件成功和订单状态后转到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 回答
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 回答