From 2ad6df385cc09ce3f19d8561e3ed6adaef3dd48d Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Fri, 17 May 2024 00:25:05 +0400 Subject: [PATCH] Check for venmo and vaulting before creating wc order --- .../src/Endpoint/CreateOrderEndpoint.php | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php b/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php index 1ef06c3be..fbfb22309 100644 --- a/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php +++ b/modules/ppcp-button/src/Endpoint/CreateOrderEndpoint.php @@ -246,6 +246,7 @@ class CreateOrderEndpoint implements EndpointInterface { $this->parsed_request_data = $data; $payment_method = $data['payment_method'] ?? ''; $funding_source = $data['funding_source'] ?? ''; + $payment_source = $data['payment_source'] ?? ''; $wc_order = null; if ( 'pay-now' === $data['context'] ) { $wc_order = wc_get_order( (int) $data['order_id'] ); @@ -261,7 +262,7 @@ class CreateOrderEndpoint implements EndpointInterface { } $this->purchase_unit = $this->purchase_unit_factory->from_wc_order( $wc_order ); } else { - $this->purchase_unit = $this->purchase_unit_factory->from_wc_cart( null, $this->handle_shipping_in_paypal ); + $this->purchase_unit = $this->purchase_unit_factory->from_wc_cart( null, $this->should_handle_shipping_in_paypal( $payment_source ) ); // Do not allow completion by webhooks when started via non-checkout buttons, // it is needed only for some APMs in checkout. @@ -610,4 +611,20 @@ class CreateOrderEndpoint implements EndpointInterface { 'custom_id' => $order->purchase_units()[0]->custom_id(), ); } + + /** + * Checks if the shipping should be handled in PayPal popup. + * + * @param string $payment_source The payment source. + * @return bool true if the shipping should be handled in PayPal popup, otherwise false. + */ + protected function should_handle_shipping_in_paypal( string $payment_source ): bool { + $is_vaulting_enabled = $this->settings->has( 'vault_enabled' ) && $this->settings->get( 'vault_enabled' ); + + if ( ! $this->handle_shipping_in_paypal ) { + return false; + } + + return ! $is_vaulting_enabled || $payment_source !== 'venmo'; + } }