From ee1bd62a2c1339176739b2979d0d824cb9b247c9 Mon Sep 17 00:00:00 2001 From: PJaneta Date: Wed, 28 Aug 2024 09:13:57 +0200 Subject: [PATCH] AD-292 Implement Payment Optimisation SDK --- .../AdyenPageCheckoutStepController.java | 10 +++-- .../responsive/pages/adyenSPACheckout.jsp | 4 ++ .../src/components/payment/Payment.tsx | 4 ++ .../WEB-INF/tags/responsive/adyenLibrary.tag | 4 ++ .../multi/selectPaymentMethodPage.jsp | 3 ++ .../responsive/common/js/adyen.checkout.js | 9 +++++ adyenv6core/resources/adyenv6core-beans.xml | 2 + .../impl/DefaultAdyenCheckoutFacade.java | 6 +++ .../adyen/v6/factory/AdyenRequestFactory.java | 38 +++++++++---------- .../com/adyen/v6/forms/AdyenPaymentForm.java | 11 ++++++ 10 files changed, 69 insertions(+), 22 deletions(-) diff --git a/adyencheckoutaddonspa/acceleratoraddon/web/src/com/adyen/commerce/controllers/checkout/AdyenPageCheckoutStepController.java b/adyencheckoutaddonspa/acceleratoraddon/web/src/com/adyen/commerce/controllers/checkout/AdyenPageCheckoutStepController.java index abc77a6de..4eb24b11f 100644 --- a/adyencheckoutaddonspa/acceleratoraddon/web/src/com/adyen/commerce/controllers/checkout/AdyenPageCheckoutStepController.java +++ b/adyencheckoutaddonspa/acceleratoraddon/web/src/com/adyen/commerce/controllers/checkout/AdyenPageCheckoutStepController.java @@ -1,5 +1,7 @@ package com.adyen.commerce.controllers.checkout; +import com.adyen.v6.facades.AdyenCheckoutFacade; +import com.adyen.v6.facades.impl.DefaultAdyenCheckoutFacade; import de.hybris.platform.acceleratorstorefrontcommons.annotations.PreValidateCheckoutStep; import de.hybris.platform.acceleratorstorefrontcommons.annotations.PreValidateQuoteCheckoutStep; import de.hybris.platform.acceleratorstorefrontcommons.annotations.RequireHardLogIn; @@ -7,19 +9,17 @@ import de.hybris.platform.acceleratorstorefrontcommons.constants.WebConstants; import de.hybris.platform.acceleratorstorefrontcommons.controllers.pages.checkout.steps.AbstractCheckoutStepController; import de.hybris.platform.acceleratorstorefrontcommons.forms.AddressForm; -import de.hybris.platform.acceleratorstorefrontcommons.util.AddressDataUtil; import de.hybris.platform.cms2.exceptions.CMSItemNotFoundException; import de.hybris.platform.cms2.model.pages.ContentPageModel; import de.hybris.platform.commercefacades.order.data.CartData; import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.mvc.support.RedirectAttributes; -import javax.annotation.Resource; - import static com.adyen.commerce.constants.AdyencheckoutaddonspaWebConstants.ADYEN_CHECKOUT_ORDER_CONFIRMATION; import static com.adyen.commerce.constants.AdyencheckoutaddonspaWebConstants.ADYEN_CHECKOUT_PAGE_PREFIX; @@ -32,6 +32,9 @@ public class AdyenPageCheckoutStepController extends AbstractCheckoutStepControl public static final String SPA_CHECKOUT_PAGE = "addon:/adyencheckoutaddonspa/pages/adyenSPACheckout"; + @Autowired + private AdyenCheckoutFacade adyenCheckoutFacade; + @GetMapping(value = "/adyen/**") @RequireHardLogIn @PreValidateQuoteCheckoutStep @@ -78,6 +81,7 @@ protected void populateCommonModelAttributes(final Model model, final CartData c model.addAttribute(SHOW_SAVE_TO_ADDRESS_BOOK_ATTR, Boolean.TRUE); model.addAttribute(WebConstants.BREADCRUMBS_KEY, getResourceBreadcrumbBuilder().getBreadcrumbs(getBreadcrumbKey())); model.addAttribute("metaRobots", "noindex,nofollow"); + model.addAttribute(DefaultAdyenCheckoutFacade.MODEL_CHECKOUT_SHOPPER_HOST, adyenCheckoutFacade.getCheckoutShopperHost()); if (StringUtils.isNotBlank(addressForm.getCountryIso())) { model.addAttribute("regions", getI18NFacade().getRegionsForCountryIso(addressForm.getCountryIso())); model.addAttribute("country", addressForm.getCountryIso()); diff --git a/adyencheckoutaddonspa/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/adyenSPACheckout.jsp b/adyencheckoutaddonspa/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/adyenSPACheckout.jsp index e8cee01a9..72c99660c 100644 --- a/adyencheckoutaddonspa/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/adyenSPACheckout.jsp +++ b/adyencheckoutaddonspa/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/adyenSPACheckout.jsp @@ -13,6 +13,10 @@ + +
diff --git a/adyencheckoutaddonspa/acceleratoraddon/web/webroot/_ui/responsive/common/js/adyen-checkout/src/components/payment/Payment.tsx b/adyencheckoutaddonspa/acceleratoraddon/web/webroot/_ui/responsive/common/js/adyen-checkout/src/components/payment/Payment.tsx index 28c464e54..8caf482b2 100644 --- a/adyencheckoutaddonspa/acceleratoraddon/web/webroot/_ui/responsive/common/js/adyen-checkout/src/components/payment/Payment.tsx +++ b/adyencheckoutaddonspa/acceleratoraddon/web/webroot/_ui/responsive/common/js/adyen-checkout/src/components/payment/Payment.tsx @@ -128,6 +128,10 @@ class Payment extends React.Component { analytics: { enabled: false }, + // @ts-ignore + risk: { + enabled: true + }, onPaymentCompleted(data: OnPaymentCompletedData, element?: UIElement) { console.info(data, element); }, diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/adyenLibrary.tag b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/adyenLibrary.tag index fc2b18eec..ab85d1cc8 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/adyenLibrary.tag +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/adyenLibrary.tag @@ -35,6 +35,10 @@ crossorigin="anonymous"> + + diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/checkout/multi/selectPaymentMethodPage.jsp b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/checkout/multi/selectPaymentMethodPage.jsp index 8025ed05a..a1dcd37f6 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/checkout/multi/selectPaymentMethodPage.jsp +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/checkout/multi/selectPaymentMethodPage.jsp @@ -126,6 +126,7 @@ return false; } AdyenCheckoutHybris.setCustomPaymentMethodValues(); + AdyenCheckoutHybris.addRiskData(); $("#adyen-encrypted-form").submit(); }); @@ -183,6 +184,8 @@ + + <%-- Billing Information --%>
diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/_ui/responsive/common/js/adyen.checkout.js b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/_ui/responsive/common/js/adyen.checkout.js index 496f79f4e..241b86a43 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/_ui/responsive/common/js/adyen.checkout.js +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/_ui/responsive/common/js/adyen.checkout.js @@ -1196,6 +1196,15 @@ var AdyenCheckoutHybris = (function () { } console.log('Something went wrong while trying to compute current visible label'); return ''; + }, + + addRiskData: function () { + try { + $('input[name="riskData"]').val(getData()); + } catch (e) { + //in case of risk data collection script not enabled + } + } }; })(); diff --git a/adyenv6core/resources/adyenv6core-beans.xml b/adyenv6core/resources/adyenv6core-beans.xml index 4980968cf..f2648c15e 100644 --- a/adyenv6core/resources/adyenv6core-beans.xml +++ b/adyenv6core/resources/adyenv6core-beans.xml @@ -46,6 +46,8 @@ + + diff --git a/adyenv6core/src/com/adyen/v6/facades/impl/DefaultAdyenCheckoutFacade.java b/adyenv6core/src/com/adyen/v6/facades/impl/DefaultAdyenCheckoutFacade.java index 456117953..c37a88d03 100644 --- a/adyenv6core/src/com/adyen/v6/facades/impl/DefaultAdyenCheckoutFacade.java +++ b/adyenv6core/src/com/adyen/v6/facades/impl/DefaultAdyenCheckoutFacade.java @@ -204,6 +204,7 @@ public class DefaultAdyenCheckoutFacade implements AdyenCheckoutFacade { public static final String SESSION_SF_EXPIRY_YEAR = "encryptedExpiryYear"; public static final String SESSION_SF_SECURITY_CODE = "encryptedSecurityCode"; public static final String SESSION_CARD_BRAND = "cardBrand"; + public static final String SESSION_ADYEN_RISK_DATA = "adyenRiskData"; public static final String MODEL_SELECTED_PAYMENT_METHOD = "selectedPaymentMethod"; public static final String MODEL_PAYMENT_METHODS = "paymentMethods"; public static final String MODEL_CREDIT_CARD_LABEL = "creditCardLabel"; @@ -515,6 +516,7 @@ private void updateCartWithSessionData(CartData cartData) { cartData.setAdyenEncryptedExpiryYear(getSessionService().getAttribute(SESSION_SF_EXPIRY_YEAR)); cartData.setAdyenEncryptedSecurityCode(getSessionService().getAttribute(SESSION_SF_SECURITY_CODE)); cartData.setAdyenCardBrand(getSessionService().getAttribute(SESSION_CARD_BRAND)); + cartData.setRiskData(getSessionService().getAttribute(SESSION_ADYEN_RISK_DATA)); getSessionService().removeAttribute(SESSION_CSE_TOKEN); getSessionService().removeAttribute(SESSION_SF_CARD_NUMBER); @@ -523,6 +525,7 @@ private void updateCartWithSessionData(CartData cartData) { getSessionService().removeAttribute(SESSION_SF_SECURITY_CODE); getSessionService().removeAttribute(SESSION_CARD_BRAND); getSessionService().removeAttribute(PAYMENT_METHOD); + getSessionService().removeAttribute(SESSION_ADYEN_RISK_DATA); } @Override @@ -1358,6 +1361,9 @@ public void handlePaymentForm(AdyenPaymentForm adyenPaymentForm, Errors errors) if (!StringUtils.isEmpty(adyenPaymentForm.getCardBrand())) { getSessionService().setAttribute(SESSION_CARD_BRAND, adyenPaymentForm.getCardBrand()); } + if (!StringUtils.isEmpty(adyenPaymentForm.getRiskData())) { + getSessionService().setAttribute(SESSION_ADYEN_RISK_DATA, adyenPaymentForm.getRiskData()); + } //Update CartModel cartModel.setAdyenDfValue(adyenPaymentForm.getDfValue()); diff --git a/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java b/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java index f755fd535..d8b1ae29a 100644 --- a/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java +++ b/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java @@ -21,19 +21,7 @@ package com.adyen.v6.factory; import com.adyen.builders.terminal.TerminalAPIRequestBuilder; -import com.adyen.model.checkout.Amount; -import com.adyen.model.checkout.ApplicationInfo; -import com.adyen.model.checkout.BillingAddress; -import com.adyen.model.checkout.BrowserInfo; -import com.adyen.model.checkout.CardDetails; -import com.adyen.model.checkout.CheckoutPaymentMethod; -import com.adyen.model.checkout.CommonField; -import com.adyen.model.checkout.DeliveryAddress; -import com.adyen.model.checkout.ExternalPlatform; -import com.adyen.model.checkout.Installments; -import com.adyen.model.checkout.LineItem; -import com.adyen.model.checkout.Name; -import com.adyen.model.checkout.PaymentRequest; +import com.adyen.model.checkout.*; import com.adyen.model.nexo.AmountsReq; import com.adyen.model.nexo.DocumentQualifierType; import com.adyen.model.nexo.MessageCategoryType; @@ -62,6 +50,7 @@ import de.hybris.platform.core.model.user.CustomerModel; import de.hybris.platform.servicelayer.config.ConfigurationService; import de.hybris.platform.util.TaxValue; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.configuration.Configuration; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; @@ -71,12 +60,7 @@ import javax.xml.datatype.XMLGregorianCalendar; import java.time.OffsetDateTime; import java.time.ZoneId; -import java.util.ArrayList; -import java.util.Collection; -import java.util.GregorianCalendar; -import java.util.HashMap; -import java.util.List; -import java.util.Optional; +import java.util.*; import java.util.stream.Collectors; import static com.adyen.v6.constants.Adyenv6coreConstants.AFTERPAY; @@ -127,6 +111,7 @@ public PaymentRequest createPaymentsRequest(final String merchantAccount, setCommonInfoOnPaymentRequest(merchantAccount, cartData, requestInfo, customerModel, paymentsRequest); paymentsRequest.setApplicationInfo(createApplicationInfo()); + setRiskData(paymentsRequest, cartData, originPaymentsRequest); paymentsRequest.setReturnUrl(cartData.getAdyenReturnUrl()); paymentsRequest.setRedirectFromIssuerMethod(RequestMethod.POST.toString()); @@ -189,6 +174,21 @@ else if (cartData.getAdyenPaymentMethod().indexOf(PAYMENT_METHOD_BOLETO) == 0) { return paymentsRequest; } + private void setRiskData(PaymentRequest paymentsRequest, CartData cartData, PaymentRequest originPaymentsRequest) { + // drop-in + if (originPaymentsRequest != null && originPaymentsRequest.getRiskData() != null) { + paymentsRequest.setRiskData(originPaymentsRequest.getRiskData()); + return; + } + + // components + if (StringUtils.isNotEmpty(cartData.getRiskData())) { + RiskData riskData = new RiskData(); + riskData.setClientData(cartData.getRiskData()); + paymentsRequest.setRiskData(riskData); + } + } + protected CardDetails getCardDetails(CartData cartData, String selectedReference) { final CardDetails paymentMethodDetails = new CardDetails(); paymentMethodDetails.encryptedSecurityCode(cartData.getAdyenEncryptedSecurityCode()); diff --git a/adyenv6core/src/com/adyen/v6/forms/AdyenPaymentForm.java b/adyenv6core/src/com/adyen/v6/forms/AdyenPaymentForm.java index 730bb6ee3..150c56f49 100644 --- a/adyenv6core/src/com/adyen/v6/forms/AdyenPaymentForm.java +++ b/adyenv6core/src/com/adyen/v6/forms/AdyenPaymentForm.java @@ -57,6 +57,8 @@ public class AdyenPaymentForm { private String selectedReference; private int installments; + private String riskData; + //Save card private boolean rememberTheseDetails; @@ -358,6 +360,14 @@ public void setGiftCardBrand(String giftCardBrand) { this.giftCardBrand = giftCardBrand; } + public String getRiskData() { + return riskData; + } + + public void setRiskData(String riskData) { + this.riskData = riskData; + } + public void resetFormExceptBillingAddress() { this.paymentMethod = null; this.cseToken = null; @@ -387,6 +397,7 @@ public void resetFormExceptBillingAddress() { this.telephoneNumber = null; this.gender = null; this.giftCardBrand = null; + this.riskData = null; } @Override