From b16c25858197ea79da9b327c9e7200b8a289c3be Mon Sep 17 00:00:00 2001 From: Kwok He Chu <105217051+Kwok-he-Chu@users.noreply.github.com> Date: Fri, 15 Dec 2023 16:47:52 +0100 Subject: [PATCH] Upgrade & add 3ds2 redirect/native Fix frontend --- .../adyen/checkout/api/CheckoutResource.java | 24 +++++++++++++++---- .../resources/static/adyenImplementation.js | 4 ++-- .../src/main/resources/templates/preview.html | 2 +- gradle/libs.versions.toml | 2 +- 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/checkout-example-advanced/src/main/java/com/adyen/checkout/api/CheckoutResource.java b/checkout-example-advanced/src/main/java/com/adyen/checkout/api/CheckoutResource.java index 38b4d079..43e2615f 100644 --- a/checkout-example-advanced/src/main/java/com/adyen/checkout/api/CheckoutResource.java +++ b/checkout-example-advanced/src/main/java/com/adyen/checkout/api/CheckoutResource.java @@ -76,7 +76,7 @@ public ResponseEntity payments(@RequestHeader String host, @Req var orderRef = UUID.randomUUID().toString(); var amount = new Amount() .currency("EUR") - .value(10000L); // value is 10€ in minor units + .value(10000L); // value is 100€ in minor units paymentRequest.setMerchantAccount(this.applicationProperty.getMerchantAccount()); // required paymentRequest.setChannel(PaymentRequest.ChannelEnum.WEB); @@ -89,16 +89,27 @@ public ResponseEntity payments(@RequestHeader String host, @Req new LineItem().quantity(1L).amountIncludingTax(5000L).description("Sunglasses"), new LineItem().quantity(1L).amountIncludingTax(5000L).description("Headphones")) ); - // required for 3ds2 native flow - paymentRequest.setAdditionalData(Collections.singletonMap("allow3DS2", "true")); - // required for 3ds2 native flow - paymentRequest.setOrigin(request.getScheme() + "://" + host ); + + var authenticationData = new AuthenticationData(); + authenticationData.setAttemptAuthentication(AuthenticationData.AttemptAuthenticationEnum.ALWAYS); + // add the following lines for Native 3DS2: + //var threeDSRequestData = new ThreeDSRequestData(); + //threeDSRequestData.setNativeThreeDS(ThreeDSRequestData.NativeThreeDSEnum.PREFERRED); + //authenticationData.setThreeDSRequestData(threeDSRequestData); + + paymentRequest.setAuthenticationData(authenticationData); + + // required for 3ds2 redirect flow + paymentRequest.setOrigin(request.getScheme() + "://" + host); // required for 3ds2 paymentRequest.setBrowserInfo(body.getBrowserInfo()); // required by some issuers for 3ds2 paymentRequest.setShopperIP(request.getRemoteAddr()); paymentRequest.setPaymentMethod(body.getPaymentMethod()); + // we strongly recommend that you the billingAddress in your request + // card schemes require this for channel web, iOS, and Android implementations + //paymentRequest.setBillingAddress(new Address()); log.info("REST request to make Adyen payment {}", paymentRequest); var response = paymentsApi.payments(paymentRequest); return ResponseEntity.ok() @@ -133,6 +144,9 @@ public RedirectView redirect(@RequestParam(required = false) String payload, @Re PaymentCompletionDetails details = new PaymentCompletionDetails(); if (redirectResult != null && !redirectResult.isEmpty()) { + // for redirect, you are redirected to an Adyen domain to complete the 3DS2 challenge + // after completing the 3DS2 challenge, you get the redirect result from Adyen in the returnUrl + // we then pass on the redirectResult details.redirectResult(redirectResult); } else if (payload != null && !payload.isEmpty()) { details.payload(payload); diff --git a/checkout-example-advanced/src/main/resources/static/adyenImplementation.js b/checkout-example-advanced/src/main/resources/static/adyenImplementation.js index 5f7d7731..1f8cac49 100644 --- a/checkout-example-advanced/src/main/resources/static/adyenImplementation.js +++ b/checkout-example-advanced/src/main/resources/static/adyenImplementation.js @@ -19,13 +19,13 @@ async function initCheckout() { holderNameRequired: true, name: "Credit or debit card", amount: { - value: 1000, + value: 10000, currency: "EUR", }, }, paypal: { amount: { - value: 1000, + value: 10000, currency: "USD", }, environment: "test", // Change this to "live" when you're ready to accept live PayPal payments diff --git a/checkout-example-advanced/src/main/resources/templates/preview.html b/checkout-example-advanced/src/main/resources/templates/preview.html index c2c11cd6..41a09e74 100644 --- a/checkout-example-advanced/src/main/resources/templates/preview.html +++ b/checkout-example-advanced/src/main/resources/templates/preview.html @@ -24,7 +24,7 @@

Cart