From e1bdc642486f1ea9bc53aa972528fe1dd858177d Mon Sep 17 00:00:00 2001 From: Daniel Dudzic Date: Wed, 3 Jul 2024 12:29:29 +0200 Subject: [PATCH] Google Pay: Fix issuse with data.paymentSource being undefined and the shipping allowed boolean being hardcoded --- .../resources/js/checkout-block.js | 20 ++++++++++--------- .../resources/js/Context/BaseHandler.js | 3 ++- .../js/Context/CheckoutBlockHandler.js | 4 ---- .../resources/js/Context/CheckoutHandler.js | 4 ---- .../resources/js/Context/PayNowHandler.js | 4 ---- .../resources/js/GooglepayButton.js | 2 +- modules/ppcp-googlepay/src/Assets/Button.php | 1 + 7 files changed, 15 insertions(+), 23 deletions(-) diff --git a/modules/ppcp-blocks/resources/js/checkout-block.js b/modules/ppcp-blocks/resources/js/checkout-block.js index 10d035714..b17ba6030 100644 --- a/modules/ppcp-blocks/resources/js/checkout-block.js +++ b/modules/ppcp-blocks/resources/js/checkout-block.js @@ -87,18 +87,20 @@ const PayPalComponent = ({ const createOrder = async (data, actions) => { try { + const requestBody = { + nonce: config.scriptData.ajax.create_order.nonce, + bn_code: '', + context: config.scriptData.context, + payment_method: 'ppcp-gateway', + funding_source: window.ppcpFundingSource ?? 'paypal', + createaccount: false, + ...(data?.paymentSource && { payment_source: data.paymentSource }) + }; + const res = await fetch(config.scriptData.ajax.create_order.endpoint, { method: 'POST', credentials: 'same-origin', - body: JSON.stringify({ - nonce: config.scriptData.ajax.create_order.nonce, - bn_code: '', - context: config.scriptData.context, - payment_method: 'ppcp-gateway', - funding_source: window.ppcpFundingSource ?? 'paypal', - createaccount: false, - payment_source: data.paymentSource - }), + body: JSON.stringify(requestBody), }); const json = await res.json(); diff --git a/modules/ppcp-googlepay/resources/js/Context/BaseHandler.js b/modules/ppcp-googlepay/resources/js/Context/BaseHandler.js index fe0054f63..82ac834e8 100644 --- a/modules/ppcp-googlepay/resources/js/Context/BaseHandler.js +++ b/modules/ppcp-googlepay/resources/js/Context/BaseHandler.js @@ -18,7 +18,8 @@ class BaseHandler { } shippingAllowed() { - return true; + // Status of the shipping settings in WooCommerce. + return this.buttonConfig.shipping.configured; } transactionInfo() { diff --git a/modules/ppcp-googlepay/resources/js/Context/CheckoutBlockHandler.js b/modules/ppcp-googlepay/resources/js/Context/CheckoutBlockHandler.js index 3d24df9aa..9295c4302 100644 --- a/modules/ppcp-googlepay/resources/js/Context/CheckoutBlockHandler.js +++ b/modules/ppcp-googlepay/resources/js/Context/CheckoutBlockHandler.js @@ -2,10 +2,6 @@ import BaseHandler from "./BaseHandler"; class CheckoutBlockHandler extends BaseHandler{ - shippingAllowed() { - return false; - } - createOrder() { return this.externalHandler.createOrder(); } diff --git a/modules/ppcp-googlepay/resources/js/Context/CheckoutHandler.js b/modules/ppcp-googlepay/resources/js/Context/CheckoutHandler.js index 3f773a875..ed8323a60 100644 --- a/modules/ppcp-googlepay/resources/js/Context/CheckoutHandler.js +++ b/modules/ppcp-googlepay/resources/js/Context/CheckoutHandler.js @@ -6,10 +6,6 @@ import FormValidator from "../../../../ppcp-button/resources/js/modules/Helper/F class CheckoutHandler extends BaseHandler { - shippingAllowed() { - return false; - } - transactionInfo() { return new Promise(async (resolve, reject) => { diff --git a/modules/ppcp-googlepay/resources/js/Context/PayNowHandler.js b/modules/ppcp-googlepay/resources/js/Context/PayNowHandler.js index a580c4084..527b20339 100644 --- a/modules/ppcp-googlepay/resources/js/Context/PayNowHandler.js +++ b/modules/ppcp-googlepay/resources/js/Context/PayNowHandler.js @@ -12,10 +12,6 @@ class PayNowHandler extends BaseHandler { return true; } - shippingAllowed() { - return false; - } - transactionInfo() { return new Promise(async (resolve, reject) => { const data = this.ppcpConfig['pay_now']; diff --git a/modules/ppcp-googlepay/resources/js/GooglepayButton.js b/modules/ppcp-googlepay/resources/js/GooglepayButton.js index ea1387cea..b3ca0a935 100644 --- a/modules/ppcp-googlepay/resources/js/GooglepayButton.js +++ b/modules/ppcp-googlepay/resources/js/GooglepayButton.js @@ -279,7 +279,7 @@ class GooglepayButton { updatedData.total_str = transactionInfo.totalPrice; // Handle unserviceable address. - if(!updatedData.shipping_options || !updatedData.shipping_options.shippingOptions.length) { + if (!(updatedData.shipping_options?.shippingOptions?.length)) { paymentDataRequestUpdate.error = this.unserviceableShippingAddressError(); resolve(paymentDataRequestUpdate); return; diff --git a/modules/ppcp-googlepay/src/Assets/Button.php b/modules/ppcp-googlepay/src/Assets/Button.php index 8ad4163ab..6fab601b5 100644 --- a/modules/ppcp-googlepay/src/Assets/Button.php +++ b/modules/ppcp-googlepay/src/Assets/Button.php @@ -412,6 +412,7 @@ class Button implements ButtonInterface { 'enabled' => $this->settings->has( 'googlepay_button_shipping_enabled' ) ? boolval( $this->settings->get( 'googlepay_button_shipping_enabled' ) ) : false, + 'configured' => wc_shipping_enabled() && wc_get_shipping_method_count( false, true ) > 0, ); if ( $shipping['enabled'] ) {