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 79c6cf85d..ed22227af 100644 --- a/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/alternativeMethod.tag +++ b/adyenv6b2ccheckoutaddon/acceleratoraddon/web/webroot/WEB-INF/tags/responsive/alternativeMethod.tag @@ -129,6 +129,10 @@ name="lastName" value="${cartData.deliveryAddress.lastName}"> + + +
+
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 9b90a4878..220784dff 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 @@ -71,6 +71,12 @@ AdyenCheckoutHybris.initiateEps( ${issuerLists['eps']} ); + + + AdyenCheckoutHybris.initiateAfterPay("${countryCode}"); + + + var storedCardJS = 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 4d72c9d95..fee398040 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 @@ -28,6 +28,7 @@ var AdyenCheckoutHybris = (function () { oneClickCards: {}, selectedCardBrand: null, sepaDirectDebit:null, + afterPay: null, convertCardBrand: function () { var cardBrand = this.selectedCardBrand; @@ -120,6 +121,18 @@ var AdyenCheckoutHybris = (function () { } } + if (paymentMethod === "afterpay_default") { + if (!this.afterPay.state.isValid) { + window.alert("Please fill all the details"); + this.afterPay.showValidation(); + return false; + } + var dob = $("input[name=dateOfBirth]").val(); + if ( dob ) { + $( "#dob" ).val( dob ); + } + } + return true; }, @@ -157,9 +170,9 @@ var AdyenCheckoutHybris = (function () { */ setCustomPaymentMethodValues: function () { var paymentMethod = $( 'input[type=radio][name=paymentMethod]:checked' ).val(); - var dob = $( '#p_method_adyen_hpp_' + paymentMethod + '_dob' ); + var dob = $( '#p_method_adyen_hpp_' + paymentMethod + '_dob' ).val(); if ( dob ) { - $( "#dob" ).val( dob.val() ); + $( "#dob" ).val( dob ); } var ssn = $( '#p_method_adyen_hpp_' + paymentMethod + '_ssn' ); @@ -427,6 +440,23 @@ var AdyenCheckoutHybris = (function () { } }, + initiateAfterPay: function (countryCode) { + this.afterPay = this.checkout.create("afterpay_default", { + countryCode: countryCode, + visibility: { // Optional configuration + personalDetails: "editable", + billingAddress: "hidden", + deliveryAddress: "hidden" + } + }); + + try { + this.afterPay.mount('#afterpay-container'); + } catch (e) { + console.log('Something went wrong trying to mount the afterpay component: ' + e); + } + }, + configureButton: function (form, useSpinner, label) { $(document).ready(function () { $("#placeOrder-" + label).click(function () { diff --git a/adyenv6core/resources/adyenv6core-beans.xml b/adyenv6core/resources/adyenv6core-beans.xml index d1e677ca3..8e942d482 100644 --- a/adyenv6core/resources/adyenv6core-beans.xml +++ b/adyenv6core/resources/adyenv6core-beans.xml @@ -40,6 +40,9 @@ + + + diff --git a/adyenv6core/resources/adyenv6core-items.xml b/adyenv6core/resources/adyenv6core-items.xml index ebb2c8c9d..113be70b6 100644 --- a/adyenv6core/resources/adyenv6core-items.xml +++ b/adyenv6core/resources/adyenv6core-items.xml @@ -345,6 +345,18 @@ Shopper's date of birth + + Shopper's email address + + + + Shopper's gender + + + + Shopper's telephone number + + Shopper's social security number (applicable for openinvoice methods) diff --git a/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java b/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java index b4ca31cc5..f1e9f1e90 100644 --- a/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java +++ b/adyenv6core/src/com/adyen/v6/constants/Adyenv6coreConstants.java @@ -81,7 +81,7 @@ private Adyenv6coreConstants() { add(KLARNA_SLICE); add(AFFIRM); add(CLEARPAY); -// add(AFTERPAY); // not supported yet + add(AFTERPAY); }}); diff --git a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java index 77da0b5b7..a0a94b8b3 100644 --- a/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java +++ b/adyenv6core/src/com/adyen/v6/facades/DefaultAdyenCheckoutFacade.java @@ -940,6 +940,7 @@ public void initializeCheckoutData(Model model) { model.addAttribute(MODEL_AMOUNT, amount); model.addAttribute(MODEL_IMMEDIATE_CAPTURE, isImmediateCapture()); model.addAttribute(MODEL_PAYPAL_MERCHANT_ID, baseStore.getAdyenPaypalMerchantId()); + model.addAttribute(MODEL_COUNTRY_CODE, cartData.getDeliveryAddress().getCountry().getIsocode()); modelService.save(cartModel); } @@ -1095,6 +1096,11 @@ public PaymentInfoModel createPaymentInfo(final CartModel cartModel, AdyenPaymen paymentInfo.setAdyenSepaOwnerName(adyenPaymentForm.getSepaOwnerName()); paymentInfo.setAdyenSepaIbanNumber(adyenPaymentForm.getSepaIbanNumber()); + // AfterPay fields + paymentInfo.setAdyenTelephone(adyenPaymentForm.getTelephoneNumber()); + paymentInfo.setAdyenShopperEmail(adyenPaymentForm.getShopperEmail()); + paymentInfo.setAdyenShopperGender(adyenPaymentForm.getGender()); + // Boleto fields paymentInfo.setAdyenFirstName(adyenPaymentForm.getFirstName()); paymentInfo.setAdyenLastName(adyenPaymentForm.getLastName()); diff --git a/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java b/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java index 7083bf610..432680f67 100644 --- a/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java +++ b/adyenv6core/src/com/adyen/v6/factory/AdyenRequestFactory.java @@ -84,6 +84,7 @@ import java.util.HashMap; import java.util.List; +import static com.adyen.v6.constants.Adyenv6coreConstants.AFTERPAY; import static com.adyen.v6.constants.Adyenv6coreConstants.CARD_TYPE_DEBIT; import static com.adyen.v6.constants.Adyenv6coreConstants.ISSUER_PAYMENT_METHODS; import static com.adyen.v6.constants.Adyenv6coreConstants.KLARNA; @@ -830,6 +831,12 @@ public void setOpenInvoiceData(PaymentsRequest paymentsRequest, CartData cartDat paymentsRequest.setDeviceFingerprint(cartData.getAdyenDfValue()); } + if (AFTERPAY.equals(cartData.getAdyenPaymentMethod())) { + paymentsRequest.setShopperEmail(cartData.getAdyenShopperEmail()); + paymentsRequest.setTelephoneNumber(cartData.getAdyenShopperTelephone()); + paymentsRequest.setShopperName(getAfterPayShopperName(cartData)); + } + // set the invoice lines List invoiceLines = new ArrayList<>(); String currency = cartData.getTotalPrice().getCurrencyIso(); @@ -904,6 +911,14 @@ public void setOpenInvoiceData(PaymentsRequest paymentsRequest, CartData cartDat paymentsRequest.setLineItems(invoiceLines); } + private Name getAfterPayShopperName(CartData cartData) { + Name name = new Name(); + name.setFirstName(cartData.getAdyenFirstName()); + name.setLastName(cartData.getAdyenLastName()); + name.gender(Name.GenderEnum.valueOf(cartData.getAdyenShopperGender())); + return name; + } + /** * Set Boleto payment request data */ diff --git a/adyenv6core/src/com/adyen/v6/forms/AdyenPaymentForm.java b/adyenv6core/src/com/adyen/v6/forms/AdyenPaymentForm.java index bbb50ab40..53f1dac40 100644 --- a/adyenv6core/src/com/adyen/v6/forms/AdyenPaymentForm.java +++ b/adyenv6core/src/com/adyen/v6/forms/AdyenPaymentForm.java @@ -80,6 +80,11 @@ public class AdyenPaymentForm { //POS private String terminalId; + // AfterPay fields + private String gender; + private String telephoneNumber; + private String shopperEmail; + //Billing address related fields private boolean useAdyenDeliveryAddress; private AddressForm billingAddress; @@ -305,6 +310,30 @@ public boolean usesComponent() { return PAYMENT_METHOD_PAYPAL.equals(paymentMethod); } + public String getGender() { + return gender; + } + + public void setGender(String gender) { + this.gender = gender; + } + + public String getTelephoneNumber() { + return telephoneNumber; + } + + public void setTelephoneNumber(String telephoneNumber) { + this.telephoneNumber = telephoneNumber; + } + + public String getShopperEmail() { + return shopperEmail; + } + + public void setShopperEmail(String shopperEmail) { + this.shopperEmail = shopperEmail; + } + public void resetFormExceptBillingAddress() { this.paymentMethod = null; this.cseToken = null; @@ -330,6 +359,9 @@ public void resetFormExceptBillingAddress() { this.sepaIbanNumber = null; this.sepaOwnerName = null; this.billingAddress = billingAddress; + this.shopperEmail = null; + this.telephoneNumber = null; + this.gender = null; } @Override @@ -351,6 +383,9 @@ public String toString() { sb.append(" rememberTheseDetails: ").append(Util.toIndentedString(rememberTheseDetails)).append("\n"); sb.append(" selectedReference: ").append(Util.toIndentedString(selectedReference)).append("\n"); sb.append(" dateOfBirth: ").append(Util.toIndentedString(dob)).append("\n"); + sb.append(" shopperEmail: ").append(Util.toIndentedString(shopperEmail)).append("\n"); + sb.append(" telephoneNumber: ").append(Util.toIndentedString(telephoneNumber)).append("\n"); + sb.append(" gender: ").append(Util.toIndentedString(gender)).append("\n"); sb.append(" socialSecurityNumber: ").append(Util.toIndentedString(socialSecurityNumber)).append("\n"); sb.append(" firstName: ").append(Util.toIndentedString(firstName)).append("\n"); sb.append(" lastName: ").append(Util.toIndentedString(lastName)).append("\n"); diff --git a/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java b/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java index 64cf6573d..fe0ea2a3f 100644 --- a/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java +++ b/adyenv6core/src/com/adyen/v6/populator/CartPopulator.java @@ -59,6 +59,9 @@ public void populate(final CartModel source, final CartData target) throws Conve target.setAdyenSepaIbanNumber(paymentInfo.getAdyenSepaIbanNumber()); target.setAdyenApplePayMerchantName(paymentInfo.getAdyenApplePayMerchantName()); target.setAdyenApplePayMerchantIdentifier(paymentInfo.getAdyenApplePayMerchantIdentifier()); + target.setAdyenShopperGender(paymentInfo.getAdyenShopperGender()); + target.setAdyenShopperEmail(paymentInfo.getAdyenShopperEmail()); + target.setAdyenShopperTelephone(paymentInfo.getAdyenTelephone()); } }