4

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

class My_Module_Model_Payment extends Mage_Payment_Model_Method_Abstract {}

这个方法应该只返回用户被重定向到的支付网关的 URL,但我也应该将当前 orderId 附加到这个 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。

有任何想法吗?

4

1 回答 1

15

你写的问题是不合逻辑的。

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

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

用您在结帐过程中的点重申您的问题,以及您尝试对订单 ID 执行的操作可能会帮助某人提出您不知道自己需要的信息。

祝你好运!


作者的解决方案:

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

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

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

$quote = Mage::getModel("sales/quote")->load($quoteId); 
于 2012-01-12T22:17:14.310 回答