在结账时获取magento支付模块中的当前orderId

Kov*_*NET 4 php payment gateway magento e-commerce

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

class My_Module_Model_Payment extends Mage_Payment_Model_Method_Abstract {}
Run Code Online (Sandbox Code Playgroud)

该方法应该只返回用户被重定向到的支付网关的URL,但我也应该将当前的orderId附加到此URL.

问题是我无法获得orderId.我尝试过这里已经接受的解决方案

$orderId = Mage::getSingleton('checkout/session')->getLastRealOrderId();
Run Code Online (Sandbox Code Playgroud)

但我得到空的$ orderId.所以这似乎不适用于我的方法.调用不会产生错误,所以我得到一个对象(例如Mage :: getSingleton('checkout/session') - > getQuote() - > getSubtotal()返回订单金额),但orderId为空.

我也尝试过:

$order = Mage::getModel('sales/order');
$order->load(Mage::getSingleton('sales/order')->getLastOrderId());
$orderId = $order->getIncrementId();
Run Code Online (Sandbox Code Playgroud)

它再次返回空的$ orderId.

有任何想法吗?

Ala*_*orm 15

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

没有订单ID 结账.当你退房时,Magento会创建一个 sales/quote对象.此对象用于跟踪报价项目.直到结账完成后才能sales/order从报价中创建对象.

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

通过您所在的结账流程中的重点重述您的问题,以及您尝试对订单ID执行的操作可能会帮助某人提供您不需要的信息.

祝好运!


作者的解决方案:

首先从结帐/会话中获取报价ID,解决了这个问题:

Mage::getSingleton('checkout/session')->getQuoteId(); 
Run Code Online (Sandbox Code Playgroud)

然后按引用ID引用对象:

$quote = Mage::getModel("sales/quote")->load($quoteId); 
Run Code Online (Sandbox Code Playgroud)

  • 引号和引用项也会持久保存到数据库中.这就是magento如何跟踪废弃的购物车.我会专注于使用这些对象来获取您想要的信息. (3认同)
  • 我通过将quoteId传递给支付网关(Mage :: getSingleton('checkout/session') - > getQuoteId();)解决了我的问题,然后我能够在单独的请求中获取报价数据:$ quote = Mage :: getModel( "销售/报价") - >负载($ quoteId); 谢谢! (3认同)