From ac44646673a6b2c8534250f5354b332bf5889829 Mon Sep 17 00:00:00 2001 From: KrasnoshchokBohdan Date: Mon, 26 May 2025 11:00:04 +0300 Subject: [PATCH 1/3] 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); } } From ff67a1db6adb8cbb6fd194243bc705eb44e2949e Mon Sep 17 00:00:00 2001 From: KrasnoshchokBohdan Date: Tue, 3 Jun 2025 12:04:47 +0300 Subject: [PATCH 2/3] magento/magento2#37983: Place order with disabled Payment method working - copyright and static test errors fix --- app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php b/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php index ca032c7dc63da..7a832fdf3aa28 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php @@ -1,7 +1,7 @@ getCode() === $paymentMethodCode) { $isPaymentMethodAvailable = true; From c646ff8d678f006bab6a59f206922d334df5d6d5 Mon Sep 17 00:00:00 2001 From: KrasnoshchokBohdan Date: Thu, 12 Jun 2025 12:16:25 +0300 Subject: [PATCH 3/3] magento/magento2#37983: Place order with disabled Payment method working Updated the code to safely handle cases where the cart's payment object might be null. This prevents potential errors when accessing the payment method code for carts without a valid payment set. --- app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php b/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php index 7a832fdf3aa28..e09b0d52f6e21 100644 --- a/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php +++ b/app/code/Magento/QuoteGraphQl/Model/Cart/PlaceOrder.php @@ -60,7 +60,8 @@ public function execute(Quote $cart, string $maskedCartId, int $userId): int // Get a list of available payment methods for the cart $availablePaymentMethods = $this->paymentManagement->getList($cartId); - $paymentMethodCode = $cart->getPayment()->getMethod(); + $payment = $cart->getPayment(); + $paymentMethodCode = $payment?->getMethod(); $isPaymentMethodAvailable = false; // Check if the selected payment method is in the available methods list