From ee47393c61a5255b6ad61c52a9b4142f1a3cdde1 Mon Sep 17 00:00:00 2001 From: renatoma Date: Thu, 7 Oct 2021 11:45:12 +0200 Subject: [PATCH 1/4] PW-1069 - Remove deprecated settings for Adyen HPP - Removed skin code settings - Removed HMAC settings --- README.md | 10 - .../v6/facades/AdyenCheckoutFacadeTest.java | 38 ---- .../adyenv6backoffice-backoffice-config.xml | 4 - .../labels_en.properties | 1 - adyenv6core/resources/adyenv6core-items.xml | 9 - .../adyenv6core-locales_en.properties | 4 - .../adyen/v6/facades/AdyenCheckoutFacade.java | 37 ---- .../facades/DefaultAdyenCheckoutFacade.java | 179 +----------------- .../service/DefaultAdyenPaymentService.java | 4 - 9 files changed, 1 insertion(+), 285 deletions(-) diff --git a/README.md b/README.md index f88ddf59c..e9f5e8183 100644 --- a/README.md +++ b/README.md @@ -89,16 +89,6 @@ Ratepay is supported via Adyen API. ### Pix [Pix](https://docs.adyen.com/payment-methods/pix) is supported via Adyen component and API. -### Paypal Express Checkout Shortcut - -Requires both Adyen API and HPP credentials. - -The plugin offers: - - a facade (AdyenPaypalFacade) that takes care of the communication from and to Adyen regarding Paypal ECS - - a default controller that given a valid Cart, can initiate such payment "/en/adyen/paypal-ecs/initialize" - -More details can be found here: https://docs.adyen.com/developers/payment-methods/paypal/express-checkout-shortcut - ### Other alternative payment methods Supported via Adyen Checkout. diff --git a/adyenv6b2ccheckoutaddon/testsrc/com/adyen/v6/facades/AdyenCheckoutFacadeTest.java b/adyenv6b2ccheckoutaddon/testsrc/com/adyen/v6/facades/AdyenCheckoutFacadeTest.java index aa9a048b1..223ff352b 100644 --- a/adyenv6b2ccheckoutaddon/testsrc/com/adyen/v6/facades/AdyenCheckoutFacadeTest.java +++ b/adyenv6b2ccheckoutaddon/testsrc/com/adyen/v6/facades/AdyenCheckoutFacadeTest.java @@ -24,7 +24,6 @@ import com.adyen.model.checkout.CheckoutPaymentsAction; import com.adyen.model.checkout.PaymentsDetailsResponse; import com.adyen.model.checkout.PaymentsResponse; -import com.adyen.util.HMACValidator; import com.adyen.v6.converters.PaymentsResponseConverter; import com.adyen.v6.exceptions.AdyenNonAuthorizedPaymentException; import com.adyen.v6.factory.AdyenPaymentServiceFactory; @@ -63,16 +62,11 @@ import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; -import java.security.NoSuchAlgorithmException; import java.security.SignatureException; import java.util.Collections; import java.util.Map; -import java.util.SortedMap; -import java.util.TreeMap; import static com.adyen.constants.ApiConstants.Redirect.Data.MD; -import static com.adyen.constants.HPPConstants.Fields.CURRENCY_CODE; -import static com.adyen.constants.HPPConstants.Fields.PAYMENT_AMOUNT; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_CC; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_ONECLICK; import static com.adyen.v6.facades.DefaultAdyenCheckoutFacade.SESSION_LOCKED_CART; @@ -120,9 +114,6 @@ public class AdyenCheckoutFacadeTest { @Mock private CheckoutCustomerStrategy checkoutCustomerStrategyMock; - @Mock - private HMACValidator hmacValidatorMock; - @Mock private AdyenPaymentServiceFactory adyenPaymentServiceFactoryMock; @@ -153,14 +144,9 @@ public void setUp() throws SignatureException, InvalidCartException { paymentsDetailsResponseMock = mock(PaymentsDetailsResponse.class); CartData cartDataMock = mock(CartData.class); - when(baseStoreModelMock.getAdyenSkinHMAC()).thenReturn("hmacKey"); when(baseStoreModelMock.getAdyenMerchantAccount()).thenReturn("merchantAccount"); - when(baseStoreModelMock.getAdyenSkinCode()).thenReturn("skinCode"); when(baseStoreServiceMock.getCurrentBaseStore()).thenReturn(baseStoreModelMock); - when(hmacValidatorMock.calculateHMAC(isA(String.class), isA(String.class))).thenReturn("merchantSig"); - when(hmacValidatorMock.getDataToSign(isA(SortedMap.class))).thenReturn("dataToSign"); - when(cartModelMock.getCode()).thenReturn("code"); when(cartServiceMock.getSessionCart()).thenReturn(cartModelMock); @@ -217,20 +203,6 @@ public void testLockSessionCart() { verify(sessionServiceMock).removeAttribute(SESSION_CART_PARAMETER_NAME); } - @Test - public void testValidateHPPResponse() throws NoSuchAlgorithmException, SignatureException { - SortedMap hppResponseData = new TreeMap<>(); - - adyenCheckoutFacade.validateHPPResponse(hppResponseData, "merchantSig"); - - try { - adyenCheckoutFacade.validateHPPResponse(hppResponseData, "wrongMerchantSig"); - - fail("Expected exception!"); - } catch (SignatureException ignored) { - } - } - @Test public void testAuthorizeCardPayment() throws Exception { HttpServletRequest requestMock = mock(HttpServletRequest.class); @@ -319,16 +291,6 @@ public void testHandle3DResponse() throws Exception { } } - @Test - public void testInitializeHostedPayment() throws SignatureException, InvalidCartException { - CartData cartData = createCartData(); - - Map hppFormData = adyenCheckoutFacade.initializeHostedPayment(cartData, "redirectUrl"); - - assertEquals("1234", hppFormData.get(PAYMENT_AMOUNT)); - assertEquals("EUR", hppFormData.get(CURRENCY_CODE)); - } - private CartData createCartData() { CartData cartData = new CartData(); diff --git a/adyenv6backoffice/resources/adyenv6backoffice-backoffice-config.xml b/adyenv6backoffice/resources/adyenv6backoffice-backoffice-config.xml index d30b50393..b79b87743 100644 --- a/adyenv6backoffice/resources/adyenv6backoffice-backoffice-config.xml +++ b/adyenv6backoffice/resources/adyenv6backoffice-backoffice-config.xml @@ -45,10 +45,6 @@ - - - - diff --git a/adyenv6backoffice/resources/adyenv6backoffice-backoffice-labels/labels_en.properties b/adyenv6backoffice/resources/adyenv6backoffice-backoffice-labels/labels_en.properties index d6dff5f40..043194abb 100644 --- a/adyenv6backoffice/resources/adyenv6backoffice-backoffice-labels/labels_en.properties +++ b/adyenv6backoffice/resources/adyenv6backoffice-backoffice-labels/labels_en.properties @@ -21,6 +21,5 @@ hmc.adyen=Adyen hmc.adyen.account=Account Settings hmc.adyen.notifications=Server Notification Settings hmc.adyen.api=API Settings -hmc.adyen.hpp=Hosted Payment Pages Settings hmc.adyen.advanced=Advanced Settings hmc.adyen.pos=POS settings diff --git a/adyenv6core/resources/adyenv6core-items.xml b/adyenv6core/resources/adyenv6core-items.xml index 2111ef615..653b2726b 100644 --- a/adyenv6core/resources/adyenv6core-items.xml +++ b/adyenv6core/resources/adyenv6core-items.xml @@ -190,15 +190,6 @@ Merchant account name - - HPP skin code - - - - HPP skin HMAC key - - - Immediate capture flow diff --git a/adyenv6core/resources/localization/adyenv6core-locales_en.properties b/adyenv6core/resources/localization/adyenv6core-locales_en.properties index eb92ddc84..42ff88364 100644 --- a/adyenv6core/resources/localization/adyenv6core-locales_en.properties +++ b/adyenv6core/resources/localization/adyenv6core-locales_en.properties @@ -26,10 +26,6 @@ type.basestore.adyenNotificationPassword.name=Server Communication HTTP Basic pa type.basestore.adyenNotificationPassword.description=Set your own password and copy it over to Adyen Customer Area => Settings => Server Communication => Standard Notification => Password. type.basestore.adyenMerchantAccount.name=Merchant account name type.basestore.adyenMerchantAccount.description=The merchant account identifier you want to process the (transaction) request with. Find this at the top of the screen in the Adyen Customer Area (CA), where you will see [YourCompanyAccount] > [YourMerchantAccount] . -type.basestore.adyenSkinCode.name=HPP skin code -type.basestore.adyenSkinCode.description=Copy and paste the skin code of the skin you want to use from Customer Area => Skins. Leave empty to disable Alternative Payment Methods. -type.basestore.adyenSkinHMAC.name=HPP skin HMAC key -type.basestore.adyenSkinHMAC.description=Copy and paste the skin code of the skin you want to use from Customer Area => Skins => click on [skin code] => Edit => HMAC for Test platform type.basestore.adyenImmediateCapture.name=Immediate capture flow type.basestore.adyenImmediateCapture.description=Set to false if you want to perform the capture of funds manually later (only affects credit cards and a few alternative payment methods). You need to change this setting as well in Adyen Backoffice => Settings => Merchant Settings => Capture Delay. Set to true if you have selected a capture delay of a couple of days in Adyen CA. type.basestore.adyenTestMode.name=Adyen Test mode diff --git a/adyenv6core/src/com/adyen/v6/facades/AdyenCheckoutFacade.java b/adyenv6core/src/com/adyen/v6/facades/AdyenCheckoutFacade.java index bb7e492fe..7cdb1df3c 100644 --- a/adyenv6core/src/com/adyen/v6/facades/AdyenCheckoutFacade.java +++ b/adyenv6core/src/com/adyen/v6/facades/AdyenCheckoutFacade.java @@ -39,32 +39,14 @@ import javax.servlet.http.HttpServletRequest; import java.io.IOException; -import java.security.SignatureException; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.SortedMap; /** * Adyen Checkout Facade for initiating payments using CC or APM */ public interface AdyenCheckoutFacade { - /** - * Validates an HPP response based on Map - * - * @param hppResponseData map with hpp data - * @param merchantSig merchant signature - * @throws SignatureException in case signature doesn't match - */ - void validateHPPResponse(SortedMap hppResponseData, String merchantSig) throws SignatureException; - - /** - * Validates an HPP response based on the HTTP request object - * - * @param request HTTP request object - * @throws SignatureException in case signature doesn't match - */ - void validateHPPResponse(HttpServletRequest request) throws SignatureException; String getShopperLocale(); @@ -78,13 +60,6 @@ public interface AdyenCheckoutFacade { */ String getEnvironmentMode(); - /** - * Retrieve the HPP base URL for the current basestore - * - * @return HPP url - */ - String getHppUrl(); - /** * Removes cart from the session so that users can't update it while being in a payment page */ @@ -158,18 +133,6 @@ public interface AdyenCheckoutFacade { OrderData handle3DSResponse(Map details) throws Exception; - /** - * Initializes an HPP payment - * Returns map of data to be submitted to Adyen HPP - * - * @param cartData Shopper's cart - * @param redirectUrl HPP result url - * @return HPP data - * @throws SignatureException In case signature cannot be generated - * @throws InvalidCartException In case there is an existing locked cart - */ - Map initializeHostedPayment(CartData cartData, String redirectUrl) throws SignatureException, InvalidCartException; - /** * Retrieve available payment methods */ diff --git a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java index 7acacd9de..7a87d68d0 100644 --- a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java +++ b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java @@ -20,7 +20,6 @@ */ package com.adyen.v6.facades; -import com.adyen.constants.HPPConstants; import com.adyen.model.Amount; import com.adyen.model.Card; import com.adyen.model.PaymentResult; @@ -39,7 +38,6 @@ import com.adyen.model.terminal.TerminalAPIResponse; import com.adyen.service.exception.ApiException; import com.adyen.util.DateUtil; -import com.adyen.util.HMACValidator; import com.adyen.util.Util; import com.adyen.v6.constants.Adyenv6coreConstants; import com.adyen.v6.converters.PaymentsDetailsResponseConverter; @@ -104,7 +102,6 @@ import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Required; import org.springframework.ui.Model; -import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.validation.BindingResult; @@ -112,8 +109,6 @@ import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.math.BigDecimal; -import java.security.SignatureException; -import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -121,26 +116,12 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.SortedMap; -import java.util.TreeMap; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import static com.adyen.constants.ApiConstants.ThreeDS2Property.THREEDS2_CHALLENGE_TOKEN; import static com.adyen.constants.ApiConstants.ThreeDS2Property.THREEDS2_FINGERPRINT_TOKEN; -import static com.adyen.constants.HPPConstants.Fields.BRAND_CODE; -import static com.adyen.constants.HPPConstants.Fields.COUNTRY_CODE; -import static com.adyen.constants.HPPConstants.Fields.CURRENCY_CODE; -import static com.adyen.constants.HPPConstants.Fields.ISSUER_ID; -import static com.adyen.constants.HPPConstants.Fields.MERCHANT_ACCOUNT; -import static com.adyen.constants.HPPConstants.Fields.MERCHANT_REFERENCE; -import static com.adyen.constants.HPPConstants.Fields.MERCHANT_SIG; -import static com.adyen.constants.HPPConstants.Fields.PAYMENT_AMOUNT; -import static com.adyen.constants.HPPConstants.Fields.RES_URL; -import static com.adyen.constants.HPPConstants.Fields.SESSION_VALIDITY; -import static com.adyen.constants.HPPConstants.Fields.SHIP_BEFORE_DATE; -import static com.adyen.constants.HPPConstants.Fields.SKIN_CODE; import static com.adyen.constants.HPPConstants.Response.SHOPPER_LOCALE; import static com.adyen.v6.constants.Adyenv6coreConstants.ISSUER_PAYMENT_METHODS; import static com.adyen.v6.constants.Adyenv6coreConstants.KLARNA; @@ -175,7 +156,6 @@ public class DefaultAdyenCheckoutFacade implements AdyenCheckoutFacade { private OrderRepository orderRepository; private AdyenOrderService adyenOrderService; private CheckoutCustomerStrategy checkoutCustomerStrategy; - private HMACValidator hmacValidator; private AdyenPaymentServiceFactory adyenPaymentServiceFactory; private ModelService modelService; private CommonI18NService commonI18NService; @@ -242,56 +222,7 @@ public class DefaultAdyenCheckoutFacade implements AdyenCheckoutFacade { public static final String MODEL_CARD_HOLDER_NAME_REQUIRED = "cardHolderNameRequired"; public static final String IS_CARD_HOLDER_NAME_REQUIRED_PROPERTY = "isCardHolderNameRequired"; - protected static final Set HPP_RESPONSE_PARAMETERS = new HashSet<>(Arrays.asList(HPPConstants.Response.MERCHANT_REFERENCE, - HPPConstants.Response.SKIN_CODE, - HPPConstants.Response.SHOPPER_LOCALE, - HPPConstants.Response.PAYMENT_METHOD, - HPPConstants.Response.AUTH_RESULT, - HPPConstants.Response.PSP_REFERENCE, - HPPConstants.Response.MERCHANT_RETURN_DATA)); - public DefaultAdyenCheckoutFacade() { - hmacValidator = new HMACValidator(); - } - - @Override - public void validateHPPResponse(SortedMap hppResponseData, String merchantSig) throws SignatureException { - BaseStoreModel baseStore = getBaseStoreService().getCurrentBaseStore(); - - String hmacKey = baseStore.getAdyenSkinHMAC(); - if (StringUtils.isEmpty(hmacKey)) { - LOGGER.error("Empty HMAC Key"); - throw new SignatureException("Empty HMAC Key"); - } - String dataToSign = getHmacValidator().getDataToSign(hppResponseData); - String calculatedMerchantSig = getHmacValidator().calculateHMAC(dataToSign, hmacKey); - LOGGER.debug("Calculated signature: " + calculatedMerchantSig + " from data: " + dataToSign); - if (StringUtils.isEmpty(calculatedMerchantSig) || ! calculatedMerchantSig.equals(merchantSig)) { - LOGGER.error("Signature does not match!"); - throw new SignatureException("Signatures doesn't match"); - } - } - - @Override - public void validateHPPResponse(final HttpServletRequest request) throws SignatureException { - SortedMap hppResponseData = getQueryParameters(request); - - LOGGER.debug("Received HPP response: " + hppResponseData); - - String merchantSig = request.getParameter(HPPConstants.Response.MERCHANT_SIG); - if (StringUtils.isEmpty(merchantSig)) { - LOGGER.error("MerchantSig was not provided"); - throw new SignatureException("MerchantSig was not provided"); - } - - validateHPPResponse(hppResponseData, merchantSig); - } - - public String getBaseURL(HttpServletRequest request) { - String currentRequestURL = request.getRequestURL().toString(); - int requestUrlLength = currentRequestURL.length(); - int requestUriLength = request.getRequestURI().length(); - return currentRequestURL.substring(0, requestUrlLength - requestUriLength); } @Override @@ -314,11 +245,6 @@ public String getEnvironmentMode() { return "live"; } - @Override - public String getHppUrl() { - return getAdyenPaymentService().getHppEndpoint() + "/details.shtml"; - } - @Override public String getClientKey() { return baseStoreService.getCurrentBaseStore().getAdyenClientKey(); @@ -594,71 +520,6 @@ public OrderData handle3DSResponse(final Map details) throws Exc throw new AdyenNonAuthorizedPaymentException(paymentsDetailsResponse); } - @Override - public Map initializeHostedPayment(final CartData cartData, final String redirectUrl) throws SignatureException { - final String sessionValidity = Util.calculateSessionValidity(); - final SortedMap hppFormData = new TreeMap<>(); - - BaseStoreModel baseStore = baseStoreService.getCurrentBaseStore(); - - String merchantAccount = baseStore.getAdyenMerchantAccount(); - String skinCode = baseStore.getAdyenSkinCode(); - String hmacKey = baseStore.getAdyenSkinHMAC(); - - Assert.notNull(merchantAccount); - Assert.notNull(skinCode); - Assert.notNull(hmacKey); - - Amount amount = Util.createAmount(cartData.getTotalPrice().getValue(), cartData.getTotalPrice().getCurrencyIso()); - - //Identify country code based on shopper's delivery address - String countryCode = ""; - AddressData deliveryAddress = cartData.getDeliveryAddress(); - if (deliveryAddress != null) { - CountryData deliveryCountry = deliveryAddress.getCountry(); - if (deliveryCountry != null) { - countryCode = deliveryCountry.getIsocode(); - } - } - - CartModel cartModel = regenerateCartCode(); - String merchantReference = cartModel.getCode(); - - hppFormData.put(PAYMENT_AMOUNT, String.valueOf(amount.getValue())); - hppFormData.put(CURRENCY_CODE, cartData.getTotalPrice().getCurrencyIso()); - hppFormData.put(SHIP_BEFORE_DATE, sessionValidity); - hppFormData.put(MERCHANT_REFERENCE, merchantReference); - hppFormData.put(SKIN_CODE, skinCode); - hppFormData.put(MERCHANT_ACCOUNT, merchantAccount); - hppFormData.put(SESSION_VALIDITY, sessionValidity); - hppFormData.put(BRAND_CODE, cartData.getAdyenPaymentMethod()); - hppFormData.put(ISSUER_ID, cartData.getAdyenIssuerId()); - hppFormData.put(COUNTRY_CODE, countryCode); - hppFormData.put(RES_URL, redirectUrl); - hppFormData.put(DF_VALUE, cartData.getAdyenDfValue()); - - if (! StringUtils.isEmpty(getShopperLocale())) { - hppFormData.put(SHOPPER_LOCALE, getShopperLocale()); - } - - String dataToSign = getHmacValidator().getDataToSign(hppFormData); - String merchantSig = getHmacValidator().calculateHMAC(dataToSign, hmacKey); - - hppFormData.put(MERCHANT_SIG, merchantSig); - - //Lock the cart - lockSessionCart(); - - return hppFormData; - } - - private CartModel regenerateCartCode() { - final CartModel cartModel = cartService.getSessionCart(); - cartModel.setCode(String.valueOf(keyGenerator.generate())); - cartService.saveOrder(cartModel); - return cartModel; - } - /** * Create order and authorized TX */ @@ -855,7 +716,7 @@ public void initializeCheckoutData(Model model) { // current selected PaymentMethod model.addAttribute(MODEL_SELECTED_PAYMENT_METHOD, cartData.getAdyenPaymentMethod()); - //Set HPP payment methods + //Set payment methods model.addAttribute(MODEL_PAYMENT_METHODS, alternativePaymentMethods); //Set allowed Credit Cards @@ -1236,36 +1097,6 @@ public String getShopperLocale() { return null; } - /** - * Helper function for retrieving only GET parameters (of querystring) - * - * @param request HttpServletRequest request object - * @return Sorted map with parameters - */ - private static SortedMap getQueryParameters(HttpServletRequest request) { - SortedMap queryParameters = new TreeMap<>(); - String queryString = request.getQueryString(); - - if (StringUtils.isEmpty(queryString)) { - return queryParameters; - } - - String[] parameters = queryString.split("&"); - - for (String parameter : parameters) { - String[] keyValuePair = parameter.split("="); - String key = keyValuePair[0]; - String value = request.getParameter(key); - - // Add only HPP parameters for signature calculation - if (HPP_RESPONSE_PARAMETERS.contains(key) || key.startsWith("additionalData.")) { - queryParameters.put(key, value); - } - } - - return queryParameters; - } - protected String generateCcPaymentInfoCode(final CartModel cartModel) { return cartModel.getCode() + "_" + UUID.randomUUID(); } @@ -1553,14 +1384,6 @@ public void setCheckoutCustomerStrategy(CheckoutCustomerStrategy checkoutCustome this.checkoutCustomerStrategy = checkoutCustomerStrategy; } - public HMACValidator getHmacValidator() { - return hmacValidator; - } - - public void setHmacValidator(HMACValidator hmacValidator) { - this.hmacValidator = hmacValidator; - } - public AdyenPaymentServiceFactory getAdyenPaymentServiceFactory() { return adyenPaymentServiceFactory; } diff --git a/adyenv6core/src/com/adyen/v6/service/DefaultAdyenPaymentService.java b/adyenv6core/src/com/adyen/v6/service/DefaultAdyenPaymentService.java index 1e74c6b09..9ae7a7c65 100644 --- a/adyenv6core/src/com/adyen/v6/service/DefaultAdyenPaymentService.java +++ b/adyenv6core/src/com/adyen/v6/service/DefaultAdyenPaymentService.java @@ -109,8 +109,6 @@ public DefaultAdyenPaymentService(final BaseStoreModel baseStore) { String apiKey = baseStore.getAdyenAPIKey(); String merchantAccount = baseStore.getAdyenMerchantAccount(); - String skinCode = baseStore.getAdyenSkinCode(); - String hmacKey = baseStore.getAdyenSkinHMAC(); String apiEndpointPrefix = baseStore.getAdyenAPIEndpointPrefix(); boolean isTestMode = baseStore.getAdyenTestMode(); boolean isPosEnabled = baseStore.getAdyenPosEnabled(); @@ -135,8 +133,6 @@ public DefaultAdyenPaymentService(final BaseStoreModel baseStore) { config = new Config(); config.setApiKey(apiKey); config.setMerchantAccount(merchantAccount); - config.setSkinCode(skinCode); - config.setHmacKey(hmacKey); config.setApplicationName(PLUGIN_NAME + " v" + PLUGIN_VERSION); client = new Client(config); From b930a311953f61765e1f98564bc16f29cfe9165b Mon Sep 17 00:00:00 2001 From: renatoma Date: Thu, 7 Oct 2021 15:41:10 +0200 Subject: [PATCH 2/4] PW-1069 - Small changes to url to remove HPP reference --- .../pages/AdyenSummaryCheckoutStepController.java | 6 +++--- .../src/com/adyen/v6/service/AdyenPaymentService.java | 5 ----- .../com/adyen/v6/service/DefaultAdyenPaymentService.java | 5 ----- .../com/adyen/v6/factory/AdyenRequestFactoryTest.java | 2 +- 4 files changed, 4 insertions(+), 14 deletions(-) diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenSummaryCheckoutStepController.java b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenSummaryCheckoutStepController.java index b6617b48d..0edf4f095 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenSummaryCheckoutStepController.java +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenSummaryCheckoutStepController.java @@ -102,7 +102,7 @@ public class AdyenSummaryCheckoutStepController extends AbstractCheckoutStepCont private final static String SUMMARY = "summary"; private static final String AUTHORISE_3D_SECURE_PAYMENT_URL = "/authorise-3d-adyen-response"; - private static final String HPP_RESULT_URL = "/hpp-adyen-response"; + private static final String CHECKOUT_RESULT_URL = "/checkout-adyen-response"; private static final String REDIRECT_RESULT = "redirectResult"; private static final String ACTION = "action"; @@ -342,7 +342,7 @@ public String authorise3DSPayment(final RedirectAttributes redirectModel, return REDIRECT_PREFIX + CART_PREFIX; } - @RequestMapping(value = HPP_RESULT_URL, method = RequestMethod.GET) + @RequestMapping(value = CHECKOUT_RESULT_URL, method = RequestMethod.GET) @RequireHardLogIn public String handleAdyenResponse(final HttpServletRequest request, final RedirectAttributes redirectModel) { String redirectResult = request.getParameter(REDIRECT_RESULT); @@ -455,7 +455,7 @@ private String getReturnUrl(String adyenPaymentMethod) { if (is3DSPaymentMethod(adyenPaymentMethod)) { url = SUMMARY_CHECKOUT_PREFIX + AUTHORISE_3D_SECURE_PAYMENT_URL; } else { - url = SUMMARY_CHECKOUT_PREFIX + HPP_RESULT_URL; + url = SUMMARY_CHECKOUT_PREFIX + CHECKOUT_RESULT_URL; } BaseSiteModel currentBaseSite = baseSiteService.getCurrentBaseSite(); diff --git a/adyenv6core/src/com/adyen/v6/service/AdyenPaymentService.java b/adyenv6core/src/com/adyen/v6/service/AdyenPaymentService.java index a8a2607a0..95310af79 100644 --- a/adyenv6core/src/com/adyen/v6/service/AdyenPaymentService.java +++ b/adyenv6core/src/com/adyen/v6/service/AdyenPaymentService.java @@ -109,11 +109,6 @@ public interface AdyenPaymentService { */ PaymentsDetailsResponse getPaymentDetailsFromPayload( HashMap details) throws Exception; - /** - * Returns the HPP base URL for the current basestore - */ - String getHppEndpoint(); - /** * Returns the Device Fingerprint url */ diff --git a/adyenv6core/src/com/adyen/v6/service/DefaultAdyenPaymentService.java b/adyenv6core/src/com/adyen/v6/service/DefaultAdyenPaymentService.java index 9ae7a7c65..66c600e9f 100644 --- a/adyenv6core/src/com/adyen/v6/service/DefaultAdyenPaymentService.java +++ b/adyenv6core/src/com/adyen/v6/service/DefaultAdyenPaymentService.java @@ -378,11 +378,6 @@ public PaymentsDetailsResponse getPaymentDetailsFromPayload(Map return paymentsResponse; } - @Override - public String getHppEndpoint() { - return config.getHppEndpoint(); - } - @Override public String getDeviceFingerprintUrl() { DateFormat df = new SimpleDateFormat("yyyyMMdd"); diff --git a/adyenv6core/testsrc/com/adyen/v6/factory/AdyenRequestFactoryTest.java b/adyenv6core/testsrc/com/adyen/v6/factory/AdyenRequestFactoryTest.java index 13f26c60c..8a7a120e4 100644 --- a/adyenv6core/testsrc/com/adyen/v6/factory/AdyenRequestFactoryTest.java +++ b/adyenv6core/testsrc/com/adyen/v6/factory/AdyenRequestFactoryTest.java @@ -90,7 +90,7 @@ public class AdyenRequestFactoryTest { private static final String REMOTE_ADDRESS = "1.2.3.4"; private static final String REQUEST_URL = "https://localhost:9002/electronics/en/checkout/multi/adyen/summary/placeOrder"; private static final String REQUEST_URI = "/electronics/en/checkout/multi/adyen/summary/placeOrder"; - private static final String RETURN_URL ="https://localhost:9002/electronics/en/checkout/multi/adyen/summary/hpp-adyen-response"; + private static final String RETURN_URL ="https://localhost:9002/electronics/en/checkout/multi/adyen/summary/checkout-adyen-response"; //POS private static final String SERVICE_ID = "serviceId"; private static final String TERMINAL_ID = "V400m-123456789"; From ed222ca3f035a67f4de64fa095c72b0dcc34b91f Mon Sep 17 00:00:00 2001 From: renatoma Date: Wed, 13 Oct 2021 16:43:03 +0200 Subject: [PATCH 3/4] PW-3871 - Added BCMC and BCMC Mobile components --- .../pages/AdyenComponentController.java | 15 +++-- .../AdyenSummaryCheckoutStepController.java | 3 +- .../webroot/WEB-INF/messages/base.properties | 2 +- .../WEB-INF/messages/base_en.properties | 2 +- .../WEB-INF/messages/base_pt.properties | 2 +- .../tags/responsive/alternativeMethod.tag | 4 ++ .../tags/responsive/checkoutOrderSummary.tag | 17 +++--- .../checkout/multi/checkoutSummaryPage.jsp | 7 ++- .../multi/selectPaymentMethodPage.jsp | 3 + .../responsive/common/js/adyen.checkout.js | 58 ++++++++++++++++++- .../v6/constants/Adyenv6coreConstants.java | 2 + .../facades/DefaultAdyenCheckoutFacade.java | 4 +- .../adyen/v6/factory/AdyenRequestFactory.java | 3 +- 13 files changed, 100 insertions(+), 22 deletions(-) diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenComponentController.java b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenComponentController.java index 06df9b71c..599f209aa 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenComponentController.java +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenComponentController.java @@ -61,11 +61,14 @@ import javax.servlet.http.HttpServletRequest; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.List; import java.util.Map; import static com.adyen.v6.constants.AdyenControllerConstants.COMPONENT_PREFIX; import static com.adyen.v6.constants.AdyenControllerConstants.SUMMARY_CHECKOUT_PREFIX; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_AMAZONPAY; +import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_BCMC_MOBILE; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_PIX; @RestController @@ -88,6 +91,10 @@ public class AdyenComponentController { @Resource(name = "baseSiteService") private BaseSiteService baseSiteService; + private final List PAYMENT_METHODS_WITH_VALIDATED_TERMS = Arrays.asList(PAYMENT_METHOD_AMAZONPAY, + PAYMENT_METHOD_BCMC_MOBILE, + PAYMENT_METHOD_PIX); + @RequestMapping(value = "/payment", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public String componentPayment(final HttpServletRequest request) throws AdyenComponentException { @@ -112,9 +119,9 @@ public String componentPayment(final HttpServletRequest request) throws AdyenCom paymentMethodDetails = gson.fromJson(requestJson.get("paymentMethodDetails"), GooglePayDetails.class); } else if(AmazonPayDetails.AMAZONPAY.equals(paymentMethod)) { paymentMethodDetails = gson.fromJson(requestJson.get("paymentMethodDetails"), AmazonPayDetails.class); - } else if(PAYMENT_METHOD_PIX.equals(paymentMethod)) { + } else if(PAYMENT_METHOD_PIX.equals(paymentMethod) || PAYMENT_METHOD_BCMC_MOBILE.equals(paymentMethod)) { paymentMethodDetails = new DefaultPaymentMethodDetails(); - paymentMethodDetails.setType(PAYMENT_METHOD_PIX); + paymentMethodDetails.setType(paymentMethod); } else { throw new InvalidCartException("checkout.error.paymentethod.formentry.invalid"); } @@ -180,8 +187,8 @@ protected void validateOrderForm(JsonObject requestJson) throws InvalidCartExcep JsonObject paymentMethodDetails = requestJson.get("paymentMethodDetails").getAsJsonObject(); String paymentMethod = gson.fromJson(paymentMethodDetails.get("type"), String.class); - // Pix and Amazon already have the terms validated on a previous step - if(!PAYMENT_METHOD_PIX.equals(paymentMethod) && !PAYMENT_METHOD_AMAZONPAY.equals(paymentMethod) + // Some methods already have the terms validated on a previous step + if (!PAYMENT_METHODS_WITH_VALIDATED_TERMS.contains(paymentMethod) && (termsCheck == null || !termsCheck)) { throw new InvalidCartException("checkout.error.terms.not.accepted"); } diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenSummaryCheckoutStepController.java b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenSummaryCheckoutStepController.java index 0edf4f095..f1abbb23e 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenSummaryCheckoutStepController.java +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/src/com/adyen/v6/controllers/pages/AdyenSummaryCheckoutStepController.java @@ -84,6 +84,7 @@ import static com.adyen.v6.constants.AdyenControllerConstants.SUMMARY_CHECKOUT_PREFIX; import static com.adyen.v6.constants.Adyenv6coreConstants.AFTERPAY_TOUCH; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_APPLEPAY; +import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_BCMC; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_BOLETO; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_CC; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_MULTIBANCO; @@ -423,7 +424,7 @@ private void addMultibancoMessage(RedirectAttributes redirectModel, final String private boolean is3DSPaymentMethod(String adyenPaymentMethod) { - return adyenPaymentMethod.equals(PAYMENT_METHOD_CC) || adyenPaymentMethod.indexOf(PAYMENT_METHOD_ONECLICK) == 0; + return adyenPaymentMethod.equals(PAYMENT_METHOD_CC) || adyenPaymentMethod.equals(PAYMENT_METHOD_BCMC) || adyenPaymentMethod.indexOf(PAYMENT_METHOD_ONECLICK) == 0; } private String redirectToSelectPaymentMethodWithError(final RedirectAttributes redirectModel, final String messageKey) { diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base.properties b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base.properties index 154fee068..92e012792 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base.properties +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base.properties @@ -36,4 +36,4 @@ payment.method.telephonenumber=Phone Number checkout.summary.spinner.message=Please wait while your payment is processed. Do not click back or refresh the page. checkout.summary.component.mbway.payment=Provide your MB WAY account data to finalize your payment checkout.summary.component.notavailable=This payment method is not available on your current browser or device -checkout.summary.component.pix.generateqr = Generate QR Code \ No newline at end of file +checkout.summary.component.generateqr = Generate QR Code \ No newline at end of file diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_en.properties b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_en.properties index 154fee068..92e012792 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_en.properties +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_en.properties @@ -36,4 +36,4 @@ payment.method.telephonenumber=Phone Number checkout.summary.spinner.message=Please wait while your payment is processed. Do not click back or refresh the page. checkout.summary.component.mbway.payment=Provide your MB WAY account data to finalize your payment checkout.summary.component.notavailable=This payment method is not available on your current browser or device -checkout.summary.component.pix.generateqr = Generate QR Code \ No newline at end of file +checkout.summary.component.generateqr = Generate QR Code \ No newline at end of file diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_pt.properties b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_pt.properties index 23d945d12..ec926c6c1 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_pt.properties +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_pt.properties @@ -34,4 +34,4 @@ payment.method.terminal.selector=Selecione o terminal payment.method.telephonenumber=NĂºmero de telefone checkout.summary.spinner.message=Aguarde... -checkout.summary.component.pix.generateqr = Gerar QR Code \ No newline at end of file +checkout.summary.component.generateqr = Gerar QR Code \ No newline at end of file diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/alternativeMethod.tag b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/alternativeMethod.tag index cba7eeaae..f2038403c 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/alternativeMethod.tag +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/alternativeMethod.tag @@ -145,6 +145,10 @@
+ + +
+
diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/checkoutOrderSummary.tag b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/checkoutOrderSummary.tag index 6c0d94cc1..2b1d54b5b 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/checkoutOrderSummary.tag +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/checkoutOrderSummary.tag @@ -10,10 +10,11 @@ - + + <%-- Components --%> - +
- - <%-- Render Pix QR code --%> + + <%-- Render QR code --%> -
+
<%-- Render payment button --%> @@ -37,7 +38,7 @@
- +
@@ -45,7 +46,7 @@
<%-- For components that do not have it's own button --%> - +