Я создал способ оплаты модуль. В этом модуле, когда я вошел в систему, он успешно получил идентификатор заказа с Интерфейс Magento \ Quote \ Api \ CartManagementInterface. но когда я был гостем, я не смог получить идентификатор заказа с Интерфейс Magento \ Quote \ Api \ CartManagementInterface. Я искал в Google и обнаружил, что для интерфейса клиента был изменен Magento \ Quote \ Api \ GuestCartManagementInterface. Я также попробовал этот интерфейс, но все еще не работал для получения идентификатора заказа клиента. Когда я нажимаю кнопку выбора места, вызывается Мой контроллер модуля. Код моего контроллера приведен ниже.Magento 2: Как получить идентификатор заказа для гостевого клиента в контроллере после нажатия кнопки выбора места?
<?php
namespace Mageniks\Testpayment\Controller\Payment;
use Magento\Framework\Controller\ResultFactory;
use Magento\Quote\Api\CartManagementInterface;
use Magento\Quote\Api\GuestCartManagementInterface;
class Redirect extends \Magento\Framework\App\Action\Action
{
/**
* Customer session model
*
* @var \Magento\Customer\Model\Session
*/
protected $_customerSession;
protected $resultPageFactory;
protected $_paymentMethod;
protected $_checkoutSession;
protected $checkout;
protected $cartManagement;
protected $guestcartManagement;
protected $orderRepository;
protected $_scopeConfig;
/**
* @param \Magento\Framework\App\Action\Context $context
* @param \Magento\Customer\Model\Session $customerSession
*/
public function __construct(
\Magento\Framework\App\Action\Context $context,
\Magento\Customer\Model\Session $customerSession,
\Mageniks\Testpayment\Model\PaymentMethod $paymentMethod,
\Magento\Checkout\Model\Session $checkoutSession,
\Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
CartManagementInterface $cartManagement,
GuestCartManagementInterface $guestcartManagement
) {
$this->_customerSession = $customerSession;
parent::__construct($context);
$this->_paymentMethod = $paymentMethod;
$this->_checkoutSession = $checkoutSession;
$this->cartManagement = $cartManagement;
$this->guestcartManagement = $guestcartManagement;
$this->orderRepository = $orderRepository;
$this->_scopeConfig = $scopeConfig;
}
public function execute()
{
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$customerSession = $objectManager->get('Magento\Customer\Model\Session');
$orderId = '';
if($customerSession->isLoggedIn())
{
// FOR LOGIN CUSTOMER GET ORDER ID
$orderId = $this->cartManagement->placeOrder($this->_checkoutSession->getQuote()->getId());
}
else
{
// FOR GUEST CUSTOMER GET ORDER ID
try
{
$orderId = $this->guestcartManagement->placeOrder($this->_checkoutSession->getQuote()->getId());
} catch (\Exception $e)
{
echo $e->getMessage();
}
}
$order = $this->orderRepository->get($orderId);
if ($order){
$order->setState($this->_scopeConfig->getValue('payment/testpayment/new_order_status', \Magento\Store\Model\ScopeInterface::SCOPE_STORE));
$order->setStatus($this->_scopeConfig->getValue('payment/testpayment/new_order_status', \Magento\Store\Model\ScopeInterface::SCOPE_STORE));
$order->save();
}
}
}
?>
Как я могу получить идентификатор заказа для гостевого клиента в контроллере после нажатия кнопки «Заказать номер»? Пожалуйста, помогите мне. Любая помощь будет оценена по достоинству.
Сказал (а) спасибо
на странице успеха magento автоматически отображает идентификатор заказа для гостевого пользователя. Или вы можете использовать сеанс для получения идентификатора заказа. 'Mage :: getSingleton ('checkout/session') -> getLastOrderId();' – urfusion
Я использую magento 2. Я также пытался получить идентификатор заказа из сеанса проверки, но он вернет пустое: $ this -> _ checkoutSession -> getLastRealOrderId(); – Niks
Мой контроллер вызывается перед успешной страницей, поэтому я не могу получить объект заказа – Niks