在结帐期间在 magento 支付模块中获取当前 orderId
Posted
技术标签:
【中文标题】在结帐期间在 magento 支付模块中获取当前 orderId【英文标题】:Get current orderId in magento payment module during checkout 【发布时间】:2012-02-09 04:59:56 【问题描述】:我正在为 Magento 实现自己的支付模块,在我的支付模型中实现了 getCheckoutRedirectUrl() 方法。
class My_Module_Model_Payment extends Mage_Payment_Model_Method_Abstract
这个方法应该只返回用户被重定向到的支付网关的 URL,但我还应该将当前 orderId 附加到这个 URL。
问题是无法获取 orderId。我已经尝试过解决方案accepted here
$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。
有什么想法吗?
【问题讨论】:
【参考方案1】:您写的问题不合逻辑。
结帐期间没有订单 ID。在您签出时,Magento 会创建一个 sales/quote
对象。此对象用于跟踪报价项目。直到结帐完成,才会从引用中创建 sales/order
对象。
getLastOrderId
返回空的原因是因为没有下订单。
在结帐过程中重申您的问题,以及您尝试对订单 ID 执行的操作可能会帮助某人提出您不知道自己需要的信息。
祝你好运!
作者的解决方案:
通过首先从结帐/会话中获取报价 ID 解决了问题:
Mage::getSingleton('checkout/session')->getQuoteId();
然后通过引用 ID 引用对象:
$quote = Mage::getModel("sales/quote")->load($quoteId);
【讨论】:
这是我的猜测订单还不存在,感谢您向我澄清这一点,我认为订单已经保存到数据库之前。但是我需要某种标识符,通过它我可以在支付网关在后台发出的单独独立请求(没有 cookie)中获取订单信息(例如金额)。也许我可以传递会话 ID 并设置会话,所以我可以访问报价(在购物车中订购)? 报价和报价项目也被持久化到数据库中。这就是 magento 跟踪废弃购物车的方式。我会专注于使用这些对象来获取您想要的信息。 我通过将 quoteId 传递给支付网关 (Mage::getSingleton('checkout/session')->getQuoteId();) 解决了我的问题,然后我能够获得单独的报价数据请求:$quote = Mage::getModel("sales/quote")->load($quoteId);谢谢! 我在一个模块中,试图在观察者中捕获报价对象。但没有从事件中得到。 $evt->getQuote() @MACMAN 这是传入的具有对象的观察者——试试 var_dump($observer->getData());以上是关于在结帐期间在 magento 支付模块中获取当前 orderId的主要内容,如果未能解决你的问题,请参考以下文章
Magento 2 - Paypal 错误“我们无法启动快速结帐”。