2017-02-07 2 views
0

Я создал способ оплаты модуль. В этом модуле, когда я вошел в систему, он успешно получил идентификатор заказа с Интерфейс 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(); 
     } 

    } 

} 

?> 

Как я могу получить идентификатор заказа для гостевого клиента в контроллере после нажатия кнопки «Заказать номер»? Пожалуйста, помогите мне. Любая помощь будет оценена по достоинству.

Сказал (а) спасибо

+0

на странице успеха magento автоматически отображает идентификатор заказа для гостевого пользователя. Или вы можете использовать сеанс для получения идентификатора заказа. 'Mage :: getSingleton ('checkout/session') -> getLastOrderId();' – urfusion

+0

Я использую magento 2. Я также пытался получить идентификатор заказа из сеанса проверки, но он вернет пустое: $ this -> _ checkoutSession -> getLastRealOrderId(); – Niks

+0

Мой контроллер вызывается перед успешной страницей, поэтому я не могу получить объект заказа – Niks

ответ

0

Является ли заказ правильно зарегистрированным пользователям? У вас есть исключения?

Может быть, вы можете попробовать это:

$quote->setCustomerId(null) 
     ->setCustomerEmail($quote->getBillingAddress()->getEmail()) 
     ->setCustomerIsGuest(true) 
     ->setCustomerGroupId(Group::NOT_LOGGED_IN_ID); 
$quote->collectTotals(); 
$orderId = $this->cartManagement->placeOrder($quote->getId()); 

Я никогда не проверял мой код без него, хотя, но независимо от типа клиента я всегда мой идентификатор заказа.

Смежные вопросы