From 5c048d18761f265bd24444613e0bdd9be7bfd7b5 Mon Sep 17 00:00:00 2001 From: jillingk <93914435+jillingk@users.noreply.github.com> Date: Fri, 19 May 2023 10:56:09 +0200 Subject: [PATCH] card is working.. --- .../default/parallels/action_provision | 2 +- .../default/parallels/action_set_name | 2 +- .vagrant/machines/default/parallels/id | 2 +- .../machines/default/parallels/index_uuid | 2 +- .../machines/default/parallels/private_key | 50 +++++++++---------- build.gradle | 1 + .../adyen/checkout/api/CheckoutResource.java | 34 ++++++++++--- .../resources/static/adyenImplementation.js | 24 ++++++--- 8 files changed, 76 insertions(+), 41 deletions(-) diff --git a/.vagrant/machines/default/parallels/action_provision b/.vagrant/machines/default/parallels/action_provision index c495752..20c326b 100644 --- a/.vagrant/machines/default/parallels/action_provision +++ b/.vagrant/machines/default/parallels/action_provision @@ -1 +1 @@ -1.5:8c33c12b-0476-4308-a4eb-0a0e3f6e7c04 \ No newline at end of file +1.5:1bc4bf70-8db5-474a-b5a2-f8fb2ae33f67 \ No newline at end of file diff --git a/.vagrant/machines/default/parallels/action_set_name b/.vagrant/machines/default/parallels/action_set_name index 477554c..26b9431 100644 --- a/.vagrant/machines/default/parallels/action_set_name +++ b/.vagrant/machines/default/parallels/action_set_name @@ -1 +1 @@ -1684332805 \ No newline at end of file +1684402767 \ No newline at end of file diff --git a/.vagrant/machines/default/parallels/id b/.vagrant/machines/default/parallels/id index 2cc8175..9798c86 100644 --- a/.vagrant/machines/default/parallels/id +++ b/.vagrant/machines/default/parallels/id @@ -1 +1 @@ -8c33c12b-0476-4308-a4eb-0a0e3f6e7c04 \ No newline at end of file +1bc4bf70-8db5-474a-b5a2-f8fb2ae33f67 \ No newline at end of file diff --git a/.vagrant/machines/default/parallels/index_uuid b/.vagrant/machines/default/parallels/index_uuid index 0916b11..b7f72d4 100644 --- a/.vagrant/machines/default/parallels/index_uuid +++ b/.vagrant/machines/default/parallels/index_uuid @@ -1 +1 @@ -f8191b6c631844249c51d3efa644d6e5 \ No newline at end of file +ab65842e8fd249f696bf8d5e92f3108d \ No newline at end of file diff --git a/.vagrant/machines/default/parallels/private_key b/.vagrant/machines/default/parallels/private_key index 518dc98..85d139d 100644 --- a/.vagrant/machines/default/parallels/private_key +++ b/.vagrant/machines/default/parallels/private_key @@ -1,27 +1,27 @@ -----BEGIN RSA PRIVATE KEY----- -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 -----END RSA PRIVATE KEY----- diff --git a/build.gradle b/build.gradle index cfdcdd7..25f7439 100644 --- a/build.gradle +++ b/build.gradle @@ -17,6 +17,7 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' implementation 'com.adyen:adyen-java-api-library:20.0.0' + implementation 'jakarta.ws.rs:jakarta.ws.rs-api:3.1.0' implementation 'com.google.code.gson:gson:2.10.1' developmentOnly 'org.springframework.boot:spring-boot-devtools' testImplementation('org.springframework.boot:spring-boot-starter-test') { diff --git a/src/main/java/com/adyen/checkout/api/CheckoutResource.java b/src/main/java/com/adyen/checkout/api/CheckoutResource.java index c489198..2b540af 100644 --- a/src/main/java/com/adyen/checkout/api/CheckoutResource.java +++ b/src/main/java/com/adyen/checkout/api/CheckoutResource.java @@ -16,6 +16,8 @@ import com.adyen.enums.Environment; import com.adyen.model.checkout.*; import com.adyen.service.checkout.PaymentsApi; import com.adyen.service.exception.ApiException; +import com.google.gson.Gson; +import com.google.gson.JsonObject; /** * REST controller for using Adyen checkout API @@ -64,14 +66,32 @@ public class CheckoutResource { */ @PostMapping("/initiatePayment") public ResponseEntity payments(@RequestBody String bodyRequest, HttpServletRequest request) throws IOException, ApiException { - var body = PaymentRequest.fromJson(bodyRequest); - System.out.println(bodyRequest); + log.info(bodyRequest); + // gson + Gson gson = new Gson(); + JsonObject obj = gson.fromJson(bodyRequest, JsonObject.class); + com.google.gson.JsonObject method = obj.getAsJsonObject("paymentMethod"); + CheckoutPaymentMethod paymentMethod = CheckoutPaymentMethod.fromJson(method.toString()); + log.info(paymentMethod.toString()); + + String type = method.getAsJsonPrimitive("type").toString(); + log.info(type); + + BrowserInfo browserInfo; + try { + JsonObject obj2 = gson.fromJson(bodyRequest, JsonObject.class); + com.google.gson.JsonObject browser = obj2.getAsJsonObject("browserInfo"); + browserInfo = BrowserInfo.fromJson(browser.toString()); + } catch (Exception exception){ + browserInfo = new BrowserInfo(); + } + var paymentRequest = new PaymentRequest(); paymentRequest.setMerchantAccount(merchantAccount); // required paymentRequest.setChannel(PaymentRequest.ChannelEnum.WEB); // required var amount = new Amount() - .currency(findCurrency(body.getPaymentMethod().getActualInstance().getClass().getTypeName())) + .currency(findCurrency(type)) .value(1000L); // value is 10€ in minor units paymentRequest.setAmount(amount); @@ -85,13 +105,13 @@ public class CheckoutResource { // required for 3ds2 native flow paymentRequest.setOrigin("http://localhost:8080"); // required for 3ds2 - paymentRequest.setBrowserInfo(body.getBrowserInfo()); + paymentRequest.setBrowserInfo(browserInfo); // required by some issuers for 3ds2 paymentRequest.setShopperIP(request.getRemoteAddr()); - paymentRequest.setPaymentMethod(body.getPaymentMethod()); + paymentRequest.setPaymentMethod(paymentMethod); - var type = body.getPaymentMethod().getActualInstance().getClass().getTypeName(); + //var type2 = body.getPaymentMethod().getActualInstance().getClass().getTypeName(); // required for Klarna if (type.contains("klarna")) { paymentRequest.setCountryCode("DE"); @@ -112,6 +132,7 @@ public class CheckoutResource { log.info("REST request to make Adyen payment {}", paymentRequest); var response = paymentsApi.payments(paymentRequest); + log.info(response.toJson()); return ResponseEntity.ok() .body(response); } @@ -140,6 +161,7 @@ public class CheckoutResource { */ @GetMapping("/handleShopperRedirect") public RedirectView redirect(@RequestParam(required = false) String payload, @RequestParam(required = false) String redirectResult, @RequestParam String orderRef) throws IOException, ApiException { + log.info("skibidab"); var detailsRequest = new DetailsRequest(); if (redirectResult != null && !redirectResult.isEmpty()) { PaymentCompletionDetails paymentCompletionDetails = PaymentCompletionDetails.fromJson(redirectResult); diff --git a/src/main/resources/static/adyenImplementation.js b/src/main/resources/static/adyenImplementation.js index 8c36d77..ab1cd23 100644 --- a/src/main/resources/static/adyenImplementation.js +++ b/src/main/resources/static/adyenImplementation.js @@ -37,11 +37,15 @@ async function initCheckout() { }, onSubmit: (state, component) => { if (state.isValid) { - alert(""); + console.info("onSubmit"); + console.info(state, component); handleSubmission(state, component, "/api/initiatePayment"); } }, + onAdditionalDetails: (state, component) => { + console.info("onAdditionalDetails"); + console.info(state, component); handleSubmission(state, component, "/api/submitAdditionalDetails"); }, }; @@ -102,18 +106,26 @@ async function callServer(url, data) { // Handles responses sent from your server to the client function handleServerResponse(res, component) { + console.log(res.resultCode); if (res.action) { - component.handleAction(res.action); + console.log(res.action.actualInstance); + let action = res.action.actualInstance; + if(action.type = "REDIRECT"){ + action.type = "redirect" + console.log(action.method); + } + console.log(action); + component.handleAction(action); } else { switch (res.resultCode) { - case "Authorised": + case "AUTHORISED": window.location.href = "/result/success"; break; - case "Pending": - case "Received": + case "PENDING": + case "RECEIVED": window.location.href = "/result/pending"; break; - case "Refused": + case "REFUSED": window.location.href = "/result/failed"; break; default: