From fda789228ceff4943263b5c8984e4c4b3a579fb9 Mon Sep 17 00:00:00 2001 From: emilicastells Date: Mon, 28 Nov 2022 11:28:09 +0100 Subject: [PATCH 1/7] Do not call get PayPal order if order id is empty --- modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php index 7b9b80c55..a6d715f55 100644 --- a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php +++ b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php @@ -162,7 +162,12 @@ class OrderProcessor { */ public function process( \WC_Order $wc_order ): bool { $order_id = $wc_order->get_meta( PayPalGateway::ORDER_ID_META_KEY ); - $order = $this->session_handler->order() ?? $this->order_endpoint->order( $order_id ); + if ( ! $order_id ) { + $this->last_error = __( 'No PayPal order ID found in the current WooCommerce session.', 'woocommerce-paypal-payments' ); + return false; + } + + $order = $this->session_handler->order() ?? $this->order_endpoint->order( $order_id ); if ( ! $order ) { $this->last_error = __( 'No PayPal order found in the current WooCommerce session.', 'woocommerce-paypal-payments' ); return false; From a25eca53bb68f3cd494477c7c1eb698d609af70a Mon Sep 17 00:00:00 2001 From: emilicastells Date: Mon, 28 Nov 2022 12:34:28 +0100 Subject: [PATCH 2/7] Refactor PayPal order retrieval --- .../src/Endpoint/OrderEndpoint.php | 14 +++------- .../src/Processor/OrderProcessor.php | 26 ++++++++++++------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php b/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php index 57b8b73d6..7b28e8bdb 100644 --- a/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php +++ b/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php @@ -443,14 +443,8 @@ class OrderEndpoint { $error = new RuntimeException( __( 'Could not retrieve order.', 'woocommerce-paypal-payments' ) ); - $this->logger->log( - 'warning', - $error->getMessage(), - array( - 'args' => $args, - 'response' => $response, - ) - ); + $this->logger->warning($error->getMessage()); + throw $error; } $json = json_decode( $response['body'] ); @@ -485,8 +479,8 @@ class OrderEndpoint { ); throw $error; } - $order = $this->order_factory->from_paypal_response( $json ); - return $order; + + return $this->order_factory->from_paypal_response( $json ); } /** diff --git a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php index a6d715f55..5356a7605 100644 --- a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php +++ b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php @@ -10,9 +10,11 @@ declare(strict_types=1); namespace WooCommerce\PayPalCommerce\WcGateway\Processor; use Psr\Log\LoggerInterface; +use WC_Order; use WooCommerce\PayPalCommerce\ApiClient\Endpoint\OrderEndpoint; use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; +use WooCommerce\PayPalCommerce\ApiClient\Exception\RuntimeException; use WooCommerce\PayPalCommerce\ApiClient\Factory\OrderFactory; use WooCommerce\PayPalCommerce\ApiClient\Helper\OrderHelper; use WooCommerce\PayPalCommerce\Button\Helper\ThreeDSecure; @@ -160,17 +162,21 @@ class OrderProcessor { * * @return bool */ - public function process( \WC_Order $wc_order ): bool { - $order_id = $wc_order->get_meta( PayPalGateway::ORDER_ID_META_KEY ); - if ( ! $order_id ) { - $this->last_error = __( 'No PayPal order ID found in the current WooCommerce session.', 'woocommerce-paypal-payments' ); - return false; - } - - $order = $this->session_handler->order() ?? $this->order_endpoint->order( $order_id ); + public function process( WC_Order $wc_order ): bool { + $order = $this->session_handler->order(); if ( ! $order ) { - $this->last_error = __( 'No PayPal order found in the current WooCommerce session.', 'woocommerce-paypal-payments' ); - return false; + $order_id = $wc_order->get_meta( PayPalGateway::ORDER_ID_META_KEY ); + if ( ! $order_id ) { + $this->last_error = __( 'No PayPal order ID found in order meta.', 'woocommerce-paypal-payments' ); + return false; + } + + try { + $order = $this->order_endpoint->order( $order_id ); + } catch ( RuntimeException $exception ) { + $this->last_error = __( 'Could not retrieve PayPal order.', 'woocommerce-paypal-payments' ); + return false; + } } $this->add_paypal_meta( $wc_order, $order, $this->environment ); From cb876633acae57894d9eacddb22aa0ebcd8c44c4 Mon Sep 17 00:00:00 2001 From: emilicastells Date: Mon, 28 Nov 2022 12:49:34 +0100 Subject: [PATCH 3/7] Add log entry for no order id in meta --- modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php index 5356a7605..48031f81b 100644 --- a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php +++ b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php @@ -167,7 +167,8 @@ class OrderProcessor { if ( ! $order ) { $order_id = $wc_order->get_meta( PayPalGateway::ORDER_ID_META_KEY ); if ( ! $order_id ) { - $this->last_error = __( 'No PayPal order ID found in order meta.', 'woocommerce-paypal-payments' ); + $this->logger->warning( "No PayPal order ID found in order #{$wc_order->get_id()} meta." ); + $this->last_error = __( 'Could not retrieve PayPal order.', 'woocommerce-paypal-payments' ); return false; } From e6ef177a65b36bc0f22e8f1ac25a2695a80dbbaf Mon Sep 17 00:00:00 2001 From: emilicastells Date: Tue, 29 Nov 2022 11:01:03 +0100 Subject: [PATCH 4/7] Fix phpunit --- tests/PHPUnit/ApiClient/Endpoint/OrderEndpointTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/PHPUnit/ApiClient/Endpoint/OrderEndpointTest.php b/tests/PHPUnit/ApiClient/Endpoint/OrderEndpointTest.php index 4052febd2..e9ad0393d 100644 --- a/tests/PHPUnit/ApiClient/Endpoint/OrderEndpointTest.php +++ b/tests/PHPUnit/ApiClient/Endpoint/OrderEndpointTest.php @@ -125,7 +125,7 @@ class OrderEndpointTest extends TestCase $patchCollectionFactory = Mockery::mock(PatchCollectionFactory::class); $intent = 'CAPTURE'; $logger = Mockery::mock(LoggerInterface::class); - $logger->shouldReceive('log'); + $logger->shouldReceive('warning'); $logger->shouldReceive('debug'); $applicationContextRepository = Mockery::mock(ApplicationContextRepository::class); $paypalRequestIdRepository = Mockery::mock(PayPalRequestIdRepository::class); From 2ade2487047d256bc59c6d89712fc0441560863a Mon Sep 17 00:00:00 2001 From: emilicastells Date: Tue, 29 Nov 2022 11:12:14 +0100 Subject: [PATCH 5/7] Fix phpcs --- modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php b/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php index 7b28e8bdb..846630df2 100644 --- a/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php +++ b/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php @@ -443,7 +443,7 @@ class OrderEndpoint { $error = new RuntimeException( __( 'Could not retrieve order.', 'woocommerce-paypal-payments' ) ); - $this->logger->warning($error->getMessage()); + $this->logger->warning( $error->getMessage() ); throw $error; } From b6d483ac6d2f33a4295d1256bd0fe266bc579fd4 Mon Sep 17 00:00:00 2001 From: emilicastells Date: Mon, 5 Dec 2022 11:21:05 +0100 Subject: [PATCH 6/7] Update error message --- modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php index 48031f81b..bbb2f11be 100644 --- a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php +++ b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php @@ -168,7 +168,7 @@ class OrderProcessor { $order_id = $wc_order->get_meta( PayPalGateway::ORDER_ID_META_KEY ); if ( ! $order_id ) { $this->logger->warning( "No PayPal order ID found in order #{$wc_order->get_id()} meta." ); - $this->last_error = __( 'Could not retrieve PayPal order.', 'woocommerce-paypal-payments' ); + $this->last_error = __( 'Could not retrieve order. This browser may not be supported. Please try again with a different browser.', 'woocommerce-paypal-payments' ); return false; } From 19735af651034efdfc5468c509405e268944473c Mon Sep 17 00:00:00 2001 From: emilicastells Date: Thu, 8 Dec 2022 11:09:06 +0100 Subject: [PATCH 7/7] Fix typo in log order id display --- modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php index bbb2f11be..ce8d48583 100644 --- a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php +++ b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php @@ -167,7 +167,12 @@ class OrderProcessor { if ( ! $order ) { $order_id = $wc_order->get_meta( PayPalGateway::ORDER_ID_META_KEY ); if ( ! $order_id ) { - $this->logger->warning( "No PayPal order ID found in order #{$wc_order->get_id()} meta." ); + $this->logger->warning( + sprintf( + 'No PayPal order ID found in order #%d meta.', + $wc_order->get_id() + ) + ); $this->last_error = __( 'Could not retrieve order. This browser may not be supported. Please try again with a different browser.', 'woocommerce-paypal-payments' ); return false; }