From ab0e90dab0d8eadb2b94678b4951e7acb57865ea Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Tue, 10 May 2022 18:46:40 +0400 Subject: [PATCH] Store order info in wc order meta to get if there is no session. --- .../js/modules/Renderer/CreditCardRenderer.js | 6 ------ .../src/Endpoint/CreateOrderEndpoint.php | 7 +++++++ .../src/Processor/OrderProcessor.php | 3 ++- .../WcGateway/Processor/OrderProcessorTest.php | 17 +++++++++++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) diff --git a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js index b06edf9bb..d87f82022 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js @@ -207,12 +207,6 @@ class CreditCardRenderer { const firstName = document.getElementById('billing_first_name') ? document.getElementById('billing_first_name').value : ''; const lastName = document.getElementById('billing_last_name') ? document.getElementById('billing_last_name').value : ''; - if (!firstName || !lastName) { - this.spinner.unblock(); - this.errorHandler.message(this.defaultConfig.hosted_fields.labels.cardholder_name_required); - return; - } - hostedFieldsData.cardholderName = firstName + ' ' + lastName; } diff --git a/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php b/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php index 89c5faa54..5dd2a14dc 100644 --- a/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php +++ b/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php @@ -242,6 +242,13 @@ class CreateOrderEndpoint implements EndpointInterface { } $order = $this->create_paypal_order( $wc_order ); + + if ( 'pay-now' === $data['context'] && is_a( $wc_order, \WC_Order::class ) ) { + $wc_order->update_meta_data( PayPalGateway::ORDER_ID_META_KEY, $order->id() ); + $wc_order->update_meta_data( PayPalGateway::INTENT_META_KEY, $order->intent() ); + $wc_order->save_meta_data(); + } + wp_send_json_success( $order->to_array() ); return true; diff --git a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php index 170cb50e8..b1d3358bd 100644 --- a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php +++ b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php @@ -150,7 +150,8 @@ class OrderProcessor { * @return bool */ public function process( \WC_Order $wc_order ): bool { - $order = $this->session_handler->order(); + $order_id = $wc_order->get_meta( PayPalGateway::ORDER_ID_META_KEY ); + $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; diff --git a/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php b/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php index e379a4fc1..ae051a68c 100644 --- a/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php +++ b/tests/PHPUnit/WcGateway/Processor/OrderProcessorTest.php @@ -89,6 +89,11 @@ class OrderProcessorTest extends TestCase ->shouldReceive('payment_source') ->andReturn(null); + $wcOrder + ->shouldReceive('get_meta') + ->with(PayPalGateway::ORDER_ID_META_KEY) + ->andReturn(1); + $sessionHandler = Mockery::mock(SessionHandler::class); $sessionHandler ->expects('order') @@ -208,6 +213,12 @@ class OrderProcessorTest extends TestCase $currentOrder ->shouldReceive('payment_source') ->andReturn(null); + + $wcOrder + ->shouldReceive('get_meta') + ->with(PayPalGateway::ORDER_ID_META_KEY) + ->andReturn(1); + $sessionHandler = Mockery::mock(SessionHandler::class); $sessionHandler ->expects('order') @@ -313,6 +324,12 @@ class OrderProcessorTest extends TestCase $currentOrder ->shouldReceive('purchase_units') ->andReturn([$purchaseUnit]); + + $wcOrder + ->shouldReceive('get_meta') + ->with(PayPalGateway::ORDER_ID_META_KEY) + ->andReturn(1); + $sessionHandler = Mockery::mock(SessionHandler::class); $sessionHandler ->expects('order')