From f6d07d9225085d12304870bc3e34e83619179d87 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Fri, 24 May 2024 17:13:43 +0200 Subject: [PATCH 01/11] Adding frontend logger (WIP) --- modules/ppcp-axo/resources/js/AxoManager.js | 17 +++++ modules/ppcp-axo/services.php | 6 ++ modules/ppcp-axo/src/Assets/AxoManager.php | 7 +++ modules/ppcp-axo/src/AxoModule.php | 10 +++ .../ppcp-axo/src/FrontendLoggerEndpoint.php | 63 +++++++++++++++++++ 5 files changed, 103 insertions(+) create mode 100644 modules/ppcp-axo/src/FrontendLoggerEndpoint.php diff --git a/modules/ppcp-axo/resources/js/AxoManager.js b/modules/ppcp-axo/resources/js/AxoManager.js index a6672d83e..11605dbd6 100644 --- a/modules/ppcp-axo/resources/js/AxoManager.js +++ b/modules/ppcp-axo/resources/js/AxoManager.js @@ -88,6 +88,20 @@ class AxoManager { this.triggerGatewayChange(); } + async log(message, level = 'info') { + await fetch(axoConfig.ajax.frontend_logger.endpoint, { + method: 'POST', + credentials: 'same-origin', + body: JSON.stringify({ + nonce: axoConfig.ajax.frontend_logger.nonce, + log: { + message, + level, + } + }) + }); + } + registerEventHandlers() { this.$(document).on('change', 'input[name=payment_method]', (ev) => { @@ -697,6 +711,8 @@ class AxoManager { this.ensureBillingPhoneNumber(data); + this.log(`Ryan flow - submitted nonce: ${this.data.card.id}` ) + this.submit(this.data.card.id, data); } else { // Gary flow @@ -706,6 +722,7 @@ class AxoManager { this.cardComponent.getPaymentToken( this.tokenizeData() ).then((response) => { + this.log(`Gary flow - submitted nonce: ${response.id}` ) this.submit(response.id); }); } catch (e) { diff --git a/modules/ppcp-axo/services.php b/modules/ppcp-axo/services.php index ffed3f1e2..8af3df17d 100644 --- a/modules/ppcp-axo/services.php +++ b/modules/ppcp-axo/services.php @@ -225,4 +225,10 @@ return array( return '

' . $notice_content . '

'; }, + 'axo.endpoint.frontend-logger' => static function (ContainerInterface $container): FrontendLoggerEndpoint { + return new FrontendLoggerEndpoint( + $container->get( 'button.request-data' ), + $container->get( 'woocommerce.logger.woocommerce' ) + ); + }, ); diff --git a/modules/ppcp-axo/src/Assets/AxoManager.php b/modules/ppcp-axo/src/Assets/AxoManager.php index 24b574975..4e75f56fa 100644 --- a/modules/ppcp-axo/src/Assets/AxoManager.php +++ b/modules/ppcp-axo/src/Assets/AxoManager.php @@ -10,6 +10,7 @@ declare(strict_types=1); namespace WooCommerce\PayPalCommerce\Axo\Assets; use Psr\Log\LoggerInterface; +use WooCommerce\PayPalCommerce\Axo\FrontendLoggerEndpoint; use WooCommerce\PayPalCommerce\Onboarding\Environment; use WooCommerce\PayPalCommerce\Session\SessionHandler; use WooCommerce\PayPalCommerce\WcGateway\Helper\SettingsStatus; @@ -209,6 +210,12 @@ class AxoManager { ), 'icons_directory' => esc_url( $this->wcgateway_module_url ) . 'assets/images/axo/', 'module_url' => untrailingslashit( $this->module_url ), + 'ajax' => array( + 'frontend_logger' => array( + 'endpoint' => \WC_AJAX::get_endpoint( FrontendLoggerEndpoint::ENDPOINT ), + 'nonce' => wp_create_nonce( FrontendLoggerEndpoint::nonce() ), + ), + ), ); } diff --git a/modules/ppcp-axo/src/AxoModule.php b/modules/ppcp-axo/src/AxoModule.php index 3770117c6..7a10c34ad 100644 --- a/modules/ppcp-axo/src/AxoModule.php +++ b/modules/ppcp-axo/src/AxoModule.php @@ -239,6 +239,16 @@ class AxoModule implements ModuleInterface { 1 ); + add_action( + 'wc_ajax_' . FrontendLoggerEndpoint::ENDPOINT, + static function () use ( $c ) { + $endpoint = $c->get( 'axo.endpoint.frontend-logger' ); + assert( $endpoint instanceof FrontendLoggerEndpoint ); + + $endpoint->handle_request(); + } + ); + // Add the markup necessary for displaying overlays and loaders for Axo on the checkout page. $this->add_checkout_loader_markup( $c ); } diff --git a/modules/ppcp-axo/src/FrontendLoggerEndpoint.php b/modules/ppcp-axo/src/FrontendLoggerEndpoint.php new file mode 100644 index 000000000..34f8096f3 --- /dev/null +++ b/modules/ppcp-axo/src/FrontendLoggerEndpoint.php @@ -0,0 +1,63 @@ +request_data = $request_data; + $this->logger = $logger; + } + + /** + * Returns the nonce. + * + * @return string + */ + public static function nonce(): string { + return self::ENDPOINT; + } + + /** + * Handles the request. + * + * @return bool + * @throws Exception On Error. + */ + public function handle_request(): bool { + $data = $this->request_data->read_request( $this->nonce() ); + + $this->logger->info("[AXO] " . $data['log']['message']); + + wp_send_json_success(); + return true; + } +} From cb190796ed25057b9116d98a4407dd037dbbd065 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Mon, 27 May 2024 12:21:38 +0200 Subject: [PATCH 02/11] Add error logs --- modules/ppcp-axo/resources/js/AxoManager.js | 42 ++++++++++++------- .../ppcp-axo/src/FrontendLoggerEndpoint.php | 23 ++++++++-- 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/modules/ppcp-axo/resources/js/AxoManager.js b/modules/ppcp-axo/resources/js/AxoManager.js index 11605dbd6..6659fbb2c 100644 --- a/modules/ppcp-axo/resources/js/AxoManager.js +++ b/modules/ppcp-axo/resources/js/AxoManager.js @@ -88,20 +88,6 @@ class AxoManager { this.triggerGatewayChange(); } - async log(message, level = 'info') { - await fetch(axoConfig.ajax.frontend_logger.endpoint, { - method: 'POST', - credentials: 'same-origin', - body: JSON.stringify({ - nonce: axoConfig.ajax.frontend_logger.nonce, - log: { - message, - level, - } - }) - }); - } - registerEventHandlers() { this.$(document).on('change', 'input[name=payment_method]', (ev) => { @@ -590,6 +576,8 @@ class AxoManager { async lookupCustomerByEmail() { const lookupResponse = await this.fastlane.identity.lookupCustomerByEmail(this.emailInput.value); + await this.log(`lookupCustomerByEmail: ${JSON.stringify(lookupResponse)}`); + if (lookupResponse.customerContextId) { // Email is associated with a Connect profile or a PayPal member. // Authenticate the customer to get access to their profile. @@ -598,6 +586,7 @@ class AxoManager { const authResponse = await this.fastlane.identity.triggerAuthenticationFlow(lookupResponse.customerContextId); log('AuthResponse', authResponse); + await this.log(`triggerAuthenticationFlow: ${JSON.stringify(authResponse)}`); if (authResponse.authenticationState === 'succeeded') { log(JSON.stringify(authResponse)); @@ -728,6 +717,7 @@ class AxoManager { } catch (e) { log('Error tokenizing.'); alert('Error tokenizing data.'); + this.log(`Error tokenizing data. ${e.message}`, 'error'); } } } @@ -807,7 +797,10 @@ class AxoManager { scrollTop: $notices.offset().top }, 500); } + console.error('Failure:', responseData); + this.log(`Error sending checkout form. ${responseData}`, 'error'); + this.hideLoading(); return; } @@ -817,6 +810,8 @@ class AxoManager { }) .catch(error => { console.error('Error:', error); + this.log(`Error sending checkout form. ${error.message}`, 'error'); + this.hideLoading(); }); @@ -893,6 +888,25 @@ class AxoManager { watermarkLoader.classList.toggle(loaderClass); } } + + async log(message, level = 'info') { + const endpoint = this.axoConfig?.ajax?.frontend_logger?.endpoint; + if(!endpoint) { + return; + } + + await fetch(endpoint, { + method: 'POST', + credentials: 'same-origin', + body: JSON.stringify({ + nonce: this.axoConfig.ajax.frontend_logger.nonce, + log: { + message, + level, + } + }) + }); + } } export default AxoManager; diff --git a/modules/ppcp-axo/src/FrontendLoggerEndpoint.php b/modules/ppcp-axo/src/FrontendLoggerEndpoint.php index 34f8096f3..ad7f01375 100644 --- a/modules/ppcp-axo/src/FrontendLoggerEndpoint.php +++ b/modules/ppcp-axo/src/FrontendLoggerEndpoint.php @@ -14,6 +14,9 @@ use Psr\Log\LoggerInterface; use WooCommerce\PayPalCommerce\Button\Endpoint\EndpointInterface; use WooCommerce\PayPalCommerce\Button\Endpoint\RequestData; +/** + * Class FrontendLoggerEndpoint + */ class FrontendLoggerEndpoint implements EndpointInterface { const ENDPOINT = 'ppc-frontend-logger'; @@ -32,9 +35,15 @@ class FrontendLoggerEndpoint implements EndpointInterface { */ private $logger; - public function __construct(RequestData $request_data, LoggerInterface $logger){ + /** + * FrontendLoggerEndpoint constructor. + * + * @param RequestData $request_data The request data helper. + * @param LoggerInterface $logger The logger. + */ + public function __construct( RequestData $request_data, LoggerInterface $logger ) { $this->request_data = $request_data; - $this->logger = $logger; + $this->logger = $logger; } /** @@ -54,8 +63,16 @@ class FrontendLoggerEndpoint implements EndpointInterface { */ public function handle_request(): bool { $data = $this->request_data->read_request( $this->nonce() ); + $level = $data['log']['level'] ?? 'info'; - $this->logger->info("[AXO] " . $data['log']['message']); + switch ( $level ) { + case 'error': + $this->logger->error( '[AXO] ' . esc_html( $data['log']['message'] ) ); + break; + default: + $this->logger->info( '[AXO] ' . esc_html( $data['log']['message'] ) ); + break; + } wp_send_json_success(); return true; From 90397b5dbd783fc108a16c20d1bc8dba15afff1b Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Mon, 27 May 2024 13:04:14 +0200 Subject: [PATCH 03/11] Fix phpcs --- modules/ppcp-axo/services.php | 2 +- modules/ppcp-axo/src/FrontendLoggerEndpoint.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-axo/services.php b/modules/ppcp-axo/services.php index 8af3df17d..0020169a7 100644 --- a/modules/ppcp-axo/services.php +++ b/modules/ppcp-axo/services.php @@ -225,7 +225,7 @@ return array( return '

' . $notice_content . '

'; }, - 'axo.endpoint.frontend-logger' => static function (ContainerInterface $container): FrontendLoggerEndpoint { + 'axo.endpoint.frontend-logger' => static function ( ContainerInterface $container ): FrontendLoggerEndpoint { return new FrontendLoggerEndpoint( $container->get( 'button.request-data' ), $container->get( 'woocommerce.logger.woocommerce' ) diff --git a/modules/ppcp-axo/src/FrontendLoggerEndpoint.php b/modules/ppcp-axo/src/FrontendLoggerEndpoint.php index ad7f01375..2623051f8 100644 --- a/modules/ppcp-axo/src/FrontendLoggerEndpoint.php +++ b/modules/ppcp-axo/src/FrontendLoggerEndpoint.php @@ -38,7 +38,7 @@ class FrontendLoggerEndpoint implements EndpointInterface { /** * FrontendLoggerEndpoint constructor. * - * @param RequestData $request_data The request data helper. + * @param RequestData $request_data The request data helper. * @param LoggerInterface $logger The logger. */ public function __construct( RequestData $request_data, LoggerInterface $logger ) { @@ -62,7 +62,7 @@ class FrontendLoggerEndpoint implements EndpointInterface { * @throws Exception On Error. */ public function handle_request(): bool { - $data = $this->request_data->read_request( $this->nonce() ); + $data = $this->request_data->read_request( $this->nonce() ); $level = $data['log']['level'] ?? 'info'; switch ( $level ) { From 802c13cf8e95962f0127fad2dbe9394c53ac18f7 Mon Sep 17 00:00:00 2001 From: Narek Zakarian Date: Mon, 27 May 2024 17:46:02 +0400 Subject: [PATCH 04/11] Enable the Shipping Callback handlers --- .../ppcp-button/resources/js/modules/Renderer/Renderer.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-button/resources/js/modules/Renderer/Renderer.js b/modules/ppcp-button/resources/js/modules/Renderer/Renderer.js index d7de31ec8..895a7845b 100644 --- a/modules/ppcp-button/resources/js/modules/Renderer/Renderer.js +++ b/modules/ppcp-button/resources/js/modules/Renderer/Renderer.js @@ -102,10 +102,10 @@ class Renderer { }, }; - // Check the condition and add the onShippingOptionsChange handler if needed + // Check the condition and add the handler if needed if (this.shouldHandleShippingInPaypal(venmoButtonClicked)) { - options.onShippingOptionsChange = (data, actions) => null; - options.onShippingAddressChange = (data, actions) => null; + options.onShippingOptionsChange = (data, actions) => handleShippingOptionsChange(data, actions, this.defaultSettings); + options.onShippingAddressChange = (data, actions) => handleShippingAddressChange(data, actions, this.defaultSettings); } return options; From 286be5724fc8d21e97ff6ec5fbf59631f062b6c5 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Mon, 27 May 2024 15:59:52 +0200 Subject: [PATCH 05/11] Update changelog --- changelog.txt | 1 + readme.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/changelog.txt b/changelog.txt index 1b680e746..31875da81 100644 --- a/changelog.txt +++ b/changelog.txt @@ -9,6 +9,7 @@ * Fix - Allow shipping callback and skipping confirmation page from any express button #2236 * Fix - Pay Later messaging configurator sometimes displays old settings after saving #2249 * Fix - Update the apple-developer-merchantid-domain-association validation strings for Apple Pay #2251 +* Fix - Enable the Shipping Callback handlers #2266 * Enhancement - Use admin theme color #1602 = 2.7.0 - 2024-04-30 = diff --git a/readme.txt b/readme.txt index ff494fa80..771a68552 100644 --- a/readme.txt +++ b/readme.txt @@ -188,6 +188,7 @@ If you encounter issues with the PayPal buttons not appearing after an update, p * Fix - Allow shipping callback and skipping confirmation page from any express button #2236 * Fix - Pay Later messaging configurator sometimes displays old settings after saving #2249 * Fix - Update the apple-developer-merchantid-domain-association validation strings for Apple Pay #2251 +* Fix - Enable the Shipping Callback handlers #2266 * Enhancement - Use admin theme color #1602 = 2.7.0 - 2024-04-30 = From 63300d941298b6f3e5da383258b8fb2fdc8a14e2 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 27 May 2024 16:41:37 +0200 Subject: [PATCH 06/11] Change error message to standard WooCommerce copy --- .../ppcp-wc-gateway/src/Processor/OrderProcessor.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php index d2b145b0b..4d1363361 100644 --- a/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php +++ b/modules/ppcp-wc-gateway/src/Processor/OrderProcessor.php @@ -220,9 +220,14 @@ class OrderProcessor { ); throw new PayPalOrderMissingException( - __( - 'Could not retrieve order. Maybe it was already completed or this browser is not supported. Please check your email or try again with a different browser.', - 'woocommerce-paypal-payments' + sprintf( + // translators: %s: Order history URL on My Account section. + esc_attr__( + 'There was an error processing your order. Please check for any charges in your payment method and review your order history before placing the order again.', + // phpcs:ignore WordPress.WP.I18n.TextDomainMismatch -- Intentionally "woocommerce" to reflect the original message. + 'woocommerce' + ), + esc_url( wc_get_account_endpoint_url( 'orders' ) ) ) ); } From 94259b6bcae2472b49b92f73c1f97de4dc3d50f3 Mon Sep 17 00:00:00 2001 From: Philipp Stracker Date: Mon, 27 May 2024 18:28:05 +0200 Subject: [PATCH 07/11] Fix asset URL double-slash in PayLater settings Refactored service return value to align with plugin-wide convention: unslashed folder path with slash-prefixed relative file path. --- modules/ppcp-paylater-configurator/services.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/ppcp-paylater-configurator/services.php b/modules/ppcp-paylater-configurator/services.php index de282b4c1..8be798d24 100644 --- a/modules/ppcp-paylater-configurator/services.php +++ b/modules/ppcp-paylater-configurator/services.php @@ -17,12 +17,14 @@ use WooCommerce\PayPalCommerce\Vendor\Psr\Container\ContainerInterface; return array( 'paylater-configurator.url' => static function ( ContainerInterface $container ): string { /** + * The return value must not contain a trailing slash. + * * Cannot return false for this path. * * @psalm-suppress PossiblyFalseArgument */ return plugins_url( - '/modules/ppcp-paylater-configurator/', + '/modules/ppcp-paylater-configurator', dirname( realpath( __FILE__ ), 3 ) . '/woocommerce-paypal-payments.php' ); }, From 0cc4e1f9ceb3004c29a2e3be8844d448bbf7dbe4 Mon Sep 17 00:00:00 2001 From: Danae Millan Date: Wed, 29 May 2024 01:55:24 +0200 Subject: [PATCH 08/11] woorelease: Product version bump update --- changelog.txt | 2 +- readme.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/changelog.txt b/changelog.txt index 31875da81..3ca38e0e2 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,6 +1,6 @@ *** Changelog *** -= 2.7.1 - xxxx-xx-xx = += 2.7.1 - 2024-05-28 = * Fix - Ensure package tracking data is sent to original PayPal transaction #2180 * Fix - Set the 'Woo_PPCP' as a default value for data-partner-attribution-id #2188 * Fix - Allow PUI Gateway for refund processor #2192 diff --git a/readme.txt b/readme.txt index 771a68552..0c6bdbb1a 100644 --- a/readme.txt +++ b/readme.txt @@ -179,7 +179,7 @@ If you encounter issues with the PayPal buttons not appearing after an update, p == Changelog == -= 2.7.1 - xxxx-xx-xx = += 2.7.1 - 2024-05-28 = * Fix - Ensure package tracking data is sent to original PayPal transaction #2180 * Fix - Set the 'Woo_PPCP' as a default value for data-partner-attribution-id #2188 * Fix - Allow PUI Gateway for refund processor #2192 From 1524d03ba2b383ba413367d4eda2a7726ffad706 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Wed, 29 May 2024 14:53:58 +0200 Subject: [PATCH 09/11] Consolidate logging --- modules/ppcp-axo/resources/js/AxoManager.js | 72 ++++++------------- modules/ppcp-axo/resources/js/Helper/Debug.js | 26 ++++++- 2 files changed, 45 insertions(+), 53 deletions(-) diff --git a/modules/ppcp-axo/resources/js/AxoManager.js b/modules/ppcp-axo/resources/js/AxoManager.js index e868eb207..b93703ace 100644 --- a/modules/ppcp-axo/resources/js/AxoManager.js +++ b/modules/ppcp-axo/resources/js/AxoManager.js @@ -60,7 +60,6 @@ class AxoManager { } document.axoDebugObject = () => { - console.log(this); return this; } @@ -166,9 +165,8 @@ class AxoManager { this.$('form.woocommerce-checkout input').on('keydown', async (ev) => { if(ev.key === 'Enter' && getCurrentPaymentMethod() === 'ppcp-axo-gateway' ) { ev.preventDefault(); - log('Enter key attempt'); - log('emailInput', this.emailInput.value); - log('this.lastEmailCheckedIdentity', this.lastEmailCheckedIdentity); + log(`Enter key attempt - emailInput: ${this.emailInput.value}`); + log(`this.lastEmailCheckedIdentity: ${this.lastEmailCheckedIdentity}`); if (this.emailInput && this.lastEmailCheckedIdentity !== this.emailInput.value) { await this.onChangeEmail(); } @@ -177,7 +175,7 @@ class AxoManager { // Clear last email checked identity when email field is focused. this.$('#billing_email_field input').on('focus', (ev) => { - log('Clear the last email checked:', this.lastEmailCheckedIdentity); + log(`Clear the last email checked: ${this.lastEmailCheckedIdentity}`); this.lastEmailCheckedIdentity = ''; }); @@ -214,7 +212,7 @@ class AxoManager { this.status.hasProfile ); - log('Scenario', scenario); + log(`Scenario: ${scenario}`); // Reset some elements to a default status. this.el.watermarkContainer.hide(); @@ -376,7 +374,7 @@ class AxoManager { setStatus(key, value) { this.status[key] = value; - log('Status updated', JSON.parse(JSON.stringify(this.status))); + log(`Status updated: ${JSON.parse(JSON.stringify(this.status))}`); document.dispatchEvent(new CustomEvent("axo_status_updated", {detail: this.status})); @@ -388,9 +386,8 @@ class AxoManager { this.initFastlane(); this.setStatus('active', true); - log('Attempt on activation'); - log('emailInput', this.emailInput.value); - log('this.lastEmailCheckedIdentity', this.lastEmailCheckedIdentity); + log(`Attempt on activation - emailInput: ${this.emailInput.value}`); + log(`this.lastEmailCheckedIdentity: ${this.lastEmailCheckedIdentity}`); if (this.emailInput && this.lastEmailCheckedIdentity !== this.emailInput.value) { this.onChangeEmail(); } @@ -512,17 +509,15 @@ class AxoManager { } else { this.emailInput.addEventListener('change', async ()=> { - log('Change event attempt'); - log('emailInput', this.emailInput.value); - log('this.lastEmailCheckedIdentity', this.lastEmailCheckedIdentity); + log(`Change event attempt - emailInput: ${this.emailInput.value}`); + log(`this.lastEmailCheckedIdentity: ${this.lastEmailCheckedIdentity}`); if (this.emailInput && this.lastEmailCheckedIdentity !== this.emailInput.value) { this.onChangeEmail(); } }); - log('Last, this.emailInput.value attempt'); - log('emailInput', this.emailInput.value); - log('this.lastEmailCheckedIdentity', this.lastEmailCheckedIdentity); + log(`Last, this.emailInput.value attempt - emailInput: ${this.emailInput.value}`); + log(`this.lastEmailCheckedIdentity: ${this.lastEmailCheckedIdentity}`); if (this.emailInput.value) { this.onChangeEmail(); } @@ -542,7 +537,7 @@ class AxoManager { return; } - log('Email changed: ' + (this.emailInput ? this.emailInput.value : '')); + log(`Email changed: ${this.emailInput ? this.emailInput.value : ''}`); this.$(this.el.paymentContainer.selector + '-detail').html(''); this.$(this.el.paymentContainer.selector + '-form').html(''); @@ -579,7 +574,7 @@ class AxoManager { async lookupCustomerByEmail() { const lookupResponse = await this.fastlane.identity.lookupCustomerByEmail(this.emailInput.value); - await this.log(`lookupCustomerByEmail: ${JSON.stringify(lookupResponse)}`); + log(`lookupCustomerByEmail: ${JSON.stringify(lookupResponse)}`); if (lookupResponse.customerContextId) { // Email is associated with a Connect profile or a PayPal member. @@ -588,12 +583,9 @@ class AxoManager { const authResponse = await this.fastlane.identity.triggerAuthenticationFlow(lookupResponse.customerContextId); - log('AuthResponse', authResponse); - await this.log(`triggerAuthenticationFlow: ${JSON.stringify(authResponse)}`); + log(`AuthResponse - triggerAuthenticationFlow: ${JSON.stringify(authResponse)}`); if (authResponse.authenticationState === 'succeeded') { - log(JSON.stringify(authResponse)); - const shippingData = authResponse.profileData.shippingAddress; if (shippingData) { this.setShipping(shippingData); @@ -700,7 +692,7 @@ class AxoManager { // TODO: validate data. if (this.data.card) { // Ryan flow - log('Ryan flow.'); + log('Starting Ryan flow.'); this.$('#ship-to-different-address-checkbox').prop('checked', 'checked'); @@ -711,24 +703,23 @@ class AxoManager { this.ensureBillingPhoneNumber(data); - this.log(`Ryan flow - submitted nonce: ${this.data.card.id}` ) + log(`Ryan flow - submitted nonce: ${this.data.card.id}` ) this.submit(this.data.card.id, data); } else { // Gary flow - log('Gary flow.'); + log('Starting Gary flow.'); try { this.cardComponent.getPaymentToken( this.tokenizeData() ).then((response) => { - this.log(`Gary flow - submitted nonce: ${response.id}` ) + log(`Gary flow - submitted nonce: ${response.id}` ) this.submit(response.id); }); } catch (e) { - log('Error tokenizing.'); alert('Error tokenizing data.'); - this.log(`Error tokenizing data. ${e.message}`, 'error'); + log(`Error tokenizing data. ${e.message}`, 'error'); } } } @@ -809,8 +800,7 @@ class AxoManager { }, 500); } - console.error('Failure:', responseData); - this.log(`Error sending checkout form. ${responseData}`, 'error'); + log(`Error sending checkout form. ${responseData}`, 'error'); this.hideLoading(); return; @@ -820,8 +810,7 @@ class AxoManager { } }) .catch(error => { - console.error('Error:', error); - this.log(`Error sending checkout form. ${error.message}`, 'error'); + log(`Error sending checkout form. ${error.message}`, 'error'); this.hideLoading(); }); @@ -899,25 +888,6 @@ class AxoManager { watermarkLoader.classList.toggle(loaderClass); } } - - async log(message, level = 'info') { - const endpoint = this.axoConfig?.ajax?.frontend_logger?.endpoint; - if(!endpoint) { - return; - } - - await fetch(endpoint, { - method: 'POST', - credentials: 'same-origin', - body: JSON.stringify({ - nonce: this.axoConfig.ajax.frontend_logger.nonce, - log: { - message, - level, - } - }) - }); - } } export default AxoManager; diff --git a/modules/ppcp-axo/resources/js/Helper/Debug.js b/modules/ppcp-axo/resources/js/Helper/Debug.js index e473d4a3b..8073c2683 100644 --- a/modules/ppcp-axo/resources/js/Helper/Debug.js +++ b/modules/ppcp-axo/resources/js/Helper/Debug.js @@ -1,4 +1,26 @@ +export function log(message, level = 'info') { + const endpoint = this.axoConfig?.ajax?.frontend_logger?.endpoint; + if(!endpoint) { + return; + } -export function log(...args) { - //console.log('[AXO] ', ...args); + fetch(endpoint, { + method: 'POST', + credentials: 'same-origin', + body: JSON.stringify({ + nonce: this.axoConfig.ajax.frontend_logger.nonce, + log: { + message, + level, + } + }) + }).then(() => { + switch (level) { + case 'error': + console.error(`[AXO] ${message}`); + break; + default: + console.log(`[AXO] ${message}`); + } + }); } From b3ffa1030d311283323556e7595b64b4046c46d1 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Wed, 29 May 2024 15:21:21 +0200 Subject: [PATCH 10/11] Fix stringify objects --- modules/ppcp-axo/resources/js/AxoManager.js | 4 ++-- modules/ppcp-axo/resources/js/Helper/Debug.js | 4 ++-- yarn.lock | 5 +++++ 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/ppcp-axo/resources/js/AxoManager.js b/modules/ppcp-axo/resources/js/AxoManager.js index b93703ace..960da7f26 100644 --- a/modules/ppcp-axo/resources/js/AxoManager.js +++ b/modules/ppcp-axo/resources/js/AxoManager.js @@ -212,7 +212,7 @@ class AxoManager { this.status.hasProfile ); - log(`Scenario: ${scenario}`); + log(`Scenario: ${JSON.stringify(scenario)}`); // Reset some elements to a default status. this.el.watermarkContainer.hide(); @@ -374,7 +374,7 @@ class AxoManager { setStatus(key, value) { this.status[key] = value; - log(`Status updated: ${JSON.parse(JSON.stringify(this.status))}`); + log(`Status updated: ${JSON.stringify(this.status)}`); document.dispatchEvent(new CustomEvent("axo_status_updated", {detail: this.status})); diff --git a/modules/ppcp-axo/resources/js/Helper/Debug.js b/modules/ppcp-axo/resources/js/Helper/Debug.js index 8073c2683..c08fa8087 100644 --- a/modules/ppcp-axo/resources/js/Helper/Debug.js +++ b/modules/ppcp-axo/resources/js/Helper/Debug.js @@ -1,5 +1,5 @@ export function log(message, level = 'info') { - const endpoint = this.axoConfig?.ajax?.frontend_logger?.endpoint; + const endpoint = window.wc_ppcp_axo?.ajax?.frontend_logger?.endpoint; if(!endpoint) { return; } @@ -8,7 +8,7 @@ export function log(message, level = 'info') { method: 'POST', credentials: 'same-origin', body: JSON.stringify({ - nonce: this.axoConfig.ajax.frontend_logger.nonce, + nonce: window.wc_ppcp_axo.ajax.frontend_logger.nonce, log: { message, level, diff --git a/yarn.lock b/yarn.lock index 722df19c5..81af54726 100644 --- a/yarn.lock +++ b/yarn.lock @@ -598,6 +598,11 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" From f08d6c089cfff30e08859624416a2eee78c30ec1 Mon Sep 17 00:00:00 2001 From: Emili Castells Guasch Date: Wed, 29 May 2024 15:28:37 +0200 Subject: [PATCH 11/11] Fix stringify objects --- modules/ppcp-axo/src/FrontendLoggerEndpoint.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/ppcp-axo/src/FrontendLoggerEndpoint.php b/modules/ppcp-axo/src/FrontendLoggerEndpoint.php index 2623051f8..e17a819e4 100644 --- a/modules/ppcp-axo/src/FrontendLoggerEndpoint.php +++ b/modules/ppcp-axo/src/FrontendLoggerEndpoint.php @@ -67,10 +67,10 @@ class FrontendLoggerEndpoint implements EndpointInterface { switch ( $level ) { case 'error': - $this->logger->error( '[AXO] ' . esc_html( $data['log']['message'] ) ); + $this->logger->error( '[AXO] ' . $data['log']['message'] ); break; default: - $this->logger->info( '[AXO] ' . esc_html( $data['log']['message'] ) ); + $this->logger->info( '[AXO] ' . $data['log']['message'] ); break; }