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; + } +}