按预订订单ID获取报价

时间:2014-10-27 13:47:45

标签: magento

我想创建一种新的付款方式。在结账过程中,付款方式重定向到第三方服务。我将reservedOrderId传递给第三方服务,并在付款成功时返回此ID。如何通过reservedOrderId获取报价?或者我需要在重定向到第三方服务之前将报价转换为订单吗?

3 个答案:

答案 0 :(得分:3)

由于保留订单应该是唯一的,您可以尝试:

$quote = Mage::getModel('sales/quote')->getCollection()
    ->addFieldToFilter('reserved_order_id', 'Your Order id')
    ->getFirstItem();

if ($quote->getId()) {
   //quote was found - $quote
}
else {
   //the quote does not exist.
}

答案 1 :(得分:2)

这很好用:

Mage::getSingleton('sales/quote')
     ->load($orderId, 'reserved_order_id')

感谢@Sergei

答案 2 :(得分:0)

在发送给第三方之前,您最好将报价转换为订单。它将允许您拥有订单的正确状态(已取消,已付款,欺诈......)。

如果您确实需要在之后创建订单,则可以覆盖mage_sales_model_quote和mage_sales_model_resource_quote以创建相应函数loadByReservedOrderId(),该资源具有对数据库的调用以及允许您在控制器上调用它的模型。

对于资源,就像那样。

public function loadByReservedOrderId($id){
    $select = $this->_getReadAdapter()->select()->from(array('main_table'=>$this->getMainTable()), 'entity_id')
        ->where('main_table.reserved_order_id = ?', array($id));

    return $this->_getReadAdapter()->fetchOne($select);
}

为模型:

public function loadByReservedOrderId($id)
{
    if ($id == null){
        return  false;
    }
    $order_id = $this->_getResource()->loadByReservedOrderId($id);
    $this->load($order_id);
    return $this;
}