From 1e646fa9544a0818d79eea5d5f5e48fe436dbf2e Mon Sep 17 00:00:00 2001 From: dinamiko Date: Wed, 24 Nov 2021 16:09:36 +0100 Subject: [PATCH 1/6] Ensure cardholder name when submit card fields --- .../js/modules/Renderer/CreditCardRenderer.js | 17 +++++++++++++++++ modules/ppcp-button/src/Assets/SmartButton.php | 1 + 2 files changed, 18 insertions(+) diff --git a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js index 72206247a..0769eed44 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js @@ -194,6 +194,23 @@ class CreditCardRenderer { if (contingency !== 'NO_3D_SECURE') { hostedFieldsData.contingencies = [contingency]; } + + if (this.defaultConfig.payer) { + hostedFieldsData.cardholderName = this.defaultConfig.payer.given_name + ' ' + this.defaultConfig.payer.surname; + } + if (!hostedFieldsData.cardholderName) { + const firstName = document.getElementById('foo_billing_first_name') ? document.getElementById('foo_billing_first_name').value : ''; + const last = 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; + } + this.currentHostedFieldsInstance.submit(hostedFieldsData).then((payload) => { payload.orderID = payload.orderId; this.spinner.unblock(); diff --git a/modules/ppcp-button/src/Assets/SmartButton.php b/modules/ppcp-button/src/Assets/SmartButton.php index 59d25a81f..582c27116 100644 --- a/modules/ppcp-button/src/Assets/SmartButton.php +++ b/modules/ppcp-button/src/Assets/SmartButton.php @@ -695,6 +695,7 @@ class SmartButton implements SmartButtonInterface { 'Unfortunately, we do not support your credit card.', 'woocommerce-paypal-payments' ), + 'cardholder_name_required' => __('Cardholder\'s first and last name required, please fill checkout form required fields.', 'woocommerce-paypal-payments'), ), 'valid_cards' => $this->dcc_applies->valid_cards(), 'contingency' => $this->get_3ds_contingency(), From 31f2e65bff16a194912d0174d4df765a3d5883c0 Mon Sep 17 00:00:00 2001 From: dinamiko Date: Wed, 24 Nov 2021 16:10:24 +0100 Subject: [PATCH 2/6] Fix typo in element id --- .../resources/js/modules/Renderer/CreditCardRenderer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js index 0769eed44..276344c98 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js @@ -199,7 +199,7 @@ class CreditCardRenderer { hostedFieldsData.cardholderName = this.defaultConfig.payer.given_name + ' ' + this.defaultConfig.payer.surname; } if (!hostedFieldsData.cardholderName) { - const firstName = document.getElementById('foo_billing_first_name') ? document.getElementById('foo_billing_first_name').value : ''; + const firstName = document.getElementById('billing_first_name') ? document.getElementById('billing_first_name').value : ''; const last = document.getElementById('billing_last_name') ? document.getElementById('billing_last_name').value : ''; if (!firstName || !lastName) { From 19b5c2e43754ddda4193410784d8f9f1802abd2f Mon Sep 17 00:00:00 2001 From: dinamiko Date: Thu, 25 Nov 2021 11:59:22 +0100 Subject: [PATCH 3/6] Check shipping name if billing does not exist --- .../resources/js/modules/Renderer/CreditCardRenderer.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js index 276344c98..977685fee 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js @@ -199,8 +199,12 @@ class CreditCardRenderer { hostedFieldsData.cardholderName = this.defaultConfig.payer.given_name + ' ' + this.defaultConfig.payer.surname; } if (!hostedFieldsData.cardholderName) { - const firstName = document.getElementById('billing_first_name') ? document.getElementById('billing_first_name').value : ''; - const last = document.getElementById('billing_last_name') ? document.getElementById('billing_last_name').value : ''; + const firstName = document.getElementById('billing_first_name') ? document.getElementById('billing_first_name').value + : document.getElementById('shipping_first_name') ? document.getElementById('shipping_first_name').value + : ''; + const lastName = document.getElementById('billing_last_name') ? document.getElementById('billing_last_name').value + : document.getElementById('shipping_last_name') ? document.getElementById('shipping_last_name').value + : ''; if (!firstName || !lastName) { this.spinner.unblock(); From cf3ba3f55c907df0681edafce7d548aa03cd2d76 Mon Sep 17 00:00:00 2001 From: dinamiko Date: Tue, 30 Nov 2021 11:11:02 +0100 Subject: [PATCH 4/6] Fix phpcs errors --- modules/ppcp-button/src/Assets/SmartButton.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/ppcp-button/src/Assets/SmartButton.php b/modules/ppcp-button/src/Assets/SmartButton.php index 582c27116..fa656bf4b 100644 --- a/modules/ppcp-button/src/Assets/SmartButton.php +++ b/modules/ppcp-button/src/Assets/SmartButton.php @@ -684,18 +684,18 @@ class SmartButton implements SmartButtonInterface { 'wrapper' => '#ppcp-hosted-fields', 'mini_cart_wrapper' => '#ppcp-hosted-fields-mini-cart', 'labels' => array( - 'credit_card_number' => '', - 'cvv' => '', - 'mm_yy' => __( 'MM/YY', 'woocommerce-paypal-payments' ), - 'fields_not_valid' => __( + 'credit_card_number' => '', + 'cvv' => '', + 'mm_yy' => __( 'MM/YY', 'woocommerce-paypal-payments' ), + 'fields_not_valid' => __( 'Unfortunately, your credit card details are not valid.', 'woocommerce-paypal-payments' ), - 'card_not_supported' => __( + 'card_not_supported' => __( 'Unfortunately, we do not support your credit card.', 'woocommerce-paypal-payments' ), - 'cardholder_name_required' => __('Cardholder\'s first and last name required, please fill checkout form required fields.', 'woocommerce-paypal-payments'), + 'cardholder_name_required' => __( 'Cardholder\'s first and last name required, please fill checkout form required fields.', 'woocommerce-paypal-payments' ), ), 'valid_cards' => $this->dcc_applies->valid_cards(), 'contingency' => $this->get_3ds_contingency(), From 26147791ab347956907703d13bb84d03c6a09d2a Mon Sep 17 00:00:00 2001 From: dinamiko Date: Tue, 30 Nov 2021 12:34:19 +0100 Subject: [PATCH 5/6] Remove getting shipping address as fallback for card holder name --- .../resources/js/modules/Renderer/CreditCardRenderer.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js index 977685fee..f732fe445 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/CreditCardRenderer.js @@ -199,12 +199,8 @@ class CreditCardRenderer { hostedFieldsData.cardholderName = this.defaultConfig.payer.given_name + ' ' + this.defaultConfig.payer.surname; } if (!hostedFieldsData.cardholderName) { - const firstName = document.getElementById('billing_first_name') ? document.getElementById('billing_first_name').value - : document.getElementById('shipping_first_name') ? document.getElementById('shipping_first_name').value - : ''; - const lastName = document.getElementById('billing_last_name') ? document.getElementById('billing_last_name').value - : document.getElementById('shipping_last_name') ? document.getElementById('shipping_last_name').value - : ''; + 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(); From aa61ab56ca491aa1b1fdcd3bb2279bafaa610e8e Mon Sep 17 00:00:00 2001 From: dinamiko Date: Tue, 30 Nov 2021 14:23:21 +0100 Subject: [PATCH 6/6] Improve required card holder name error message --- modules/ppcp-button/src/Assets/SmartButton.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ppcp-button/src/Assets/SmartButton.php b/modules/ppcp-button/src/Assets/SmartButton.php index fa656bf4b..850f006a9 100644 --- a/modules/ppcp-button/src/Assets/SmartButton.php +++ b/modules/ppcp-button/src/Assets/SmartButton.php @@ -695,7 +695,7 @@ class SmartButton implements SmartButtonInterface { 'Unfortunately, we do not support your credit card.', 'woocommerce-paypal-payments' ), - 'cardholder_name_required' => __( 'Cardholder\'s first and last name required, please fill checkout form required fields.', 'woocommerce-paypal-payments' ), + 'cardholder_name_required' => __( 'Cardholder\'s first and last name are required, please fill the checkout form required fields.', 'woocommerce-paypal-payments' ), ), 'valid_cards' => $this->dcc_applies->valid_cards(), 'contingency' => $this->get_3ds_contingency(),