How does the Authorize.Net module restore a quote from an order in the case of a payment failure?

Context: How is \Magento\Checkout\Model\Session::replaceQuote() implemented and used?


981d1f/app/code/Magento/Authorizenet/Controller/Directpost/Payment.php#L118-L150

/**
 * Return customer quote
 *
 * @param bool $cancelOrder
 * @param string $errorMsg
 * @return void
 */
protected function _returnCustomerQuote($cancelOrder = false, $errorMsg = '')
{
	$incrementId = $this->_getDirectPostSession()->getLastOrderIncrementId();
	if ($incrementId && $this->_getDirectPostSession()->isCheckoutOrderIncrementIdExist($incrementId)) {
		/* @var $order \Magento\Sales\Model\Order */
		$order = $this->_objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId($incrementId);
		if ($order->getId()) {
			try {
				/** @var \Magento\Quote\Api\CartRepositoryInterface $quoteRepository */
				$quoteRepository = $this->_objectManager->create('Magento\Quote\Api\CartRepositoryInterface');
				/** @var \Magento\Quote\Model\Quote $quote */
				$quote = $quoteRepository->get($order->getQuoteId());

				$quote->setIsActive(1)->setReservedOrderId(null);
				$quoteRepository->save($quote);
				$this->_getCheckout()->replaceQuote($quote);
			} catch (\Magento\Framework\Exception\NoSuchEntityException $e) {
			}
			$this->_getDirectPostSession()->removeCheckoutOrderIncrementId($incrementId);
			$this->_getDirectPostSession()->unsetData('quote_id');
			if ($cancelOrder) {
				$order->registerCancellation($errorMsg)->save();
			}
		}
	}
}

See also: