magento 按保留的订单标识获取报价

xzv2uavs  于 2022-11-12  发布在  其他
关注(0)|答案(4)|浏览(123)

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

t30tvxxf

t30tvxxf1#

由于保留的订单应该是唯一的,因此可以尝试以下操作:

$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.
}
fcwjkofz

fcwjkofz2#

这样做效果很好:

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

感谢@谢尔盖

d5vmydt9

d5vmydt93#

在Magento2中,您可以通过以下方式按保留的订单ID加载报价:

namespace Tschallacka\TestPlugin\Quote;

use Magento\Quote\Model\QuoteFactory;
use Magento\Quote\Model\ResourceModel\Quote as QuoteResource;

class Test 
{
    const RESERVED_ORDER_FIELD = 'reserved_order_id';

    protected $quoteFactory;
    protected $quoteResource;

    public function __construct(
        QuoteFactory $quoteFactory, 
        QuoteResource $quoteResource
    ) {
        $this->quoteFactory = $quoteFactory;
        $this->quoteResource = $quoteResource;
    }

    /**@return \Magento\Quote\Model\Quote**/
    public function loadQuote() 
    {
       $quote = $this->quoteFactory->create();
       $this->quoteResource->load($quote, 'test_quote', self::RESERVED_ORDER_FIELD);
       return $quote;
    }
}
8ehkhllq

8ehkhllq4#

在发送给第三方之前,您最好将报价转换为订单。这将允许您获得订单的正确状态(已取消、已支付、欺诈......)。
如果您确实需要在之后创建订单,您可以覆盖 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;
}

相关问题