ouro.capital
||
pix

Timeout e Retry Patterns na API Pix: Como Construir Integrações Que Não Quebram

2024-08-22·9 min read·Matheus Feijão

Ponto-chave

Falhas transitórias na API Pix são uma certeza matemática, mas inconsistências financeiras não são. A implementação combinada de idempotência estrita (via txid), exponential backoff com jitter e circuit breakers é o que separa integrações amadoras de operações financeiras de grau bancário.

Imagine o relógio marcando 23:59 em uma sexta-feira de Black Friday. Seu e-commerce baté recorde histórico de tráfego. Um cliente ansioso tenta pagar um carrinho de R$ 5.000 via Pix. Ele clica em finalizar. A tela congela. O loading gira infinitamente. Impaciente, ele atualiza a página e clica em "Pagar" novamente.

Parabéns. Você acabou de cobrar R$ 10.000 de um cliente que só queria uma TV nova. O Procon manda lembranças e a reputação da sua marca derrete no Reclame Aqui em questão de minutos.

Esse cenário caótico não é ficção científica. Nós observamos isso acontecer repetidas vezes com varejistas e fintechs de médio porte que negligenciam a engenharia de confiabilidade ao integrar sistemas de pagamento. O Banco Central processa hoje mais de 160 milhões de transações Pix diariamente. A infraestrutura do Sistema de Pagamentos Instantâneos (SPI) é uma obra-prima da engenharia moderna, operando com disponibilidade de 99,9%.

Mas a internet brasileira pisca. Roteadores perdem pacotes. Firewalls bloqueiam conexões legítimas por microssegundos. APIs de Provedores de Serviço de Pagamento (PSPs) como Stone, Mercado Pago e PagSeguro entram em manutenção ou sofrem picos de latência. Falhas transitórias vão acontecer na sua integração. A questão central aqui não é como evitar que a rede falhe, mas como o seu software reage quando o abismo olha de volta para ele.

A Anatomia de um Timeout na API Pix

Quando falamos de integrações financeiras, o tempo não é apenas dinheiro — ele é a diferença entre uma transação liquidada e um chargeback doloroso. O regulamento do Banco Central, mais específicamente o Manual de Fluxos do Pix, estabelece que 99% das transações devem ser liquidadas em até 10 segundos.

Se você opera um e-commerce ou um PDV físico, preste atenção aqui: o seu sistema não pode esperar indefinidamente por uma resposta. Você precisa configurar timeouts agressivos e precisos.

Connection Timeout vs. Read Timeout

Tecnicamente, precisamos dividir o timeout em duas categorias distintas. O Connection Timeout ocorre quando o seu servidor tenta iniciar um handshake TCP/TLS com a API do PSP, mas o servidor de destino está inalcançável. Se a conexão não for estabelecida em 2 ou 3 segundos, aborte. O problema é de infraestrutura básica ou DNS.

Já o Read Timeout é muito mais traiçoeiro. A conexão foi estabelecida. Seu payload JSON com os dados da cobrança foi enviado perfeitamente. Mas o servidor do PSP fica mudo. Ele está processando? Ele travou? A transação foi para o Banco Central ou morreu no meio do caminho? Você não sabe.

Se você esperar 30 segundos, o usuário desiste. Se você cortar a conexão muito rápido (ex: 1 segundo), a transação pode ser efetivada no PSP logo depois, mas o seu sistema registrará como falha. O padrão de mercado para integrações Pix otimizadas é manter o Read Timeout entre 5 e 8 segundos. Se não houver resposta nesse tempo, assumimos que algo falhou transitóriamente e acionamos nossos mecanismos de defesa.

Idempotência: O Escudo de Vibranium do Seu Sistema

Antes sequer de pensar em tentar enviar a requisição de novo (retry), você precisa garantir que a segunda tentativa não crie uma segunda cobrança. Essa é a regra de ouro dos pagamentos digitais: a idempotência.

Na matemática e na ciência da computação, uma operação idempotente é aquela que pode ser aplicada múltiplas vezes sem alterar o resultado além da aplicação inicial. Na API Pix, o seu melhor amigo atende por um nome técnico: txid (Transaction ID).

O txid é um identificador único de até 35 caracteres que a sua aplicação gera e envia para o PSP. O BACEN exige que os PSPs respeitem essa chave. Na prática, se o seu sistema sofreu um Read Timeout na primeira requisição, você envia exatamente o mesmo payload com o mesmo txid na segunda tentativa.

Se o PSP não tinha recebido a primeira tentativa, ele cria a cobrança normalmente. Se ele tinha recebido e processado, mas a resposta se perdeu na rede, ele reconhece o txid duplicado e simplesmente devolve o status da cobrança original, sem criar uma nova.

Nós já auditamos integrações de carteiras digitais que geravam um novo txid a cada retentativa. O resultado? Contas bancárias de clientes drenadas por cobranças fantasmas. Nunca subestime o poder de uma chave de idempotência bem implementada.

Retry Patterns: Como Tentar Novamente Sem Derrubar o Servidor

Ok, ocorreu um timeout ou você recebeu um erro HTTP 503 (Service Unavailable). A transação falhou. O instinto básico de um desenvolvedor júnior é colocar um loop do tipo while(falha) { tenta_de_novo(); }.

Isso é o que chamamos de ataque DDoS acidental. Se a API do seu PSP, digamos o Itaú ou o Nubank, estiver passando por uma instabilidade de 10 segundos, e você tiver 5.000 clientes tentando pagar simultaneamente, o seu sistema vai bombardear a API deles com milhares de requisições por segundo. Você não está ajudando a resolver o problema; você está ativamente piorando a queda do serviço parceiro.

