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();