我正在努力在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 />";}