From ac44646673a6b2c8534250f5354b332bf5889829 Mon Sep 17 00:00:00 2001 From: KrasnoshchokBohdan Date: Mon, 26 May 2025 11:00:04 +0300 Subject: [PATCH] magento/magento2#37983: Place order with disabled Payment method working - prevent order placement with unavailable payment method --- .../QuoteGraphQl/Model/Cart/PlaceOrder.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php b/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php index b1a7ed3bdc5b6..ca032c7dc63da 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php @@ -58,6 +58,25 @@ public function execute(Quote $cart, string $maskedCartId, int $userId): int $cartId = (int)$cart->getId(); $paymentMethod = $this->paymentManagement->get($cartId); + // Get a list of available payment methods for the cart + $availablePaymentMethods = $this->paymentManagement->getList($cartId); + $paymentMethodCode = $cart->getPayment()->getMethod(); + $isPaymentMethodAvailable = false; + + // Check if the selected payment method is in the available methods list + if($paymentMethodCode && $availablePaymentMethods){ + foreach ($availablePaymentMethods as $availableMethod) { + if ($availableMethod->getCode() === $paymentMethodCode) { + $isPaymentMethodAvailable = true; + break; + } + } + } + + if (!$isPaymentMethodAvailable) { + throw new LocalizedException(__('The requested Payment Method is not available.')); + } + return (int)$this->cartManagement->placeOrder($cartId, $paymentMethod); } }