Exponential Backoff

A abordagem profissional exigida em arquiteturas de alto desempenho é o Exponential Backoff. Em vez de retentar imediatamente, você espera um tempo que cresce exponencialmente a cada falha.

Funciona assim: a primeira tentativa falha. O seu código espera 1 segundo e tenta de novo. Falhou de novo? Espera 2 segundos. Falhou? Espera 4 segundos. Depois 8 segundos, e assim por diante, até um limite máximo (ex: 5 tentativas). Isso dá ao servidor do PSP o fôlego necessário para se recuperar de um pico de processamento.

O Toque de Mestre: Jitter

Mas o Exponential Backoff sozinho tem uma falha oculta em sistemas de alto tráfego: o problema do rebanho estrondoso (Thundering Herd). Imagine que a API do PSP caiu exatamente às 12:00:00. Milhares de requisições do seu sistema falham no exato mesmo milissegundo. Todas esperam 1 segundo e retentam juntas às 12:00:01. Falham. Todas esperam 2 segundos e retentam juntas às 12:00:03.

Você criou ondas sincronizadas de tráfego massivo que vão derrubar o servidor novamente assim que ele tentar voltar ao ar. A solução elegante para isso se chama Jitter — a adição de uma fração de tempo aleatória ao seu backoff.

Em vez de esperar exatamente 2 segundos, seu sistema espera 2 segundos + um valor aleatório entre 0 e 1000 milissegundos. Um request vai tentar em 2.1s, outro em 2.4s, outro em 2.9s. Na nossa análise de arquiteturas de gigantes como a AWS e grandes adquirentes brasileiras, a introdução do Jitter reduz os picos de carga em até 70% durante incidentes de degradação de serviço. É uma dança no trânsito de dados que evita colisões em massa.

Circuit Breaker: Quando Jogar a Toalha (Temporariamente)

Retentativas inteligentes são excelentes para falhas transitórias de microssegundos. Mas o que acontece quando o PSP inteiro sai do ar por 40 minutos devido a um rompimento de fibra óptica ou uma falha catastrófica de banco de dados?

Continuar fazendo retentativas de milhares de transações por 40 minutos vai esgotar o pool de conexões do seu próprio servidor. Sua aplicação vai travar por falta de memória ou threads disponíveis. É aqui que entra o padrão Circuit Breaker (Disjuntor).

Inspirado na engenharia elétrica, o Circuit Breaker de software monitora a taxa de falhas das chamadas à API Pix. Se a taxa de erros 5xx ou timeouts ultrapassar um limite (por exemplo, 50% de falhas em uma janela de 10 segundos), o disjuntor "desarma" (estado Open).

Com o disjuntor aberto, o seu sistema para completamente de enviar requisições para o PSP doente. Qualquer nova tentativa de pagamento do cliente é imediatamente rejeitada com uma mensagem amigável: "Nosso sistema de pagamentos está passando por instabilidades temporárias. Tente novamente em alguns minutos".

Isso salva os recursos do seu servidor. Periodicamente, o disjuntor deixa passar uma única requisição de teste (estado Half-Open). Se essa requisição for bem-sucedida, ele entende que a API do PSP voltou à vida, o disjuntor "arma" novamente (estado Closed) e o tráfego volta a fluir normalmente.

Implicações Práticas: O Que Isso Custa Para o Seu Negócio?

Você pode estar se perguntando se todo esse preciosismo de engenharia compensa o custo de desenvolvimento. Vamos aos números do mercado.

Uma integração Pix mal feita, que não trata timeouts corretamente, costuma gerar uma taxa de falsos negativos (transações que o cliente pagou, o dinheiro saiu da conta, mas o seu sistema disse que falhou) em torno de 0,5% a 1% durante picos de uso.

Para um e-commerce que fatura R$ 10 milhões por mês via Pix, 1% de falhas representa R$ 100.000 em mercadorias não entregues, milhares de chamados no SAC (cujo custo médio de atendimento no Brasil gira em torno de R$ 15 a R$ 25 por ticket), chargebacks manuais e estrêsse operacional.

Mais do que isso: a confiança do consumidor brasileiro em relação a pagamentos digitais é binária. Ou funciona perfeitamente, ou é golpe. Um cliente que tem seu dinheiro debitado sem a liberação do serviço raramente volta a comprar na sua plataforma.

O Futuro da Resiliência com o Pix Automático

A urgência de implementar esses padrões arquiteturais só vai aumentar. Com o lançamento iminente do Pix Automático previsto pelo Banco Central, o volume de chamadas server-to-server vai explodir. Não estaremos mais falando apenas de um humano clicando em um botão, mas de milhões de cronjobs e rotinas de faturamento disparando cobranças recorrentes simultaneamente nas madrugadas brasileiras.

Nesse novo paradigma, a tolerância a falhas deixa de ser um diferencial técnico para se tornar uma licença básica de operação. As empresas que não dominarem a tríade — Idempotência, Backoff com Jitter e Circuit Breaker — serão engolidas pelos próprios gargalos operacionais.

Resumo rápido da ópera para CTOs, arquitetos de software e diretores de produto: exijam das suas equipes de engenharia a comprovação de testes de caos (Chaos Engineering) simulando lentidão e queda dos PSPs parceiros. A verdadeira qualidade da sua integração Pix não é medida quando o Banco Central está operando em céu de brigadeiro, mas sim na forma elegante como seu sistema sobrevive quando a tempestade inevitavelmente cai sobre os data centers.

Perguntas Frequentes

MF

Matheus Feijão

CEO & Fundador — ouro.capital

Especialista em fintech e criptoativos desde 2002. CEO da ouro.capital.