{"id":136,"date":"2024-11-14T10:27:10","date_gmt":"2024-11-14T10:27:10","guid":{"rendered":"https:\/\/escconsulting.com.br\/site\/?p=136"},"modified":"2024-11-14T10:27:11","modified_gmt":"2024-11-14T10:27:11","slug":"como-realizar-uma-transacao-pix-usando-a-inter-sdk-em-java-com-spring-boot","status":"publish","type":"post","link":"https:\/\/escconsulting.com.br\/site\/2024\/11\/14\/como-realizar-uma-transacao-pix-usando-a-inter-sdk-em-java-com-spring-boot\/","title":{"rendered":"Como Realizar uma Transa\u00e7\u00e3o Pix Usando a Inter SDK em Java com Spring Boot"},"content":{"rendered":"\n<p>O Banco Inter oferece uma SDK Java que facilita a integra\u00e7\u00e3o de servi\u00e7os como pagamentos Pix em suas aplica\u00e7\u00f5es. Neste artigo, vamos configurar o Inter SDK e implementar um servi\u00e7o para realizar uma transa\u00e7\u00e3o Pix usando Spring Boot.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Estrutura do Projeto<\/h3>\n\n\n\n<p>O projeto ter\u00e1 a seguinte estrutura de classes e arquivos de configura\u00e7\u00e3o:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><code>\/src\/main\/java<br>\u251c\u2500\u2500 br\/com\/escconsulting\/config\/InterConfig.java<br>\u251c\u2500\u2500 br\/com\/escconsulting\/controller\/InterPIXController.java<br>\u251c\u2500\u2500 br\/com\/escconsulting\/dto\/InterIncluirPIXDTO.java<br>\u251c\u2500\u2500 br\/com\/escconsulting\/service\/InterPIXService.java<br>\u251c\u2500\u2500 br\/com\/escconsulting\/service\/InterPIXServiceImpl.java<br>\u2514\u2500\u2500 resources\/application.yml<br><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1. Configura\u00e7\u00e3o do Ambiente<\/h3>\n\n\n\n<p>Antes de come\u00e7armos, configure o <code>application.yml<\/code> com as vari\u00e1veis de ambiente para armazenar informa\u00e7\u00f5es sens\u00edveis, como credenciais de cliente e certificado.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Arquivo <code>application.yml<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code><code># Configura\u00e7\u00f5es para integra\u00e7\u00e3o com o Banco Inter\ninter:\n  client:\n    id: ${INTER_CLIENT_ID}             # ID do cliente do Inter\n    secret: ${INTER_CLIENT_SECRET}     # Segredo do cliente do Inter\n  cert:\n    path: ${INTER_CERT_PATH}           # Caminho para o certificado PFX\n    password: ${INTER_CERT_PASSWORD}   # Senha do certificado PFX\n  ambiente: ${INTER_AMBIENTE:sandbox}  # Define o ambiente (sandbox para testes)\n  debug: ${INTER_DEBUG:false}          # Habilita ou desabilita o modo debug\n  conta-corrente: ${INTER_CONTA_CORRENTE}  # N\u00famero da conta corrente\n<\/code><\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Defina as Vari\u00e1veis de Ambiente<\/h4>\n\n\n\n<p>Defina essas vari\u00e1veis de ambiente em seu sistema operacional, substituindo os valores conforme necess\u00e1rio:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>INTER_CLIENT_ID<\/code>: ID do cliente fornecido pelo Banco Inter.<\/li>\n\n\n\n<li><code>INTER_CLIENT_SECRET<\/code>: Segredo do cliente para autentica\u00e7\u00e3o.<\/li>\n\n\n\n<li><code>INTER_CERT_PATH<\/code>: Caminho do certificado PFX.<\/li>\n\n\n\n<li><code>INTER_CERT_PASSWORD<\/code>: Senha do certificado PFX.<\/li>\n\n\n\n<li><code>INTER_AMBIENTE<\/code>: Ambiente de execu\u00e7\u00e3o (<code>sandbox<\/code> ou <code>producao<\/code>).<\/li>\n\n\n\n<li><code>INTER_DEBUG<\/code>: <code>true<\/code> para modo debug.<\/li>\n\n\n\n<li><code>INTER_CONTA_CORRENTE<\/code>: N\u00famero da conta corrente.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. Configura\u00e7\u00e3o da Inter SDK<\/h3>\n\n\n\n<p>Com o arquivo <code>application.yml<\/code> configurado, vamos criar a classe <code>InterConfig<\/code> para inicializar o SDK usando essas configura\u00e7\u00f5es.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Classe <code>InterConfig<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code><code>package br.com.escconsulting.config;\n\nimport inter.InterSdk;\nimport inter.exceptions.SdkException;\nimport lombok.Getter;\nimport org.springframework.beans.factory.annotation.Value;\nimport org.springframework.context.annotation.Bean;\nimport org.springframework.context.annotation.Configuration;\n\n@Configuration\n@Getter\npublic class InterConfig {\n\n    @Value(\"${inter.client.id}\")\n    private String clientId;\n\n    @Value(\"${inter.client.secret}\")\n    private String clientSecret;\n\n    @Value(\"${inter.cert.path}\")\n    private String certPath;\n\n    @Value(\"${inter.cert.password}\")\n    private String certPassword;\n\n    @Value(\"${inter.ambiente}\")\n    private String ambiente;\n\n    @Value(\"${inter.debug}\")\n    private boolean debug;\n\n    @Value(\"${inter.conta-corrente}\")\n    private String contaCorrente;\n\n    @Bean\n    public InterSdk interSdk() throws SdkException {\n        InterSdk interSdk = new InterSdk(clientId, clientSecret, certPath, certPassword);\n        interSdk.setAmbiente(ambiente);\n        interSdk.setDebug(debug);\n        interSdk.setContaCorrente(contaCorrente);\n        return interSdk;\n    }\n}\n<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Criando o DTO para a Requisi\u00e7\u00e3o Pix<\/h3>\n\n\n\n<p>O DTO (Data Transfer Object) <code>InterIncluirPIXDTO<\/code> representar\u00e1 os dados necess\u00e1rios para a transa\u00e7\u00e3o Pix, incluindo o ID da solicita\u00e7\u00e3o, a chave Pix do destinat\u00e1rio e o valor da transa\u00e7\u00e3o.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Classe <code>InterIncluirPIXDTO<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code><code>package br.com.escconsulting.dto;\n\nimport lombok.Getter;\nimport java.math.BigDecimal;\nimport java.util.UUID;\n\n@Getter\npublic class InterIncluirPIXDTO {\n    private UUID customerVehicleWithdrawalRequestId;  \/\/ ID da solicita\u00e7\u00e3o de retirada\n    private String chave;  \/\/ Chave Pix do destinat\u00e1rio\n    private BigDecimal valor;  \/\/ Valor da transa\u00e7\u00e3o Pix\n}\n<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. Controlador REST para o Endpoint Pix<\/h3>\n\n\n\n<p>Vamos criar o controlador REST <code>InterPIXController<\/code> para expor um endpoint que recebe as requisi\u00e7\u00f5es Pix.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Classe <code>InterPIXController<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code><code>package br.com.escconsulting.controller;\n\nimport br.com.escconsulting.dto.InterIncluirPIXDTO;\nimport br.com.escconsulting.service.InterPIXService;\nimport lombok.RequiredArgsConstructor;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.http.HttpStatus;\nimport org.springframework.http.ResponseEntity;\nimport org.springframework.web.bind.annotation.*;\n\n@RestController\n@RequestMapping(\"\/inter\/pix\")\n@RequiredArgsConstructor(onConstructor = @__(@Autowired))\npublic class InterPIXController {\n\n    private final InterPIXService interPIXService;\n\n    @PostMapping\n    public ResponseEntity&lt;?> incluirPix(@RequestBody InterIncluirPIXDTO interIncluirPIXDTO) {\n        return interPIXService.incluirPix(interIncluirPIXDTO)\n                .map(savedBank -> ResponseEntity.status(HttpStatus.CREATED).body(savedBank))\n                .orElseThrow(() -> new IllegalStateException(\"Falha ao realizar a transa\u00e7\u00e3o Pix.\"));\n    }\n}\n<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. Servi\u00e7o para Realizar a Transa\u00e7\u00e3o Pix<\/h3>\n\n\n\n<p>O servi\u00e7o <code>InterPIXServiceImpl<\/code> cont\u00e9m a l\u00f3gica para criar e enviar a transa\u00e7\u00e3o Pix.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Interface <code>InterPIXService<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code><code>package br.com.escconsulting.service;\n\nimport br.com.escconsulting.dto.InterIncluirPIXDTO;\nimport inter.banking.model.RespostaIncluirPix;\nimport java.util.Optional;\n\npublic interface InterPIXService {\n    Optional&lt;RespostaIncluirPix> incluirPix(InterIncluirPIXDTO interIncluirPIXDTO);\n}\n<\/code><\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Implementa\u00e7\u00e3o <code>InterPIXServiceImpl<\/code><\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code><code>package br.com.escconsulting.service;\n\nimport br.com.escconsulting.dto.InterIncluirPIXDTO;\nimport inter.InterSdk;\nimport inter.banking.model.Destinatario;\nimport inter.banking.model.Pix;\nimport inter.banking.model.RespostaIncluirPix;\nimport inter.exceptions.SdkException;\nimport lombok.RequiredArgsConstructor;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\nimport javax.transaction.Transactional;\nimport java.util.Optional;\n\n@Service\n@RequiredArgsConstructor(onConstructor = @__(@Autowired))\npublic class InterPIXServiceImpl implements InterPIXService {\n\n    private final InterSdk interSdk;\n\n    @Transactional\n    @Override\n    public Optional&lt;RespostaIncluirPix> incluirPix(InterIncluirPIXDTO interIncluirPIXDTO) {\n        try {\n            \/\/ Configura\u00e7\u00e3o do destinat\u00e1rio e valor do Pix\n            Destinatario destinatario = Destinatario.builder()\n                    .chave(interIncluirPIXDTO.getChave())\n                    .build();\n\n            Pix pix = Pix.builder()\n                    .valor(interIncluirPIXDTO.getValor())\n                    .destinatario(destinatario)\n                    .build();\n\n            \/\/ Envia o Pix e obt\u00e9m a resposta\n            RespostaIncluirPix resposta = interSdk.banking().incluirPix(pix);\n\n            System.out.println(\"Pix enviado com sucesso. e2eId=\" + resposta.getEndToEndId());\n            return Optional.of(resposta);\n\n        } catch (SdkException e) {\n            e.printStackTrace();\n            return Optional.empty();\n        }\n    }\n}\n<\/code><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Explica\u00e7\u00e3o do C\u00f3digo<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Configura\u00e7\u00e3o do Destinat\u00e1rio e Valor<\/strong>: O destinat\u00e1rio \u00e9 configurado com a chave Pix fornecida no DTO, e o valor da transa\u00e7\u00e3o \u00e9 especificado.<\/li>\n\n\n\n<li><strong>Envio da Transa\u00e7\u00e3o<\/strong>: O m\u00e9todo <code>incluirPix<\/code> da <code>InterSdk<\/code> \u00e9 chamado para realizar a transa\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Resposta<\/strong>: A resposta da transa\u00e7\u00e3o \u00e9 retornada, contendo detalhes como o ID <code>e2eId<\/code>.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Testando o Endpoint Pix<\/h3>\n\n\n\n<p>Para testar a integra\u00e7\u00e3o:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Inicie a Aplica\u00e7\u00e3o<\/strong>: Execute o projeto Spring Boot.<\/li>\n\n\n\n<li><strong>Envie uma Requisi\u00e7\u00e3o<\/strong>: Fa\u00e7a uma requisi\u00e7\u00e3o POST para o endpoint <code>\/inter\/pix<\/code> com um corpo JSON, por exemplo: <code>{ \"customerVehicleWithdrawalRequestId\": \"123e4567-e89b-12d3-a456-426614174000\", \"chave\": \"chave-do-destinatario\", \"valor\": 150.00 }<\/code><\/li>\n\n\n\n<li><strong>Verifique a Resposta<\/strong>: Se tudo estiver correto, a transa\u00e7\u00e3o Pix ser\u00e1 realizada e uma resposta contendo detalhes do Pix ser\u00e1 retornada.<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Conclus\u00e3o<\/h3>\n\n\n\n<p>Neste guia, configuramos o Inter SDK em uma aplica\u00e7\u00e3o Spring Boot para realizar transa\u00e7\u00f5es Pix. Implementamos a configura\u00e7\u00e3o da SDK, o controlador REST e o servi\u00e7o que envia a transa\u00e7\u00e3o Pix. Essa solu\u00e7\u00e3o proporciona uma integra\u00e7\u00e3o direta e segura com o Banco Inter para pagamentos Pix em Java.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Banco Inter oferece uma SDK Java que facilita a integra\u00e7\u00e3o de servi\u00e7os como pagamentos Pix em suas aplica\u00e7\u00f5es. Neste artigo, vamos configurar o Inter SDK e implementar um servi\u00e7o para realizar uma transa\u00e7\u00e3o Pix usando Spring Boot. Estrutura do Projeto O projeto ter\u00e1 a seguinte estrutura de classes e arquivos de configura\u00e7\u00e3o: \/src\/main\/java\u251c\u2500\u2500 br\/com\/escconsulting\/config\/InterConfig.java\u251c\u2500\u2500 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-136","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/posts\/136","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/comments?post=136"}],"version-history":[{"count":1,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/posts\/136\/revisions"}],"predecessor-version":[{"id":137,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/posts\/136\/revisions\/137"}],"wp:attachment":[{"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/media?parent=136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/categories?post=136"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/escconsulting.com.br\/site\/wp-json\/wp\/v2\/tags?post=136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}