diff --git a/pom.xml b/pom.xml index e0e9df8..46fdfa7 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ com.mercadopago sdk-java - 1.11.0 + 2.0.0 com.google.code.gson diff --git a/src/main/java/com/mercadopago/sample/controller/CardPaymentController.java b/src/main/java/com/mercadopago/sample/controller/CardPaymentController.java index 7a64f4e..2b6d325 100644 --- a/src/main/java/com/mercadopago/sample/controller/CardPaymentController.java +++ b/src/main/java/com/mercadopago/sample/controller/CardPaymentController.java @@ -1,8 +1,9 @@ package com.mercadopago.sample.controller; -import com.mercadopago.sample.dto.PaymentResponseDTO; import com.mercadopago.sample.dto.CardPaymentDTO; +import com.mercadopago.sample.dto.PaymentResponseDTO; import com.mercadopago.sample.service.CardPaymentService; +import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -11,12 +12,10 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import javax.validation.Valid; - @RestController @RequestMapping("/process_payment") public class CardPaymentController { - private CardPaymentService cardPaymentService; + private final CardPaymentService cardPaymentService; @Autowired public CardPaymentController(CardPaymentService cardPaymentService) { diff --git a/src/main/java/com/mercadopago/sample/dto/CardPaymentDTO.java b/src/main/java/com/mercadopago/sample/dto/CardPaymentDTO.java index 0242dcb..fd6202a 100644 --- a/src/main/java/com/mercadopago/sample/dto/CardPaymentDTO.java +++ b/src/main/java/com/mercadopago/sample/dto/CardPaymentDTO.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; +import java.math.BigDecimal; import javax.validation.constraints.NotNull; public class CardPaymentDTO { @@ -14,7 +15,7 @@ public class CardPaymentDTO { private String paymentMethodId; @NotNull - private Float transactionAmount; + private BigDecimal transactionAmount; @NotNull private Integer installments; @@ -53,11 +54,11 @@ public void setPaymentMethodId(String paymentMethodId) { this.paymentMethodId = paymentMethodId; } - public Float getTransactionAmount() { + public BigDecimal getTransactionAmount() { return transactionAmount; } - public void setTransactionAmount(Float transactionAmount) { + public void setTransactionAmount(BigDecimal transactionAmount) { this.transactionAmount = transactionAmount; } diff --git a/src/main/java/com/mercadopago/sample/dto/PaymentResponseDTO.java b/src/main/java/com/mercadopago/sample/dto/PaymentResponseDTO.java index 44f36a5..092e40b 100644 --- a/src/main/java/com/mercadopago/sample/dto/PaymentResponseDTO.java +++ b/src/main/java/com/mercadopago/sample/dto/PaymentResponseDTO.java @@ -1,21 +1,21 @@ package com.mercadopago.sample.dto; public class PaymentResponseDTO { - private String id; + private Long id; private String status; private String detail; - public PaymentResponseDTO(String id, String status, String detail) { + public PaymentResponseDTO(Long id, String status, String detail) { this.id = id; this.status = status; this.detail = detail; } - public String getId() { + public Long getId() { return id; } - public void setId(String id) { + public void setId(Long id) { this.id = id; } diff --git a/src/main/java/com/mercadopago/sample/service/CardPaymentService.java b/src/main/java/com/mercadopago/sample/service/CardPaymentService.java index 4af1165..716e490 100644 --- a/src/main/java/com/mercadopago/sample/service/CardPaymentService.java +++ b/src/main/java/com/mercadopago/sample/service/CardPaymentService.java @@ -1,69 +1,60 @@ package com.mercadopago.sample.service; +import com.mercadopago.MercadoPagoConfig; +import com.mercadopago.client.common.IdentificationRequest; +import com.mercadopago.client.payment.PaymentClient; +import com.mercadopago.client.payment.PaymentCreateRequest; +import com.mercadopago.client.payment.PaymentPayerRequest; +import com.mercadopago.exceptions.MPApiException; +import com.mercadopago.exceptions.MPException; +import com.mercadopago.resources.payment.Payment; +import com.mercadopago.sample.dto.CardPaymentDTO; import com.mercadopago.sample.dto.PaymentResponseDTO; import com.mercadopago.sample.exception.MercadoPagoException; -import com.mercadopago.sample.dto.CardPaymentDTO; -import com.mercadopago.MercadoPago; -import com.mercadopago.exceptions.MPException; -import com.mercadopago.resources.Payment; -import com.mercadopago.resources.datastructures.payment.Identification; -import com.mercadopago.resources.datastructures.payment.Payer; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class CardPaymentService { - @Value("${mercado_pago_sample_access_token}") - private String mercadoPagoAccessToken; - - public PaymentResponseDTO processPayment(CardPaymentDTO cardPaymentDTO) { - try { - MercadoPago.SDK.setAccessToken(mercadoPagoAccessToken); - - Payment payment = new Payment(); - payment.setTransactionAmount(cardPaymentDTO.getTransactionAmount()) - .setToken(cardPaymentDTO.getToken()) - .setDescription(cardPaymentDTO.getProductDescription()) - .setInstallments(cardPaymentDTO.getInstallments()) - .setPaymentMethodId(cardPaymentDTO.getPaymentMethodId()); - - Identification identification = new Identification(); - identification.setType(cardPaymentDTO.getPayer().getIdentification().getType()) - .setNumber(cardPaymentDTO.getPayer().getIdentification().getNumber()); - - Payer payer = new Payer(); - payer.setEmail(cardPaymentDTO.getPayer().getEmail()); - payer.setIdentification(identification); - - payment.setPayer(payer); - - Payment createdPayment = payment.save(); - - this.validatePaymentResult(createdPayment); - - PaymentResponseDTO paymentResponseDTO = new PaymentResponseDTO( - createdPayment.getId(), - String.valueOf(createdPayment.getStatus()), - createdPayment.getStatusDetail() - ); - - return paymentResponseDTO; - } catch (MPException exception) { - System.out.println(exception.getMessage()); - throw new MercadoPagoException(exception.getMessage()); - } - } - - private void validatePaymentResult(Payment createdPayment) throws MPException { - if(createdPayment.getId() == null) { - String errorMessage = "Unknown error cause"; - - if(createdPayment.getLastApiResponse() != null) { - String sdkErrorMessage = createdPayment.getLastApiResponse().getJsonElementResponse().getAsJsonObject().get("message").getAsString(); - errorMessage = sdkErrorMessage != null ? sdkErrorMessage : errorMessage; - } - - throw new MPException(errorMessage); - } + @Value("${mercado_pago_sample_access_token}") + private String mercadoPagoAccessToken; + + public PaymentResponseDTO processPayment(CardPaymentDTO cardPaymentDTO) { + try { + MercadoPagoConfig.setAccessToken(mercadoPagoAccessToken); + + PaymentClient paymentClient = new PaymentClient(); + + PaymentCreateRequest paymentCreateRequest = + PaymentCreateRequest.builder() + .transactionAmount(cardPaymentDTO.getTransactionAmount()) + .token(cardPaymentDTO.getToken()) + .description(cardPaymentDTO.getProductDescription()) + .installments(cardPaymentDTO.getInstallments()) + .paymentMethodId(cardPaymentDTO.getPaymentMethodId()) + .payer( + PaymentPayerRequest.builder() + .email(cardPaymentDTO.getPayer().getEmail()) + .identification( + IdentificationRequest.builder() + .type(cardPaymentDTO.getPayer().getIdentification().getType()) + .number(cardPaymentDTO.getPayer().getIdentification().getNumber()) + .build()) + .build()) + .build(); + + Payment createdPayment = paymentClient.create(paymentCreateRequest); + + return new PaymentResponseDTO( + createdPayment.getId(), + String.valueOf(createdPayment.getStatus()), + createdPayment.getStatusDetail()); + } catch (MPApiException apiException) { + System.out.println(apiException.getApiResponse().getContent()); + throw new MercadoPagoException(apiException.getApiResponse().getContent()); + } catch (MPException exception) { + System.out.println(exception.getMessage()); + throw new MercadoPagoException(exception.getMessage()); } + } }