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 ou producao).
  • 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

  1. 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.
  2. Envio da Transação: O método incluirPix da InterSdk é chamado para realizar a transação.
  3. Resposta: A resposta da transação é retornada, contendo detalhes como o ID e2eId.

Testando o Endpoint Pix

Para testar a integração:

  1. Inicie a Aplicação: Execute o projeto Spring Boot.
  2. 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 }
  3. 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.