получите код купона перед размещением заказа


Здравствуйте, я хочу получить код купона в плагине. Мой код:

  private $logger;
  private $checkoutSession;

  public function __construct(
    \Psr\Log\LoggerInterface $logger,
    \Magento\Checkout\Model\Session $checkoutSession
  ){
    $this->logger = $logger;
    $this->checkoutSession = $checkoutSession;
  }
  public function beforePlaceOrder(\Magento\Quote\Model\QuoteManagement $subject, $cartId, ?\Magento\Quote\Api\Data\PaymentInterface $paymentMethod = null){
    $this->logger->debug("Before Place Order");
    $order = $this->checkoutSession->getLastRealOrder();
    $orderId=$order->getEntityId();
    $couponCode = $order->getCouponCode();
    $this->logger->debug($couponCode);
  }

Но $couponcode пуст.

Кто-нибудь может мне помочь?

Заранее благодарю вас

Author: vDrews, 2019-06-20

1 answers

Вам не нужно использовать сеанс оформления заказа \Magento\Checkout\Model\Session.

Из Magento\Quote\Model\QuoteManagement и Magento\Quote\Api\CartRepositoryInterface можно получить код купона.

   private $logger;
  private $quoteRepository;

  public function __construct(
    \Psr\Log\LoggerInterface $logger,
    \Magento\Quote\Api\CartRepositoryInterface $quoteRepository
  ){
    $this->logger = $logger;
    $this->quoteRepository = $quoteRepository;
  }
  public function beforePlaceOrder(
    \Magento\Quote\Model\QuoteManagement $subject,
     $cartId, 
    \Magento\Quote\Api\Data\PaymentInterface $paymentMethod = null
){
    $this->logger->debug("Before Place Order");
    $quote = $this->quoteRepository->getActive($cartId);

    if($quote->getId()){
        $couponCode = $quote->getCouponCode();
        $this->logger->debug($couponCode);
    }       

  }
 1
Author: Amit Bera, 2019-06-20 11:21:21