我正在为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);