在结帐期间在 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购物车页面中的贝宝支付标准?

在magento中成功支付paypal后检索数据

Magento 中的 goldmoney 支付网关实现

Magento 2 - Paypal 错误“我们无法启动快速结帐”。

获取 Paypal Express [Magento] 的完整账单地址

magento 自定义付款方式表单未显示