【问题标题】:Get current orderId in magento payment module during checkout在结帐期间在 magento 支付模块中获取当前 orderId
【发布时间】: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。

有什么想法吗?

【问题讨论】:

    标签: php magento e-commerce payment gateway


    【解决方案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());
    猜你喜欢
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 2012-05-10
    • 2014-03-03
    • 1970-01-01
    • 2020-08-13
    相关资源
    最近更新 更多