diff --git a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js index 65e343ecb..e2c08a483 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js @@ -209,12 +209,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 f2e7b7be1..00a1fc3bd 100644 --- a/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php +++ b/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php @@ -243,6 +243,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')