结账时在magento支付模块中获取当前订单ID


Get current orderId in magento payment module during checkout

我正在为Magento实现我自己的支付模块,在我的支付模型中实现了getCheckoutRedirectUrl()方法。

class My_Module_Model_Payment extends Mage_Payment_Model_Method_Abstract {}

这个方法应该只返回用户重定向到的支付网关的URL,但我也应该将当前订单ID附加到这个URL。

问题是我无法获取orderId。我尝试了已经在这里接受的解决方案

$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();

但我得到了空$orderId。所以这在我的方法中似乎不起作用。调用不会产生错误,所以我得到了一个对象(例如Mage::getSingleton('checkout/session')->getQuote()->getSubtotal()返回订单数量),但orderId为空。

我也试过:

$order = Mage::getModel('sales/order');
$order->load(Mage::getSingleton('sales/order')->getLastOrderId());
$orderId = $order->getIncrementId();

其再次返回空的$orderId。

有什么想法吗?

您提出的问题是不合逻辑的。

在结账期间没有订单id。签出时,Magento会创建一个sales/quote对象。此对象用于跟踪报价项目。直到签出完成,才从报价中创建sales/order对象。

getLastOrderId返回空的原因是没有下订单。

在结账过程中,用你所处的点来重申你的问题,以及你试图用订单id做什么,可能会帮助别人找到你不知道自己需要的信息。

祝你好运!


作者的解决方案:

通过首先从结账/会话中获取报价ID解决了问题:

Mage::getSingleton('checkout/session')->getQuoteId(); 

然后通过引用ID:引用对象

$quote = Mage::getModel("sales/quote")->load($quoteId);