diff --git a/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php b/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php index c01070654..b12d1a025 100644 --- a/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php +++ b/modules/ppcp-api-client/src/Endpoint/OrderEndpoint.php @@ -226,7 +226,7 @@ class OrderEndpoint { 'application_context' => $this->application_context_repository ->current_context( $shipping_preference )->to_array(), ); - if ( $payer ) { + if ( $payer && ! empty( $payer->email_address() ) && ! empty( $payer->name() ) ) { $data['payer'] = $payer->to_array(); } if ( $payment_token ) { @@ -235,6 +235,11 @@ class OrderEndpoint { if ( $payment_method ) { $data['payment_method'] = $payment_method->to_array(); } + + /** + * The filter can be used to modify the order creation request body data. + */ + $data = apply_filters( 'ppcp_create_order_request_body_data', $data ); $url = trailingslashit( $this->host ) . 'v2/checkout/orders'; $args = array( 'method' => 'POST', diff --git a/modules/ppcp-onboarding/src/Render/OnboardingRenderer.php b/modules/ppcp-onboarding/src/Render/OnboardingRenderer.php index 9d2f6957b..95c0c46a4 100644 --- a/modules/ppcp-onboarding/src/Render/OnboardingRenderer.php +++ b/modules/ppcp-onboarding/src/Render/OnboardingRenderer.php @@ -107,9 +107,11 @@ class OnboardingRenderer { $is_production ? 'production' : 'sandbox' ); } catch ( RuntimeException $exception ) { - esc_html_e( - 'We could not properly connect to PayPal. Please reload the page to continue', - 'woocommerce-paypal-payments' + echo esc_html( + __( + 'We could not properly connect to PayPal. Try reloading the page.', + 'woocommerce-paypal-payments' + ) . " {$exception->getMessage()} {$exception->getFile()}:{$exception->getLine()}" ); } } diff --git a/modules/ppcp-wc-gateway/extensions.php b/modules/ppcp-wc-gateway/extensions.php index ef4f614f5..d49e856ee 100644 --- a/modules/ppcp-wc-gateway/extensions.php +++ b/modules/ppcp-wc-gateway/extensions.php @@ -88,8 +88,7 @@ return array( ); }, 'woocommerce.logger.woocommerce' => function ( ContainerInterface $container ): LoggerInterface { - $settings = $container->get( 'wcgateway.settings' ); - if ( ! function_exists( 'wc_get_logger' ) || ! $settings->has( 'logging_enabled' ) || ! $settings->get( 'logging_enabled' ) ) { + if ( ! function_exists( 'wc_get_logger' ) || ! $container->get( 'wcgateway.logging.is-enabled' ) ) { return new NullLogger(); } diff --git a/modules/ppcp-wc-gateway/services.php b/modules/ppcp-wc-gateway/services.php index 6e31cadac..45c3270c2 100644 --- a/modules/ppcp-wc-gateway/services.php +++ b/modules/ppcp-wc-gateway/services.php @@ -2133,4 +2133,16 @@ return array( $container->get( 'wcgateway.settings' ) ); }, + + 'wcgateway.logging.is-enabled' => function ( ContainerInterface $container ) : bool { + $settings = $container->get( 'wcgateway.settings' ); + + /** + * Whether the logging of the plugin errors/events is enabled. + */ + return apply_filters( + 'woocommerce_paypal_payments_is_logging_enabled', + $settings->has( 'logging_enabled' ) && $settings->get( 'logging_enabled' ) + ); + }, ); diff --git a/tests/PHPUnit/ApiClient/Endpoint/OrderEndpointTest.php b/tests/PHPUnit/ApiClient/Endpoint/OrderEndpointTest.php index 771fcff58..d24087925 100644 --- a/tests/PHPUnit/ApiClient/Endpoint/OrderEndpointTest.php +++ b/tests/PHPUnit/ApiClient/Endpoint/OrderEndpointTest.php @@ -14,6 +14,7 @@ use WooCommerce\PayPalCommerce\ApiClient\Entity\Order; use WooCommerce\PayPalCommerce\ApiClient\Entity\OrderStatus; use WooCommerce\PayPalCommerce\ApiClient\Entity\PatchCollection; use WooCommerce\PayPalCommerce\ApiClient\Entity\Payer; +use WooCommerce\PayPalCommerce\ApiClient\Entity\PayerName; use WooCommerce\PayPalCommerce\ApiClient\Entity\Payments; use WooCommerce\PayPalCommerce\ApiClient\Entity\PurchaseUnit; use WooCommerce\PayPalCommerce\ApiClient\Entity\Shipping; @@ -945,7 +946,13 @@ class OrderEndpointTest extends TestCase ); expect('is_wp_error')->with($rawResponse)->andReturn(false); expect('wp_remote_retrieve_response_code')->with($rawResponse)->andReturn(201); - $result = $testee->create([$purchaseUnit]); + + $payer = Mockery::mock(Payer::class); + $payer + ->expects('email_address') + ->andReturn(''); + + $result = $testee->create([$purchaseUnit], $payer); $this->assertEquals($expectedOrder, $result); } @@ -1038,6 +1045,9 @@ class OrderEndpointTest extends TestCase expect('wp_remote_retrieve_response_code')->with($rawResponse)->andReturn(201); $payer = Mockery::mock(Payer::class); + $payer->expects('email_address')->andReturn('email@email.com'); + $payerName = Mockery::mock(PayerName::class); + $payer->expects('name')->andReturn($payerName); $payer->expects('to_array')->andReturn(['payer']); $result = $testee->create([$purchaseUnit], $payer); $this->assertEquals($expectedOrder, $result); @@ -1125,7 +1135,13 @@ class OrderEndpointTest extends TestCase ); expect('is_wp_error')->with($rawResponse)->andReturn(true); $this->expectException(RuntimeException::class); - $testee->create([$purchaseUnit]); + + $payer = Mockery::mock(Payer::class); + $payer->expects('email_address')->andReturn('email@email.com'); + $payerName = Mockery::mock(PayerName::class); + $payer->expects('name')->andReturn($payerName); + $payer->expects('to_array')->andReturn(['payer']); + $testee->create([$purchaseUnit], $payer); } public function testCreateForPurchaseUnitsIsNot201() @@ -1211,6 +1227,11 @@ class OrderEndpointTest extends TestCase expect('is_wp_error')->with($rawResponse)->andReturn(false); expect('wp_remote_retrieve_response_code')->with($rawResponse)->andReturn(500); $this->expectException(RuntimeException::class); - $testee->create([$purchaseUnit]); + $payer = Mockery::mock(Payer::class); + $payer->expects('email_address')->andReturn('email@email.com'); + $payerName = Mockery::mock(PayerName::class); + $payer->expects('name')->andReturn($payerName); + $payer->expects('to_array')->andReturn(['payer']); + $testee->create([$purchaseUnit], $payer); } }