diff --git a/metadata/site_import/services.xml b/metadata/site_import/services.xml
index 97edaca9e..909a22506 100644
--- a/metadata/site_import/services.xml
+++ b/metadata/site_import/services.xml
@@ -110,6 +110,11 @@
+
+ https://checkoutanalytics-test.adyen.com/checkoutanalytics/v3/analytics
+
+
+
30000
@@ -228,4 +233,13 @@
Adyen
AdyenPaypalUpdateOrder
+
+ HTTP
+ true
+ adyen
+ true
+ false
+ Adyen
+ AdyenAnalytics
+
diff --git a/src/cartridges/int_adyen_SFRA/cartridge/adyen/config/constants.js b/src/cartridges/int_adyen_SFRA/cartridge/adyen/config/constants.js
index 1dc2edfcb..46f8fd389 100644
--- a/src/cartridges/int_adyen_SFRA/cartridge/adyen/config/constants.js
+++ b/src/cartridges/int_adyen_SFRA/cartridge/adyen/config/constants.js
@@ -49,6 +49,7 @@ module.exports = {
CANCELPARTIALPAYMENTORDER: 'AdyenCancelPartialPaymentOrder',
PARTIALPAYMENTSORDER: 'AdyenPartialPaymentsOrder',
PAYPALUPDATEORDER: 'AdyenPaypalUpdateOrder',
+ ADYEN_ANALYTICS: 'AdyenAnalytics',
},
CONTRACT: {
ONECLICK: 'ONECLICK',
diff --git a/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/analytics/analyticsService.js b/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/analytics/analyticsService.js
new file mode 100644
index 000000000..3b01238af
--- /dev/null
+++ b/src/cartridges/int_adyen_SFRA/cartridge/adyen/scripts/analytics/analyticsService.js
@@ -0,0 +1,71 @@
+const AdyenHelper = require('*/cartridge/adyen/utils/adyenHelper');
+const constants = require('*/cartridge/adyen/config/constants');
+const AdyenLogs = require('*/cartridge/adyen/logs/adyenCustomLogs');
+
+function createCheckoutAttemptId() {
+ try {
+ const analyticsResponse = {};
+ const requestObject = {
+ applicationInfo: AdyenHelper.getApplicationInfo(),
+ channel: 'Web',
+ platform: 'Web',
+ };
+
+ const response = AdyenHelper.executeCall(
+ constants.SERVICE.ADYEN_ANALYTICS,
+ requestObject,
+ );
+
+ analyticsResponse.attemptId = response.checkoutAttemptId;
+
+ return analyticsResponse;
+ } catch (error) {
+ AdyenLogs.error_log(
+ 'createCheckoutAttemptId for /analytics call failed:',
+ error,
+ );
+ return { error: true };
+ }
+}
+
+function submitData(attemptIdParam = null) {
+ try {
+ let attemptId = attemptIdParam;
+
+ // If attemptId is not provided as a parameter, generate it
+ if (!attemptId) {
+ const initialAnalyticsCall = createCheckoutAttemptId();
+ attemptId = initialAnalyticsCall.attemptId;
+ }
+
+ const requestObject = {
+ channel: 'Web',
+ platform: 'Web',
+ info: [
+ {
+ timestamp: '1679314125207',
+ type: 'focus',
+ component: 'scheme',
+ target: 'security_code',
+ id: 'cfea6b0a-7f19-4c31-b065-8d44ea3fdf63',
+ },
+ ],
+ };
+
+ const response = AdyenHelper.executeCall(
+ constants.SERVICE.ADYEN_ANALYTICS,
+ requestObject,
+ attemptId,
+ );
+
+ return response;
+ } catch (error) {
+ AdyenLogs.error_log('submitData for /analytics call failed:', error);
+ return { error: true };
+ }
+}
+
+module.exports = {
+ createCheckoutAttemptId,
+ submitData,
+};
diff --git a/src/cartridges/int_adyen_SFRA/cartridge/adyen/utils/adyenHelper.js b/src/cartridges/int_adyen_SFRA/cartridge/adyen/utils/adyenHelper.js
index 45e6b4ca8..fd8a2d25e 100644
--- a/src/cartridges/int_adyen_SFRA/cartridge/adyen/utils/adyenHelper.js
+++ b/src/cartridges/int_adyen_SFRA/cartridge/adyen/utils/adyenHelper.js
@@ -924,7 +924,7 @@ let adyenHelperObj = {
}
},
- executeCall(serviceType, requestObject) {
+ executeCall(serviceType, requestObject, checkoutAttemptID = '') {
const service = this.getService(serviceType);
if (service === null) {
throw new Error(`Could not create ${serviceType} service object`);
@@ -936,6 +936,13 @@ let adyenHelperObj = {
service.setURL(serviceUrl);
}
+ if (serviceType === constants.SERVICE.ADYEN_ANALYTICS) {
+ const clientKey = AdyenConfigs.getAdyenClientKey();
+ let serviceUrl = service.getURL();
+ serviceUrl += `/${checkoutAttemptID}?clientKey=${clientKey}`;
+ service.setURL(serviceUrl);
+ }
+
const maxRetries = constants.MAX_API_RETRIES;
const apiKey = AdyenConfigs.getAdyenApiKey();
const uuid = UUIDUtils.createUUID();