get Coupon Code in beforePlaceOrder
-
04-03-2021 - |
Вопрос
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);
}
}
Не связан с magento.stackexchange