-
Notifications
You must be signed in to change notification settings - Fork 69
/
adyenSessions.js
127 lines (112 loc) · 4.86 KB
/
adyenSessions.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/**
* ######
* ######
* ############ ####( ###### #####. ###### ############ ############
* ############# #####( ###### #####. ###### ############# #############
* ###### #####( ###### #####. ###### ##### ###### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ##### ######
* ###### ###### #####( ###### #####. ###### ##### ##### ######
* ############# ############# ############# ############# ##### ######
* ############ ############ ############# ############ ##### ######
* ######
* #############
* ############
* Adyen Salesforce Commerce Cloud
* Copyright (c) 2022 Adyen N.V.
* This file is open source and available under the MIT license.
* See the LICENSE file for more info.
*
* Send request to adyen to create a checkout session
*/
// script include
const AdyenHelper = require('*/cartridge/scripts/util/adyenHelper');
const AdyenConfigs = require('*/cartridge/scripts/util/adyenConfigs');
const URLUtils = require('dw/web/URLUtils');
const AdyenGetOpenInvoiceData = require('*/cartridge/scripts/adyenGetOpenInvoiceData');
const RiskDataHelper = require('*/cartridge/scripts/util/riskDataHelper');
const adyenLevelTwoThreeData = require('*/cartridge/scripts/adyenLevelTwoThreeData');
const constants = require('*/cartridge/adyenConstants/constants');
const blockedPayments = require('*/cartridge/scripts/config/blockedPaymentMethods.json');
const AdyenLogs = require('*/cartridge/scripts/adyenCustomLogs');
function createSession(basket, customer, countryCode) {
try {
let sessionsRequest = {};
// There is no basket for myAccount session requests
if(basket) {
const getRemainingAmount = (giftCardResponse) => {
if (giftCardResponse && JSON.parse(giftCardResponse).remainingAmount) {
return JSON.parse(giftCardResponse).remainingAmount;
}
return {
currency: basket.currencyCode,
value: AdyenHelper.getCurrencyValueForApi(basket.getTotalGrossPrice()).value,
};
};
const amount = getRemainingAmount(session.privacy.giftCardResponse);
//TODO: Change AdyenHelper so that this object can have a different name. Not creating a payment request here
let paymentRequest = {
merchantAccount: AdyenConfigs.getAdyenMerchantAccount(),
amount,
};
// Add Risk data
if (AdyenConfigs.getAdyenBasketFieldsEnabled()) {
paymentRequest.additionalData = RiskDataHelper.createBasketContentFields(
basket
);
}
// L2/3 Data
if (AdyenConfigs.getAdyenLevel23DataEnabled()) {
paymentRequest.additionalData = { ...paymentRequest.additionalData, ...adyenLevelTwoThreeData.getLineItems({Basket: basket}) };
}
// Create shopper data fields
sessionsRequest = AdyenHelper.createShopperObject({
order: basket,
paymentRequest,
});
sessionsRequest.lineItems = AdyenGetOpenInvoiceData.getLineItems({Basket: basket});
sessionsRequest.reference = basket.getUUID();
} else {
// if there is no basket we only retrieve 'scheme' for zeroAuth
sessionsRequest = {
merchantAccount: AdyenConfigs.getAdyenMerchantAccount(),
allowedPaymentMethods: ['scheme'],
reference: 'no_basket',
amount: {
currency: session.currency.currencyCode,
value: 0,
},
};
}
if (countryCode) {
sessionsRequest.countryCode = countryCode;
}
if(request.getLocale()){
sessionsRequest.shopperLocale = request.getLocale();
}
// This is not yet used. A valid URl to ShowConfirmation requires an order number, which we do not yet have.
sessionsRequest.returnUrl = URLUtils.url('Checkout-Begin', 'stage', 'placeOrder').toString();
// check logged in shopper for oneClick
const profile =
customer && customer.registered && customer.getProfile()
? customer.getProfile()
: null;
let customerID = null;
if (profile && profile.getCustomerNo()) {
customerID = profile.getCustomerNo();
}
if (customerID) {
sessionsRequest.shopperReference = customerID;
}
sessionsRequest.blockedPaymentMethods = blockedPayments.blockedPaymentMethods;
const platformVersion = AdyenHelper.getApplicationInfo().externalPlatform.version;
const service = platformVersion === constants.PLATFORMS.SG ? `${constants.SERVICE.SESSIONS}${constants.PLATFORMS.SG}` : constants.SERVICE.SESSIONS;
return AdyenHelper.executeCall(service, sessionsRequest);
} catch (e) {
AdyenLogs.fatal_log(
`Adyen: ${e.toString()} in ${e.fileName}:${e.lineNumber}`,
);
}
}
module.exports = {
createSession,
};