无法在Magento的客户控制器中加载订单


Unable to load an order inside my customer controller in Magento

我正在努力在Magento中创建一个新的支付集成,我需要在我的控制器中加载当前订单,这样我就无法获得名字,姓氏,电子邮件等详细信息,所以我可以在Paymen网关的API上发帖。

作为我问题的一个例子,我有一个动作:

public function testAction() { 
    echo "<h1>" . Mage::getSingleton('checkout/session')->getLastRealOrderId() . "</h1>";     
$_order = Mage::getModel('sales/order')->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());   
foreach ($_order->_data as $key => $value) {    echo "$key: $value<br />";}
}

检查我的 magento 系统记录错误:

注意:尝试获取非对象的属性

如果我创建一个操作:

注意:尝试获取非对象的属性

public function testAction() { 
$this->loadLayout();
    $block = $this->getLayout()->createBlock('Mage_Core_Block_Template',test, array('template' => 'test/test.phtml'));        
    $this->getLayout()->getBlock('content')->append($block);
    $this->renderLayout();
}

然后创建 test.phtml 视图,其中包含与控制器最初具有的相同代码:

echo "<h1>" . Mage::getSingleton('checkout/session')->getLastRealOrderId() . "</h1>";     
$_order = Mage::getModel('sales/order')->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());   
foreach ($_order->_data as $key => $value) {    echo "$key: $value<br />";}

然后页面带回我的订单对象的属性,我能够从中获取我需要的信息。

我是Magento的新手,所以我确定我错过了一些非常明显的东西,但我希望能够将订单对象加载到控制器中。

作为附加信息,以防这与我的控制器扩展Mage_Core_Controller_Front_Action的问题有任何影响。

更新

Mage::getSingleton('checkout/session')->getLastRealOrderId() 确实会带回正确的订单 ID。因为它在标签内回响。问题似乎是订单对象没有加载,只是创建了一个新实例。

方法getLastRealOrderId 如果客户从未完成订单,则返回空。

我认为您最好使用以下方法加载客户的订单:

$customer = Mage::getSingleton('customer/session')->getCustomer();
$customer_email = $customer->getEmail();
$_order = Mage::getModel('sales/order')->load($customer_email, 'customer_email');

似乎我需要使用 getData() 函数在加载数据后将数据按顺序排列:

echo "<h1>" . Mage::getSingleton('checkout/session')->getLastRealOrderId() . "</h1>";     
$_order = Mage::getModel('sales/order')->loadByIncrementId(Mage::getSingleton('checkout/session')->getLastRealOrderId());   
$data = $order->getData();
foreach ($data as $key => $value) {    echo "$key: $value<br />";}