Como Realizar uma Transação Pix Usando a Inter SDK em Java com Spring Boot
O Banco Inter oferece uma SDK Java que facilita a integração de serviços como pagamentos Pix em suas aplicações. Neste artigo, vamos configurar o Inter SDK e implementar um serviço para realizar uma transação Pix usando Spring Boot.
Estrutura do Projeto
O projeto terá a seguinte estrutura de classes e arquivos de configuração:
/src/main/java
├── br/com/escconsulting/config/InterConfig.java
├── br/com/escconsulting/controller/InterPIXController.java
├── br/com/escconsulting/dto/InterIncluirPIXDTO.java
├── br/com/escconsulting/service/InterPIXService.java
├── br/com/escconsulting/service/InterPIXServiceImpl.java
└── resources/application.yml
1. Configuração do Ambiente
Antes de começarmos, configure o application.yml
com as variáveis de ambiente para armazenar informações sensíveis, como credenciais de cliente e certificado.
Arquivo application.yml
# Configurações para integração com o Banco Inter
inter:
client:
id: ${INTER_CLIENT_ID} # ID do cliente do Inter
secret: ${INTER_CLIENT_SECRET} # Segredo do cliente do Inter
cert:
path: ${INTER_CERT_PATH} # Caminho para o certificado PFX
password: ${INTER_CERT_PASSWORD} # Senha do certificado PFX
ambiente: ${INTER_AMBIENTE:sandbox} # Define o ambiente (sandbox para testes)
debug: ${INTER_DEBUG:false} # Habilita ou desabilita o modo debug
conta-corrente: ${INTER_CONTA_CORRENTE} # Número da conta corrente
Defina as Variáveis de Ambiente
Defina essas variáveis de ambiente em seu sistema operacional, substituindo os valores conforme necessário:
INTER_CLIENT_ID
: ID do cliente fornecido pelo Banco Inter.INTER_CLIENT_SECRET
: Segredo do cliente para autenticação.INTER_CERT_PATH
: Caminho do certificado PFX.INTER_CERT_PASSWORD
: Senha do certificado PFX.INTER_AMBIENTE
: Ambiente de execução (sandbox
ouproducao
).INTER_DEBUG
:true
para modo debug.INTER_CONTA_CORRENTE
: Número da conta corrente.
2. Configuração da Inter SDK
Com o arquivo application.yml
configurado, vamos criar a classe InterConfig
para inicializar o SDK usando essas configurações.
Classe InterConfig
package br.com.escconsulting.config;
import inter.InterSdk;
import inter.exceptions.SdkException;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@Getter
public class InterConfig {
@Value("${inter.client.id}")
private String clientId;
@Value("${inter.client.secret}")
private String clientSecret;
@Value("${inter.cert.path}")
private String certPath;
@Value("${inter.cert.password}")
private String certPassword;
@Value("${inter.ambiente}")
private String ambiente;
@Value("${inter.debug}")
private boolean debug;
@Value("${inter.conta-corrente}")
private String contaCorrente;
@Bean
public InterSdk interSdk() throws SdkException {
InterSdk interSdk = new InterSdk(clientId, clientSecret, certPath, certPassword);
interSdk.setAmbiente(ambiente);
interSdk.setDebug(debug);
interSdk.setContaCorrente(contaCorrente);
return interSdk;
}
}
3. Criando o DTO para a Requisição Pix
O DTO (Data Transfer Object) InterIncluirPIXDTO
representará os dados necessários para a transação Pix, incluindo o ID da solicitação, a chave Pix do destinatário e o valor da transação.
Classe InterIncluirPIXDTO
package br.com.escconsulting.dto;
import lombok.Getter;
import java.math.BigDecimal;
import java.util.UUID;
@Getter
public class InterIncluirPIXDTO {
private UUID customerVehicleWithdrawalRequestId; // ID da solicitação de retirada
private String chave; // Chave Pix do destinatário
private BigDecimal valor; // Valor da transação Pix
}
4. Controlador REST para o Endpoint Pix
Vamos criar o controlador REST InterPIXController
para expor um endpoint que recebe as requisições Pix.
Classe InterPIXController
package br.com.escconsulting.controller;
import br.com.escconsulting.dto.InterIncluirPIXDTO;
import br.com.escconsulting.service.InterPIXService;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/inter/pix")
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class InterPIXController {
private final InterPIXService interPIXService;
@PostMapping
public ResponseEntity<?> incluirPix(@RequestBody InterIncluirPIXDTO interIncluirPIXDTO) {
return interPIXService.incluirPix(interIncluirPIXDTO)
.map(savedBank -> ResponseEntity.status(HttpStatus.CREATED).body(savedBank))
.orElseThrow(() -> new IllegalStateException("Falha ao realizar a transação Pix."));
}
}
5. Serviço para Realizar a Transação Pix
O serviço InterPIXServiceImpl
contém a lógica para criar e enviar a transação Pix.
Interface InterPIXService
package br.com.escconsulting.service;
import br.com.escconsulting.dto.InterIncluirPIXDTO;
import inter.banking.model.RespostaIncluirPix;
import java.util.Optional;
public interface InterPIXService {
Optional<RespostaIncluirPix> incluirPix(InterIncluirPIXDTO interIncluirPIXDTO);
}
Implementação InterPIXServiceImpl
package br.com.escconsulting.service;
import br.com.escconsulting.dto.InterIncluirPIXDTO;
import inter.InterSdk;
import inter.banking.model.Destinatario;
import inter.banking.model.Pix;
import inter.banking.model.RespostaIncluirPix;
import inter.exceptions.SdkException;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.util.Optional;
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class InterPIXServiceImpl implements InterPIXService {
private final InterSdk interSdk;
@Transactional
@Override
public Optional<RespostaIncluirPix> incluirPix(InterIncluirPIXDTO interIncluirPIXDTO) {
try {
// Configuração do destinatário e valor do Pix
Destinatario destinatario = Destinatario.builder()
.chave(interIncluirPIXDTO.getChave())
.build();
Pix pix = Pix.builder()
.valor(interIncluirPIXDTO.getValor())
.destinatario(destinatario)
.build();
// Envia o Pix e obtém a resposta
RespostaIncluirPix resposta = interSdk.banking().incluirPix(pix);
System.out.println("Pix enviado com sucesso. e2eId=" + resposta.getEndToEndId());
return Optional.of(resposta);
} catch (SdkException e) {
e.printStackTrace();
return Optional.empty();
}
}
}
Explicação do Código
- Configuração do Destinatário e Valor: O destinatário é configurado com a chave Pix fornecida no DTO, e o valor da transação é especificado.
- Envio da Transação: O método
incluirPix
daInterSdk
é chamado para realizar a transação. - Resposta: A resposta da transação é retornada, contendo detalhes como o ID
e2eId
.
Testando o Endpoint Pix
Para testar a integração:
- Inicie a Aplicação: Execute o projeto Spring Boot.
- Envie uma Requisição: Faça uma requisição POST para o endpoint
/inter/pix
com um corpo JSON, por exemplo:{ "customerVehicleWithdrawalRequestId": "123e4567-e89b-12d3-a456-426614174000", "chave": "chave-do-destinatario", "valor": 150.00 }
- Verifique a Resposta: Se tudo estiver correto, a transação Pix será realizada e uma resposta contendo detalhes do Pix será retornada.
Conclusão
Neste guia, configuramos o Inter SDK em uma aplicação Spring Boot para realizar transações Pix. Implementamos a configuração da SDK, o controlador REST e o serviço que envia a transação Pix. Essa solução proporciona uma integração direta e segura com o Banco Inter para pagamentos Pix em Java.