From 55f91fd8023933d271dfee2cfcc49c5c219bffe8 Mon Sep 17 00:00:00 2001 From: renatoma Date: Thu, 17 Jun 2021 12:24:36 +0200 Subject: [PATCH 01/11] Added check for merchantReference == null when processing notifications --- .../NotificationItemRepository.java | 38 +++++++++---------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/adyenv6core/src/com/adyen/v6/repository/NotificationItemRepository.java b/adyenv6core/src/com/adyen/v6/repository/NotificationItemRepository.java index 8e88bdcd0..7f3d6dba6 100644 --- a/adyenv6core/src/com/adyen/v6/repository/NotificationItemRepository.java +++ b/adyenv6core/src/com/adyen/v6/repository/NotificationItemRepository.java @@ -56,30 +56,30 @@ public List getNonProcessedNotifications() { return nonProcessedNotifications; } - public boolean isNewerNotificationExists(String merchantReference, Date eventDate, String merchantAccountCode) - { - final Map queryParams = new HashMap(); - queryParams.put("merchantReference", merchantReference); + public boolean isNewerNotificationExists(String merchantReference, Date eventDate, String merchantAccountCode) { + String query = "SELECT {pk} FROM {" + NotificationItemModel._TYPECODE + "}" + + " WHERE {" + NotificationItemModel.PROCESSEDAT + "} IS NOT NULL"; + final Map queryParams = new HashMap<>(); + + if (merchantReference != null) { + queryParams.put("merchantReference", merchantReference); + query += " AND {" + NotificationItemModel.MERCHANTREFERENCE + "} = ?merchantReference"; + } else { + query += " AND {" + NotificationItemModel.MERCHANTREFERENCE + "} IS NULL"; + } queryParams.put("eventDate", eventDate); queryParams.put("merchantAccountCode", merchantAccountCode); + query += " AND {" + NotificationItemModel.EVENTDATE + "} > ?eventDate" + + " AND {" + NotificationItemModel.MERCHANTACCOUNTCODE + "} = ?merchantAccountCode" + + " ORDER BY {eventDate} desc"; - final FlexibleSearchQuery laterNotificationQuery = new FlexibleSearchQuery( - "SELECT {pk} FROM {" + NotificationItemModel._TYPECODE + "}" - + " WHERE {" + NotificationItemModel.MERCHANTREFERENCE + "} = ?merchantReference" - + " AND {" + NotificationItemModel.EVENTDATE + "} > ?eventDate" - + " AND {" + NotificationItemModel.MERCHANTACCOUNTCODE + "} = ?merchantAccountCode" - + " AND {" + NotificationItemModel.PROCESSEDAT + "} IS NOT NULL " - + "order by {eventDate} desc", - queryParams - ); + final FlexibleSearchQuery laterNotificationQuery = new FlexibleSearchQuery(query, queryParams); LOG.debug("Checking if a newer notification already exists"); - List newerNotificationList = flexibleSearchService + List newerNotificationList = flexibleSearchService .search(laterNotificationQuery) .getResult(); - if(newerNotificationList!=null && newerNotificationList.size() > 0) { - return true; - } - return false; + + return newerNotificationList != null && newerNotificationList.size() > 0; } /** @@ -91,7 +91,7 @@ public boolean isNewerNotificationExists(String merchantReference, Date eventDa * @return true|false */ public boolean notificationProcessed(String pspReference, String eventCode, boolean success) { - final Map queryParams = new HashMap(); + final Map queryParams = new HashMap<>(); queryParams.put("pspReference", pspReference); queryParams.put("eventCode", eventCode); queryParams.put("success", success); From 5b0bd4c3af3bb0b76195918e69865efb6b939a04 Mon Sep 17 00:00:00 2001 From: saquib Date: Fri, 18 Jun 2021 15:07:47 +0200 Subject: [PATCH 02/11] PW-4741 Fixed response check for capture --- .../src/com/adyen/v6/commands/AdyenCaptureCommand.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/adyenv6core/src/com/adyen/v6/commands/AdyenCaptureCommand.java b/adyenv6core/src/com/adyen/v6/commands/AdyenCaptureCommand.java index deed74f68..eef5a06e6 100644 --- a/adyenv6core/src/com/adyen/v6/commands/AdyenCaptureCommand.java +++ b/adyenv6core/src/com/adyen/v6/commands/AdyenCaptureCommand.java @@ -73,14 +73,13 @@ public CaptureResult perform(final CaptureRequest request) { } BaseStoreModel baseStore = order.getStore(); - Assert.notNull(baseStore); + Assert.notNull(baseStore, "BaseStore model is null"); AdyenPaymentService adyenPaymentService = adyenPaymentServiceFactory.createFromBaseStore(baseStore); final PaymentInfoModel paymentInfo = order.getPaymentInfo(); - Assert.notNull(paymentInfo); + Assert.notNull(paymentInfo, "PaymentInfoModel is null"); boolean isImmediateCapture = baseStore.getAdyenImmediateCapture(); - Assert.notNull(isImmediateCapture); boolean autoCapture = isImmediateCapture || ! supportsManualCapture(paymentInfo.getAdyenPaymentMethod()); @@ -91,7 +90,7 @@ public CaptureResult perform(final CaptureRequest request) { try { ModificationResult modificationResult = adyenPaymentService.capture(amount, currency, originalPSPReference, reference); - if (modificationResult.getResponse() == CAPTURE_RECEIVED_RESPONSE) { + if (modificationResult.getResponse().equals(CAPTURE_RECEIVED_RESPONSE)) { result.setTransactionStatus(TransactionStatus.ACCEPTED); //Accepted so that TakePaymentAction doesn't fail result.setTransactionStatusDetails(TransactionStatusDetails.REVIEW_NEEDED); } else { From a356d0847cc71dd20e8e1f23e8c16c308b17d30f Mon Sep 17 00:00:00 2001 From: saquib Date: Wed, 23 Jun 2021 17:39:25 +0200 Subject: [PATCH 03/11] PW-4743 Fixed IE 11 issue, use anonymous function isetead of arrow operator --- .../responsive/common/js/adyen.checkout.js | 94 ++++++++++--------- 1 file changed, 49 insertions(+), 45 deletions(-) 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 cbf3cdeb7..5f36f10e8 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 @@ -333,6 +333,7 @@ var AdyenCheckoutHybris = (function () { initiatePaypal: function (amount, isImmediateCapture, paypalMerchantId, label) { var paypalNode = document.getElementById('adyen-component-button-container-' + label); + var self = this; var adyenComponent = this.checkout.create("paypal", { environment: this.checkout.options.environment, @@ -342,28 +343,28 @@ var AdyenCheckoutHybris = (function () { }, intent: isImmediateCapture ? "capture" : "authorize", merchantId: (this.checkout.options.environment === 'test') ? null : paypalMerchantId, // Your PayPal Merchant ID. Required for accepting live payments. - onChange: (state, component) => { + onChange: function(state, component) { if (!state.isValid) { - this.enablePlaceOrder(label); + self.enablePlaceOrder(label); } }, - onSubmit: (state, component) => { + onSubmit: function(state, component) { if (!state.isValid) { - this.enablePlaceOrder(label); + self.enablePlaceOrder(label); return false; } - this.makePayment(state.data.paymentMethod, component, this.handleResult, label); + self.makePayment(state.data.paymentMethod, component, self.handleResult, label); }, - onCancel: (data, component) => { + onCancel: function(data, component) { // Sets your prefered status of the component when a PayPal payment is cancelled. - this.handleResult(ErrorMessages.PaymentCancelled, true); + self.handleResult(ErrorMessages.PaymentCancelled, true); }, - onError: (error, component) => { + onError: function(error, component) { // Sets your prefered status of the component when an error occurs. - this.handleResult(ErrorMessages.PaymentError, true); + self.handleResult(ErrorMessages.PaymentError, true); }, - onAdditionalDetails: (state, component) => { - this.submitDetails(state.data, this.handleResult); + onAdditionalDetails: function(state, component) { + self.submitDetails(state.data, self.handleResult); } }); @@ -376,6 +377,7 @@ var AdyenCheckoutHybris = (function () { initiateApplePay: function (amount, countryCode, applePayMerchantIdentifier, applePayMerchantName, label) { var applePayNode = document.getElementById('adyen-component-button-container-' + label); + var self = this; var adyenComponent = this.checkout.create("applepay", { amount: { currency: amount.currency, @@ -389,41 +391,42 @@ var AdyenCheckoutHybris = (function () { // Button config buttonType: "plain", buttonColor: "black", - onChange: (state, component) => { + onChange: function(state, component) { if (!state.isValid) { - this.enablePlaceOrder(label); + self.enablePlaceOrder(label); } }, - onSubmit: (state, component) => { + onSubmit: function(state, component) { if (!state.isValid) { - this.enablePlaceOrder(label); + self.enablePlaceOrder(label); return false; } - this.makePayment(state.data.paymentMethod, component, this.handleResult, label); + state.makePayment(state.data.paymentMethod, component, self.handleResult, label); }, - onClick: (resolve, reject) => { - if (this.isTermsAccepted(label)) { + onClick: function(resolve, reject) { + if (self.isTermsAccepted(label)) { resolve(); } else { reject(); - this.handleResult(ErrorMessages.TermsNotAccepted, true); + self.handleResult(ErrorMessages.TermsNotAccepted, true); } } }); adyenComponent.isAvailable() - .then(() => { + .then(function() { adyenComponent.mount(applePayNode); }) - .catch(e => { + .catch(function(e) { // Apple Pay is not available console.log('Something went wrong trying to mount the Apple Pay component: ' + e); - this.handleResult(ErrorMessages.PaymentNotAvailable, true); + self.handleResult(ErrorMessages.PaymentNotAvailable, true); }); }, initiateGooglePay: function (amount, merchantAccount, label) { var googlePayNode = document.getElementById('adyen-component-button-container-' + label); + var self = this; var adyenComponent = this.checkout.create("paywithgoogle", { environment: this.checkout.options.environment, amount: { @@ -435,69 +438,70 @@ var AdyenCheckoutHybris = (function () { merchantName: merchantAccount }, buttonColor: "white", - onChange: (state, component) => { + onChange: function(state, component) { if (!state.isValid) { - this.hideSpinner(); + self.hideSpinner(); } }, - onSubmit: (state, component) => { + onSubmit: function(state, component) { if (!state.isValid) { - this.hideSpinner(); + self.hideSpinner(); return false; } - this.showSpinner(); - this.makePayment(state.data.paymentMethod, component, this.handleResult, label); + state.showSpinner(); + state.makePayment(state.data.paymentMethod, component, state.handleResult, label); }, - onClick: (resolve, reject) => { - if (this.isTermsAccepted(label)) { + onClick: function(resolve, reject) { + if (self.isTermsAccepted(label)) { resolve(); } else { reject(); - this.handleResult(ErrorMessages.TermsNotAccepted, true); + self.handleResult(ErrorMessages.TermsNotAccepted, true); } } }); adyenComponent.isAvailable() - .then(() => { + .then(function() { adyenComponent.mount(googlePayNode); }) - .catch(e => { + .catch(function(e) { // Google Pay is not available console.log('Something went wrong trying to mount the Google Pay component: ' + e); - this.handleResult(ErrorMessages.PaymentNotAvailable, true); + self.handleResult(ErrorMessages.PaymentNotAvailable, true); }); }, initiateMbway: function (label) { var mbwayNode = document.getElementById('adyen-component-container-' + label); + var self = this; var adyenComponent = this.checkout.create("mbway", { showPayButton: false, - onChange: (state, component) => { + onChange: function(state, component) { if (!state.isValid) { - this.enablePlaceOrder(label); + self.enablePlaceOrder(label); } }, - onSubmit: (state, component) => { + onSubmit: function(state, component) { if (!state.isValid) { - this.enablePlaceOrder(label); + self.enablePlaceOrder(label); return; } - this.makePayment(state.data.paymentMethod, component, this.handleResult, label); + self.makePayment(state.data.paymentMethod, component, self.handleResult, label); }, - onAdditionalDetails: (state, component) => { - this.submitDetails(state.data, this.handleResult); + onAdditionalDetails: function(state, component) { + self.submitDetails(state.data, self.handleResult); }, - onError: (error, component) => { + onError: function(error, component) { console.log('Something went wrong trying to make the MBWay payment: ' + error); - this.handleResult(ErrorMessages.PaymentError, true); + self.handleResult(ErrorMessages.PaymentError, true); } }); try { adyenComponent.mount(mbwayNode); - this.configureButton(adyenComponent, false, label); + self.configureButton(adyenComponent, false, label); } catch (e) { console.log('Something went wrong trying to mount the MBWay component: ' + e); } @@ -531,7 +535,7 @@ var AdyenCheckoutHybris = (function () { var actionHandler = { handleAction : function (action) { AdyenCheckoutHybris.checkout.createFromAction(action, { - onAdditionalDetails : (state) => { + onAdditionalDetails : function(state) { AdyenCheckoutHybris.hideSpinner(); AdyenCheckoutHybris.submitDetails(state.data, AdyenCheckoutHybris.handleResult); } From 7c99b77e28238fad30deadc3ca94f605f676cf23 Mon Sep 17 00:00:00 2001 From: renatoma Date: Tue, 29 Jun 2021 12:02:34 +0200 Subject: [PATCH 04/11] PW-3776 - Added support to Amazon Pay --- .../pages/AdyenComponentController.java | 8 ++- .../tags/responsive/checkoutOrderSummary.tag | 8 ++- .../checkout/multi/checkoutSummaryPage.jsp | 9 ++- .../responsive/common/js/adyen.checkout.js | 65 +++++++++++++++++++ adyenv6core/resources/adyenv6core-beans.xml | 1 + adyenv6core/resources/adyenv6core-items.xml | 8 +++ .../v6/constants/Adyenv6coreConstants.java | 1 + .../facades/DefaultAdyenCheckoutFacade.java | 18 +++++ .../com/adyen/v6/populator/CartPopulator.java | 1 + 9 files changed, 113 insertions(+), 6 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 ad97fac7d..06df9b71c 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 @@ -24,6 +24,7 @@ import com.adyen.model.checkout.PaymentMethodDetails; import com.adyen.model.checkout.PaymentsDetailsResponse; import com.adyen.model.checkout.PaymentsResponse; +import com.adyen.model.checkout.details.AmazonPayDetails; import com.adyen.model.checkout.details.ApplePayDetails; import com.adyen.model.checkout.details.GooglePayDetails; import com.adyen.model.checkout.details.MbwayDetails; @@ -64,6 +65,7 @@ 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_PIX; @RestController @@ -108,6 +110,8 @@ public String componentPayment(final HttpServletRequest request) throws AdyenCom paymentMethodDetails = gson.fromJson(requestJson.get("paymentMethodDetails"), ApplePayDetails.class); } else if(GooglePayDetails.GOOGLEPAY.equals(paymentMethod)) { 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)) { paymentMethodDetails = new DefaultPaymentMethodDetails(); paymentMethodDetails.setType(PAYMENT_METHOD_PIX); @@ -176,7 +180,9 @@ protected void validateOrderForm(JsonObject requestJson) throws InvalidCartExcep JsonObject paymentMethodDetails = requestJson.get("paymentMethodDetails").getAsJsonObject(); String paymentMethod = gson.fromJson(paymentMethodDetails.get("type"), String.class); - if(!PAYMENT_METHOD_PIX.equals(paymentMethod) &&(termsCheck == null || !termsCheck)) { + // Pix and Amazon already have the terms validated on a previous step + if(!PAYMENT_METHOD_PIX.equals(paymentMethod) && !PAYMENT_METHOD_AMAZONPAY.equals(paymentMethod) + && (termsCheck == null || !termsCheck)) { throw new InvalidCartException("checkout.error.terms.not.accepted"); } 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 a7a1f5b22..6c0d94cc1 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/checkoutOrderSummary.tag +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/checkoutOrderSummary.tag @@ -10,8 +10,10 @@ + + <%-- Components --%> - +
- -
+
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 cbf3cdeb7..5dba3ecba 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 @@ -468,6 +468,61 @@ var AdyenCheckoutHybris = (function () { this.handleResult(ErrorMessages.PaymentNotAvailable, true); }); }, + + initiateAmazonPay: function (amount, amazonPayConfiguration) { + var label = this.getVisibleLabel(); + var url = new URL(window.location.href); + var componentConfiguration; + if(url.searchParams.has('amazonCheckoutSessionId')) { + // Complete payment, amazon session already created + componentConfiguration = { + amount: amount, + amazonCheckoutSessionId: url.searchParams.get('amazonCheckoutSessionId'), + showOrderButton: false, + onSubmit: (state, component) => { + if (!state.isValid) { + component.setStatus('ready'); + this.hideSpinner(); + return false; + } + component.setStatus('loading'); + this.showSpinner(); + this.makePayment(state.data.paymentMethod, component, this.handleResult, label); + } + }; + } else { + // Pre-payment, login and choose amazon pay method + componentConfiguration = { + environment: this.checkout.options.environment, + amount: amount, + configuration: amazonPayConfiguration, + productType: 'PayOnly', + checkoutMode: 'ProcessOrder', + returnUrl: window.location.origin + ACC.config.encodedContextPath + '/checkout/multi/adyen/summary/view', + onClick: (resolve, reject) => { + if (this.isTermsAccepted(label)) { + resolve(); + } else { + reject(); + this.handleResult(ErrorMessages.TermsNotAccepted, true); + } + } + }; + } + + var amazonPayNode = document.getElementById('adyen-component-button-container-' + label); + var adyenComponent = this.checkout.create("amazonpay", componentConfiguration); + + try { + adyenComponent.mount(amazonPayNode); + if(url.searchParams.has('amazonCheckoutSessionId')) { + adyenComponent.submit(); + } + } catch (e) { + console.log('Something went wrong trying to mount the Amazon Pay component: ' + e); + this.handleResult(ErrorMessages.PaymentNotAvailable, true); + } + }, initiateMbway: function (label) { var mbwayNode = document.getElementById('adyen-component-container-' + label); @@ -648,6 +703,16 @@ var AdyenCheckoutHybris = (function () { this.hideSpinner(); //enable button $("#placeOrder-" + label).prop('disabled', false); + }, + getVisibleLabel: function () { + if(!(window.getComputedStyle(document.getElementById('adyen-checkout-visible-xs')).display === "none")) { + return 'visible-xs'; + } + if(!(window.getComputedStyle(document.getElementById('adyen-checkout-hidden-xs')).display === "none")) { + return 'hidden-xs'; + } + console.log('Something went wrong while trying to compute current visible label'); + return ''; } }; })(); diff --git a/adyenv6core/resources/adyenv6core-beans.xml b/adyenv6core/resources/adyenv6core-beans.xml index 904313fc0..b963c0d22 100644 --- a/adyenv6core/resources/adyenv6core-beans.xml +++ b/adyenv6core/resources/adyenv6core-beans.xml @@ -44,6 +44,7 @@ + diff --git a/adyenv6core/resources/adyenv6core-items.xml b/adyenv6core/resources/adyenv6core-items.xml index 48c6db4ee..47c254c97 100644 --- a/adyenv6core/resources/adyenv6core-items.xml +++ b/adyenv6core/resources/adyenv6core-items.xml @@ -73,6 +73,10 @@ Apple Pay merchant identifier + + Amazon Pay configuration + + @@ -444,6 +448,10 @@ Apple Pay merchant identifier + + Amazon Pay configuration + + Adyen Encrypted Card Number diff --git a/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java b/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java index 8ecfcf463..e171195b1 100644 --- a/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java +++ b/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java @@ -48,6 +48,7 @@ public final class Adyenv6coreConstants extends GeneratedAdyenv6coreConstants { final public static String PAYMENT_METHOD_PAYPAL = "paypal"; final public static String PAYMENT_METHOD_SCHEME = "scheme"; final public static String PAYMENT_METHOD_APPLEPAY = "applepay"; + final public static String PAYMENT_METHOD_AMAZONPAY = "amazonpay"; public static final String PROCESS_EVENT_ADYEN_CAPTURED = "AdyenCaptured"; diff --git a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java index f97d02dc4..3d7e3d78c 100644 --- a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java +++ b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java @@ -148,6 +148,7 @@ import static com.adyen.v6.constants.Adyenv6coreConstants.OPENINVOICE_METHODS_API; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHODS_ALLOW_SOCIAL_SECURITY_NUMBER; +import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_AMAZONPAY; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_APPLEPAY; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_BOLETO; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_BOLETO_SANTANDER; @@ -234,6 +235,7 @@ public class DefaultAdyenCheckoutFacade implements AdyenCheckoutFacade { public static final String MODEL_COUNTRY_CODE = "countryCode"; public static final String MODEL_APPLEPAY_MERCHANT_IDENTIFIER = "applePayMerchantIdentifier"; public static final String MODEL_APPLEPAY_MERCHANT_NAME = "applePayMerchantName"; + public static final String MODEL_AMAZONPAY_CONFIGURATION = "amazonPayConfiguration"; public static final String ECOMMERCE_SHOPPER_INTERACTION = "Ecommerce"; public static final String MODEL_CARD_HOLDER_NAME_REQUIRED = "cardHolderNameRequired"; public static final String IS_CARD_HOLDER_NAME_REQUIRED_PROPERTY = "isCardHolderNameRequired"; @@ -800,6 +802,18 @@ public void initializeCheckoutData(Model model) { } } + //amazon pay + Optional amazonPayMethod = alternativePaymentMethods.stream() + .filter(paymentMethod -> !paymentMethod.getType().isEmpty() + && PAYMENT_METHOD_AMAZONPAY.contains(paymentMethod.getType())) + .findFirst(); + if(amazonPayMethod.isPresent()) { + Map amazonPayConfiguration = amazonPayMethod.get().getConfiguration(); + if(!CollectionUtils.isEmpty(amazonPayConfiguration)) { + cartModel.setAdyenAmazonPayConfiguration(amazonPayConfiguration); + } + } + baseStore = baseStoreService.getCurrentBaseStore(); //Verify allowedCards @@ -905,6 +919,7 @@ public void initializeSummaryData(Model model) { model.addAttribute(MODEL_PAYPAL_MERCHANT_ID, baseStore.getAdyenPaypalMerchantId()); model.addAttribute(MODEL_APPLEPAY_MERCHANT_IDENTIFIER, cartData.getAdyenApplePayMerchantIdentifier()); model.addAttribute(MODEL_APPLEPAY_MERCHANT_NAME, cartData.getAdyenApplePayMerchantName()); + model.addAttribute(MODEL_AMAZONPAY_CONFIGURATION, new Gson().toJson(cartData.getAdyenAmazonPayConfiguration())); model.addAttribute(MODEL_COUNTRY_CODE, cartData.getDeliveryAddress().getCountry().getIsocode()); } @@ -1056,6 +1071,9 @@ public PaymentInfoModel createPaymentInfo(final CartModel cartModel, AdyenPaymen paymentInfo.setAdyenApplePayMerchantName(cartModel.getAdyenApplePayMerchantName()); paymentInfo.setAdyenApplePayMerchantIdentifier(cartModel.getAdyenApplePayMerchantIdentifier()); + //amazon pay + paymentInfo.setAdyenAmazonPayConfiguration(cartModel.getAdyenAmazonPayConfiguration()); + //combo card fields paymentInfo.setCardType(adyenPaymentForm.getCardType()); paymentInfo.setCardBrand(adyenPaymentForm.getCardBrand()); diff --git a/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java b/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java index 121549be5..803c0d781 100644 --- a/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java +++ b/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java @@ -63,6 +63,7 @@ public void populate(final CartModel source, final CartData target) throws Conve target.setAdyenShopperEmail(paymentInfo.getAdyenShopperEmail()); target.setAdyenShopperTelephone(paymentInfo.getAdyenTelephone()); target.setAdyenGiftCardBrand(paymentInfo.getAdyenGiftCardBrand()); + target.setAdyenAmazonPayConfiguration(paymentInfo.getAdyenAmazonPayConfiguration()); } } From 632a14e52cd0039f9eafb51a7e90cda45e3d245e Mon Sep 17 00:00:00 2001 From: renatoma Date: Tue, 29 Jun 2021 14:28:39 +0200 Subject: [PATCH 05/11] Small refactor to AdyenCheckoutFlowFacade --- .../resources/adyenv6b2ccheckoutaddon-spring.xml | 2 +- .../flow/impl/AdyenCheckoutFlowFacade.java | 7 ------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/adyenv6b2ccheckoutaddon/resources/adyenv6b2ccheckoutaddon-spring.xml b/adyenv6b2ccheckoutaddon/resources/adyenv6b2ccheckoutaddon-spring.xml index 9f5153e8f..91e10640d 100644 --- a/adyenv6b2ccheckoutaddon/resources/adyenv6b2ccheckoutaddon-spring.xml +++ b/adyenv6b2ccheckoutaddon/resources/adyenv6b2ccheckoutaddon-spring.xml @@ -46,7 +46,7 @@ - + diff --git a/adyenv6b2ccheckoutaddon/src/com/adyen/v6/acceleratorfacades/flow/impl/AdyenCheckoutFlowFacade.java b/adyenv6b2ccheckoutaddon/src/com/adyen/v6/acceleratorfacades/flow/impl/AdyenCheckoutFlowFacade.java index e846f40e3..42525ad5e 100644 --- a/adyenv6b2ccheckoutaddon/src/com/adyen/v6/acceleratorfacades/flow/impl/AdyenCheckoutFlowFacade.java +++ b/adyenv6b2ccheckoutaddon/src/com/adyen/v6/acceleratorfacades/flow/impl/AdyenCheckoutFlowFacade.java @@ -37,11 +37,4 @@ public CartData getCheckoutCart() return cartData; } - - @Override - public boolean hasNoPaymentInfo() - { - final CartData cartData = getCheckoutCart(); - return cartData == null || cartData.getPaymentInfo() == null; - } } From 9ac9c79e11d42d167937dc300ae3c2c91f3dc201 Mon Sep 17 00:00:00 2001 From: renatoma Date: Wed, 30 Jun 2021 15:20:24 +0200 Subject: [PATCH 06/11] Added addressDetails to Amazon Pay / Added amazonpay to supportsManualCapture list --- .../pages/checkout/multi/checkoutSummaryPage.jsp | 2 +- .../_ui/responsive/common/js/adyen.checkout.js | 13 +++++++++++-- .../com/adyen/v6/commands/AdyenCaptureCommand.java | 1 + .../v6/facades/DefaultAdyenCheckoutFacade.java | 6 ++++-- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/checkout/multi/checkoutSummaryPage.jsp b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/checkout/multi/checkoutSummaryPage.jsp index 8a274004e..f34fe258f 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/checkout/multi/checkoutSummaryPage.jsp +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/views/responsive/pages/checkout/multi/checkoutSummaryPage.jsp @@ -58,7 +58,7 @@ var amountJS = {value: "${amount.value}", currency: "${amount.currency}"}; - AdyenCheckoutHybris.initiateAmazonPay(amountJS, ${amazonPayConfiguration}); + AdyenCheckoutHybris.initiateAmazonPay(amountJS, ${deliveryAddress}, ${amazonPayConfiguration}); <%-- API only payments methods --%> 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 5dba3ecba..683c7a2bd 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 @@ -469,7 +469,7 @@ var AdyenCheckoutHybris = (function () { }); }, - initiateAmazonPay: function (amount, amazonPayConfiguration) { + initiateAmazonPay: function (amount, deliveryAddress, amazonPayConfiguration) { var label = this.getVisibleLabel(); var url = new URL(window.location.href); var componentConfiguration; @@ -494,9 +494,18 @@ var AdyenCheckoutHybris = (function () { // Pre-payment, login and choose amazon pay method componentConfiguration = { environment: this.checkout.options.environment, + addressDetails: { + name: deliveryAddress.firstName + ' ' + deliveryAddress.lastName, + addressLine1: deliveryAddress.line1, + addressLine2: deliveryAddress.line2, + city: deliveryAddress.town, + postalCode: deliveryAddress.postalCode, + countryCode: deliveryAddress.country.isocode, + phoneNumber: deliveryAddress.phone + }, amount: amount, configuration: amazonPayConfiguration, - productType: 'PayOnly', + productType: 'PayAndShip', checkoutMode: 'ProcessOrder', returnUrl: window.location.origin + ACC.config.encodedContextPath + '/checkout/multi/adyen/summary/view', onClick: (resolve, reject) => { diff --git a/adyenv6core/src/com/adyen/v6/commands/AdyenCaptureCommand.java b/adyenv6core/src/com/adyen/v6/commands/AdyenCaptureCommand.java index eef5a06e6..a56a4e6b8 100644 --- a/adyenv6core/src/com/adyen/v6/commands/AdyenCaptureCommand.java +++ b/adyenv6core/src/com/adyen/v6/commands/AdyenCaptureCommand.java @@ -156,6 +156,7 @@ private boolean supportsManualCapture(String paymentMethod) { case "discover_applepay": case "maestro_applepay": case "paywithgoogle": + case "amazonpay": return true; } diff --git a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java index 3d7e3d78c..b6089dfe9 100644 --- a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java +++ b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java @@ -236,6 +236,7 @@ public class DefaultAdyenCheckoutFacade implements AdyenCheckoutFacade { public static final String MODEL_APPLEPAY_MERCHANT_IDENTIFIER = "applePayMerchantIdentifier"; public static final String MODEL_APPLEPAY_MERCHANT_NAME = "applePayMerchantName"; public static final String MODEL_AMAZONPAY_CONFIGURATION = "amazonPayConfiguration"; + public static final String MODEL_DELIVERY_ADDRESS = "deliveryAddress"; public static final String ECOMMERCE_SHOPPER_INTERACTION = "Ecommerce"; public static final String MODEL_CARD_HOLDER_NAME_REQUIRED = "cardHolderNameRequired"; public static final String IS_CARD_HOLDER_NAME_REQUIRED_PROPERTY = "isCardHolderNameRequired"; @@ -904,6 +905,7 @@ public void initializeSummaryData(Model model) { BaseStoreModel baseStore = baseStoreService.getCurrentBaseStore(); Amount amount = Util.createAmount(cartData.getTotalPrice().getValue(), cartData.getTotalPrice().getCurrencyIso()); + Gson gson = new Gson(); model.addAttribute(MODEL_SELECTED_PAYMENT_METHOD, cartData.getAdyenPaymentMethod()); model.addAttribute(MODEL_DF_URL, adyenPaymentService.getDeviceFingerprintUrl()); @@ -919,9 +921,9 @@ public void initializeSummaryData(Model model) { model.addAttribute(MODEL_PAYPAL_MERCHANT_ID, baseStore.getAdyenPaypalMerchantId()); model.addAttribute(MODEL_APPLEPAY_MERCHANT_IDENTIFIER, cartData.getAdyenApplePayMerchantIdentifier()); model.addAttribute(MODEL_APPLEPAY_MERCHANT_NAME, cartData.getAdyenApplePayMerchantName()); - model.addAttribute(MODEL_AMAZONPAY_CONFIGURATION, new Gson().toJson(cartData.getAdyenAmazonPayConfiguration())); + model.addAttribute(MODEL_AMAZONPAY_CONFIGURATION, gson.toJson(cartData.getAdyenAmazonPayConfiguration())); model.addAttribute(MODEL_COUNTRY_CODE, cartData.getDeliveryAddress().getCountry().getIsocode()); - + model.addAttribute(MODEL_DELIVERY_ADDRESS, gson.toJson(cartData.getDeliveryAddress())); } private boolean isHiddenPaymentMethod(PaymentMethod paymentMethod) { From efc6cfed3865d10f3db013e90e752a25aeeca15d Mon Sep 17 00:00:00 2001 From: renatoma Date: Wed, 30 Jun 2021 17:28:05 +0200 Subject: [PATCH 07/11] Removed AdyenAmazonPayConfiguration from PaymentInfo --- adyenv6core/resources/adyenv6core-items.xml | 4 ---- .../src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java | 3 --- adyenv6core/src/com/adyen/v6/populator/CartPopulator.java | 2 +- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/adyenv6core/resources/adyenv6core-items.xml b/adyenv6core/resources/adyenv6core-items.xml index 47c254c97..2111ef615 100644 --- a/adyenv6core/resources/adyenv6core-items.xml +++ b/adyenv6core/resources/adyenv6core-items.xml @@ -448,10 +448,6 @@ Apple Pay merchant identifier - - Amazon Pay configuration - - Adyen Encrypted Card Number diff --git a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java index b6089dfe9..dd7218f84 100644 --- a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java +++ b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java @@ -1073,9 +1073,6 @@ public PaymentInfoModel createPaymentInfo(final CartModel cartModel, AdyenPaymen paymentInfo.setAdyenApplePayMerchantName(cartModel.getAdyenApplePayMerchantName()); paymentInfo.setAdyenApplePayMerchantIdentifier(cartModel.getAdyenApplePayMerchantIdentifier()); - //amazon pay - paymentInfo.setAdyenAmazonPayConfiguration(cartModel.getAdyenAmazonPayConfiguration()); - //combo card fields paymentInfo.setCardType(adyenPaymentForm.getCardType()); paymentInfo.setCardBrand(adyenPaymentForm.getCardBrand()); diff --git a/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java b/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java index 803c0d781..f414fac37 100644 --- a/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java +++ b/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java @@ -63,7 +63,7 @@ public void populate(final CartModel source, final CartData target) throws Conve target.setAdyenShopperEmail(paymentInfo.getAdyenShopperEmail()); target.setAdyenShopperTelephone(paymentInfo.getAdyenTelephone()); target.setAdyenGiftCardBrand(paymentInfo.getAdyenGiftCardBrand()); - target.setAdyenAmazonPayConfiguration(paymentInfo.getAdyenAmazonPayConfiguration()); + target.setAdyenAmazonPayConfiguration(source.getAdyenAmazonPayConfiguration()); } } From eba538e520288b68c619191eb599b66a115dd020 Mon Sep 17 00:00:00 2001 From: saquib Date: Mon, 12 Jul 2021 16:37:34 +0200 Subject: [PATCH 08/11] PW-5001 Added support for PayBright payment method --- .../web/webroot/WEB-INF/messages/base.properties | 1 + .../web/webroot/WEB-INF/messages/base_en.properties | 1 + .../web/webroot/WEB-INF/messages/base_pt.properties | 1 + .../WEB-INF/tags/responsive/alternativeMethod.tag | 13 +++++++++++++ .../checkout/multi/selectPaymentMethodPage.jsp | 1 + .../_ui/responsive/common/js/adyen.checkout.js | 9 +++++++++ .../adyen/v6/constants/Adyenv6coreConstants.java | 2 ++ .../com/adyen/v6/factory/AdyenRequestFactory.java | 3 +++ 8 files changed, 31 insertions(+) diff --git a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base.properties b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base.properties index c4608e54e..154fee068 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base.properties +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base.properties @@ -31,6 +31,7 @@ payment.method.first.name=First name payment.method.last.name=Last name payment.method.issuer.selector=Please select issuer payment.method.terminal.selector=Select your terminal +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 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 c4608e54e..154fee068 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_en.properties +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_en.properties @@ -31,6 +31,7 @@ payment.method.first.name=First name payment.method.last.name=Last name payment.method.issuer.selector=Please select issuer payment.method.terminal.selector=Select your terminal +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 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 460c95f7c..23d945d12 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_pt.properties +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/messages/base_pt.properties @@ -31,6 +31,7 @@ payment.method.first.name=Nome payment.method.last.name=Sobrenome payment.method.issuer.selector=Selecione o banco 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 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 8b7792b6e..cba7eeaae 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/alternativeMethod.tag +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/alternativeMethod.tag @@ -28,6 +28,7 @@ <%@ attribute name="showLastName" required="false" type="java.lang.Boolean" %> <%@ attribute name="showTerminalList" required="false" type="java.lang.Boolean" %> <%@ attribute name="countryCode" required="false" type="java.lang.String" %> +<%@ attribute name="showTelephoneNumber" required="false" type="java.lang.Boolean" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="adyen" tagdir="/WEB-INF/tags/addons/adyenv6b2ccheckoutaddon/responsive" %> @@ -129,6 +130,18 @@
+ + + +
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 4fe5fb304..1b7c95349 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 @@ -201,6 +201,7 @@ showLastName="${paymentMethod.type=='pix'}" showSocialSecurityNumber="${showSocialSecurityNumber || paymentMethod.type=='pix'}" countryCode="${countryCode}" + showTelephoneNumber="${paymentMethod.type=='paybright'}" /> 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 ac11735cc..85f861a8c 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 @@ -136,6 +136,15 @@ var AdyenCheckoutHybris = (function () { } } + if (paymentMethod === "paybright") { + var phoneNumber = $("#p_method_adyen_hpp_paybright_telephonenumber").val(); + if (!phoneNumber) { + window.alert("Please fill phone number"); + document.getElementById("p_method_adyen_hpp_paybright_telephonenumber").scrollIntoView(); + return false; + } + } + if (paymentMethod === "giftcard") { $( 'input[name="giftCardBrand"]' ).val($( 'input[type=radio][name=paymentMethod]:checked' ).attr('brand')); } diff --git a/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java b/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java index e171195b1..dedbc92e5 100644 --- a/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java +++ b/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java @@ -59,6 +59,7 @@ public final class Adyenv6coreConstants extends GeneratedAdyenv6coreConstants { public static final String RATEPAY = "ratepay"; public static final String AFTERPAY = "afterpay_default"; public static final String AFTERPAY_TOUCH = "afterpaytouch"; + public static final String PAYBRIGHT = "paybright"; public static final String COUNTRY_CODE_SWEDEN = "SE"; public static final String COUNTRY_CODE_DENMARK = "DK"; public static final String COUNTRY_CODE_FINLAND = "FI"; @@ -87,6 +88,7 @@ private Adyenv6coreConstants() { add(CLEARPAY); add(AFTERPAY); add(AFTERPAY_TOUCH); + add(PAYBRIGHT); }}); diff --git a/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java b/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java index 582dc4d61..77426059d 100644 --- a/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java +++ b/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java @@ -91,6 +91,7 @@ import static com.adyen.v6.constants.Adyenv6coreConstants.ISSUER_PAYMENT_METHODS; import static com.adyen.v6.constants.Adyenv6coreConstants.KLARNA; import static com.adyen.v6.constants.Adyenv6coreConstants.OPENINVOICE_METHODS_API; +import static com.adyen.v6.constants.Adyenv6coreConstants.PAYBRIGHT; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_BOLETO; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_BOLETO_SANTANDER; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_CC; @@ -832,6 +833,8 @@ public void setOpenInvoiceData(PaymentsRequest paymentsRequest, CartData cartDat paymentsRequest.setShopperEmail(cartData.getAdyenShopperEmail()); paymentsRequest.setTelephoneNumber(cartData.getAdyenShopperTelephone()); paymentsRequest.setShopperName(getAfterPayShopperName(cartData)); + } else if (PAYBRIGHT.equals(cartData.getAdyenPaymentMethod())) { + paymentsRequest.setTelephoneNumber(cartData.getAdyenShopperTelephone()); } // set the invoice lines From b9a1ad80d4508c56eb6853d6a37719515698744b Mon Sep 17 00:00:00 2001 From: Tom Date: Mon, 12 Jul 2021 19:18:28 +0100 Subject: [PATCH 09/11] Fix String comparison bug in refund command --- .../src/com/adyen/v6/commands/AdyenFollowOnRefundCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adyenv6core/src/com/adyen/v6/commands/AdyenFollowOnRefundCommand.java b/adyenv6core/src/com/adyen/v6/commands/AdyenFollowOnRefundCommand.java index 8b4bdbfac..f1de2604b 100644 --- a/adyenv6core/src/com/adyen/v6/commands/AdyenFollowOnRefundCommand.java +++ b/adyenv6core/src/com/adyen/v6/commands/AdyenFollowOnRefundCommand.java @@ -78,7 +78,7 @@ public RefundResult perform(FollowOnRefundRequest request) { LOG.debug("Refund response: " + modificationResult.getResponse()); //change status to ACCEPTED if there is no error - if (modificationResult.getResponse() == REFUND_RECEIVED_RESPONSE) { + if (modificationResult.getResponse().equals(REFUND_RECEIVED_RESPONSE)) { result.setTransactionStatus(ACCEPTED); result.setTransactionStatusDetails(REVIEW_NEEDED); } From f679b277569991971428698cf50e51ea1f830705 Mon Sep 17 00:00:00 2001 From: saquib Date: Thu, 29 Jul 2021 09:56:38 +0200 Subject: [PATCH 10/11] PW-5001 Added backend validation for telephone number --- .../v6/facades/DefaultAdyenCheckoutFacade.java | 5 +++++ .../validation/AdyenPaymentFormValidator.java | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java index dd7218f84..7acacd9de 100644 --- a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java +++ b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java @@ -146,6 +146,7 @@ import static com.adyen.v6.constants.Adyenv6coreConstants.KLARNA; import static com.adyen.v6.constants.Adyenv6coreConstants.OPENINVOICE_METHODS_ALLOW_SOCIAL_SECURITY_NUMBER; import static com.adyen.v6.constants.Adyenv6coreConstants.OPENINVOICE_METHODS_API; +import static com.adyen.v6.constants.Adyenv6coreConstants.PAYBRIGHT; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHODS_ALLOW_SOCIAL_SECURITY_NUMBER; import static com.adyen.v6.constants.Adyenv6coreConstants.PAYMENT_METHOD_AMAZONPAY; @@ -1121,6 +1122,10 @@ public void handlePaymentForm(AdyenPaymentForm adyenPaymentForm, BindingResult b boolean holderNameRequired = getHolderNameRequired(); AdyenPaymentFormValidator adyenPaymentFormValidator = new AdyenPaymentFormValidator(cartModel.getAdyenStoredCards(), showRememberDetails, showSocialSecurityNumber, holderNameRequired); + if (PAYBRIGHT.equals(adyenPaymentForm.getPaymentMethod())) { + adyenPaymentFormValidator.setTelephoneNumberRequired(true); + } + adyenPaymentFormValidator.validate(adyenPaymentForm, bindingResult); if (bindingResult.hasErrors()) { diff --git a/adyenv6core/src/com/adyen/v6/forms/validation/AdyenPaymentFormValidator.java b/adyenv6core/src/com/adyen/v6/forms/validation/AdyenPaymentFormValidator.java index 397d50744..d2d8fd495 100644 --- a/adyenv6core/src/com/adyen/v6/forms/validation/AdyenPaymentFormValidator.java +++ b/adyenv6core/src/com/adyen/v6/forms/validation/AdyenPaymentFormValidator.java @@ -35,6 +35,7 @@ public class AdyenPaymentFormValidator implements Validator { private boolean showRememberTheseDetails; private boolean showSocialSecurityNumber; private final boolean cardHolderNameRequired; + private boolean telephoneNumberRequired; public AdyenPaymentFormValidator(Set storedCards, boolean showRememberTheseDetails, boolean showSocialSecurityNumber, boolean cardHolderNameRequired) { this.storedCards = storedCards; @@ -48,6 +49,14 @@ public boolean supports(final Class aClass) { return AdyenPaymentForm.class.equals(aClass); } + public boolean isTelephoneNumberRequired() { + return telephoneNumberRequired; + } + + public void setTelephoneNumberRequired(boolean telephoneNumberRequired) { + this.telephoneNumberRequired = telephoneNumberRequired; + } + @Override public void validate(Object o, Errors errors) { AdyenPaymentForm form = (AdyenPaymentForm) o; @@ -94,7 +103,12 @@ public void validate(Object o, Errors errors) { errors.reject("checkout.error.paymentethod.dob.invalid"); } } - if (form.getUseAdyenDeliveryAddress() == false && form.getBillingAddress()!=null) { + + if (telephoneNumberRequired && StringUtils.isEmpty(form.getTelephoneNumber())) { + errors.reject("checkout.error.paymentmethod.telephonenumber.invalid"); + } + + if (!form.getUseAdyenDeliveryAddress() && form.getBillingAddress()!=null) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "billingAddress.titleCode", "address.title.invalid"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "billingAddress.firstName", "address.firstName.invalid"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "billingAddress.lastName", "address.lastName.invalid"); From 0419c0a90d57c5b0d1bb404d095b4b9da6aaf697 Mon Sep 17 00:00:00 2001 From: saquib Date: Fri, 30 Jul 2021 17:04:40 +0200 Subject: [PATCH 11/11] Updated version to 10.1.0 for release --- .../resources/adyenv6b2ccheckoutaddon.build.number | 4 ++-- adyenv6backoffice/resources/adyenv6backoffice.build.number | 4 ++-- adyenv6core/resources/adyenv6core.build.number | 4 ++-- .../src/com/adyen/v6/constants/Adyenv6coreConstants.java | 2 +- .../resources/adyenv6fulfilmentprocess.build.number | 4 ++-- .../resources/adyenv6notification.build.number | 4 ++-- .../resources/adyenv6ordermanagement.build.number | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/adyenv6b2ccheckoutaddon/resources/adyenv6b2ccheckoutaddon.build.number b/adyenv6b2ccheckoutaddon/resources/adyenv6b2ccheckoutaddon.build.number index 3278a6af0..bc6999c8c 100644 --- a/adyenv6b2ccheckoutaddon/resources/adyenv6b2ccheckoutaddon.build.number +++ b/adyenv6b2ccheckoutaddon/resources/adyenv6b2ccheckoutaddon.build.number @@ -7,5 +7,5 @@ module.name=platform-module name=adyenv6b2ccheckoutaddon releasedate=20170509 1903 vendor=adyen -version=10.0.0 -version.api=10.0.0 +version=10.1.0 +version.api=10.1.0 diff --git a/adyenv6backoffice/resources/adyenv6backoffice.build.number b/adyenv6backoffice/resources/adyenv6backoffice.build.number index f4d38d7d1..fef83e621 100644 --- a/adyenv6backoffice/resources/adyenv6backoffice.build.number +++ b/adyenv6backoffice/resources/adyenv6backoffice.build.number @@ -7,5 +7,5 @@ module.name=platform-module name=adyenv6backoffice releasedate=20170509 1903 vendor=adyen -version=10.0.0 -version.api=10.0.0 +version=10.1.0 +version.api=10.1.0 diff --git a/adyenv6core/resources/adyenv6core.build.number b/adyenv6core/resources/adyenv6core.build.number index 4c5634e12..dd774a866 100644 --- a/adyenv6core/resources/adyenv6core.build.number +++ b/adyenv6core/resources/adyenv6core.build.number @@ -6,5 +6,5 @@ group.id=com.adyen.v6 module.name=platform-module name=adyenv6core vendor=adyen -version=10.0.0 -version.api=10.0.0 +version=10.1.0 +version.api=10.1.0 diff --git a/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java b/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java index dedbc92e5..6f1ab0605 100644 --- a/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java +++ b/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java @@ -31,7 +31,7 @@ public final class Adyenv6coreConstants extends GeneratedAdyenv6coreConstants { public static final String EXTENSIONNAME = "adyenv6core"; public static final String PLUGIN_NAME = "adyen-hybris"; - public static final String PLUGIN_VERSION = "10.0.0"; + public static final String PLUGIN_VERSION = "10.1.0"; public static final String PAYMENT_PROVIDER = "Adyen"; public static final String PAYMENT_METHOD ="paymentMethod"; diff --git a/adyenv6fulfilmentprocess/resources/adyenv6fulfilmentprocess.build.number b/adyenv6fulfilmentprocess/resources/adyenv6fulfilmentprocess.build.number index 7f340fe0d..25dce7709 100644 --- a/adyenv6fulfilmentprocess/resources/adyenv6fulfilmentprocess.build.number +++ b/adyenv6fulfilmentprocess/resources/adyenv6fulfilmentprocess.build.number @@ -6,5 +6,5 @@ group.id=com.adyen.v6 module.name=platform-module name=adyenv6fulfilmentprocess vendor=adyen -version=10.0.0 -version.api=10.0.0 +version=10.1.0 +version.api=10.1.0 diff --git a/adyenv6notification/resources/adyenv6notification.build.number b/adyenv6notification/resources/adyenv6notification.build.number index 19820dbc1..79ec66071 100644 --- a/adyenv6notification/resources/adyenv6notification.build.number +++ b/adyenv6notification/resources/adyenv6notification.build.number @@ -5,5 +5,5 @@ description=adyenv6notification name=adyenv6notification releasedate=20170803 1323 vendor=adyen -version=10.0.0 -version.api=10.0.0 +version=10.1.0 +version.api=10.1.0 diff --git a/adyenv6ordermanagement/resources/adyenv6ordermanagement.build.number b/adyenv6ordermanagement/resources/adyenv6ordermanagement.build.number index 1a598929c..b70753026 100644 --- a/adyenv6ordermanagement/resources/adyenv6ordermanagement.build.number +++ b/adyenv6ordermanagement/resources/adyenv6ordermanagement.build.number @@ -7,5 +7,5 @@ module.name=platform-module name=adyenv6ordermanagement releasedate=20170509 1754 vendor=adyen -version=10.0.0 -version.api=10.0.0 +version=10.1.0 +version.api=10.1.0