Вопрос

Hello I want to get the coupon code in a plugin. My code is:

  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);
  }

But $couponCode is empty.

Can someone help me?

thank you in advance

Это было полезно?

Решение

You don't need use checkout session \Magento\Checkout\Model\Session.

From Magento\Quote\Model\QuoteManagement and Magento\Quote\Api\CartRepositoryInterface can get coupon code .

   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);
    }       

  }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top