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