Skip to main content

O que é roteamento inteligente?

O roteamento inteligente permite que o pagamentos.dev escolha automaticamente o provedor mais adequado para cada operação, em vez de sempre usar o mesmo. Isso é especialmente útil quando você integra múltiplos provedores e quer otimar custos ou garantir alta disponibilidade. Há duas estratégias de roteamento disponíveis:
  • melhorTaxa() — escolhe o provedor que oferece o menor custo de taxa para o valor e método de pagamento da transação.
  • disponibilidade() — tenta os provedores em uma ordem de prioridade definida por você, fazendo fallback automaticamente se o primeiro falhar.

Requisitos

Para usar roteamento, você precisa de pelo menos 2 provedores configurados. Além disso, todos os provedores devem ter uma taxa configurada.
Se algum provedor não tiver taxa configurada, o SDK lançará um erro no momento da inicialização.

Router melhorTaxa()

O router melhorTaxa() compara o custo líquido (valor - taxa) de cada provedor e escolhe o que oferece o melhor valor. A taxa nunca é descontada do valor enviado ao provedor — ela serve apenas para comparação interna de custo.

Exemplo prático

Imagine que você tem:
  • AbacatePay cobra uma taxa fixa de R$ 0,80 (80 centavos)
  • MercadoPago cobra 1% sobre o valor da transação

Tipos de taxa

Você pode definir a taxa de três formas:

Taxa por método de pagamento

Você também pode definir taxas diferentes por método de pagamento usando um array:
Se você usar metodosPagamento em uma taxa, todos os métodos de pagamento usados pela sua aplicação devem estar cobertos por pelo menos uma taxa do provedor. Caso contrário, o SDK lançará um erro informando qual método não está coberto.

Router disponibilidade()

O router disponibilidade() define uma ordem de prioridade entre os provedores. Ele sempre tenta o primeiro da lista; se a operação falhar por timeout ou erro 5xx (após os retries configurados), ele passa automaticamente para o próximo provedor da ordem.
Neste exemplo:
  1. Sempre tenta a Woovi primeiro.
  2. Se a Woovi não responder dentro do timeout ou retornar 5xx, tenta a AbacatePay.
  3. Se a AbacatePay também falhar, tenta o MercadoPago.
  4. Se todos falharem, lança um erro agregado.

Configurações globais

Você pode configurar o timeout e o número de retries diretamente na instância Pagamentos:

Override manual do provedor

Mesmo com um router configurado, você pode forçar um provedor específico passando { provider: 'nome' } como último argumento da operação:
Isso é útil para:
  • Testes e debugging
  • Casos especiais onde você sabe qual provedor usar
  • Migrar clientes gradualmente entre provedores

Exemplo completo

Aqui está um exemplo completo combinando roteamento por taxa com múltiplos provedores e configurações personalizadas:

Dicas e boas práticas

  • Taxas em centavos: o tipo flat sempre usa centavos. 80 = R0,80,1000=R 0,80, `1000` = R 10,00.
  • Taxa é apenas para comparação: o valor enviado ao provedor é o valor original da cobrança. A taxa não é descontada automaticamente.
  • Cobertura completa de métodos: quando usar metodosPagamento em taxas, certifique-se de que todos os métodos que sua aplicação usa estejam cobertos.
  • Combine com hooks: use lifecycle hooks para registrar qual provedor foi escolhido em cada transação. Isso ajuda na análise e reconciliação.
  • Monitore falhas: ao usar disponibilidade(), monitore logs de fallback para identificar provedores com instabilidade.
  • Teste antes de ativar: teste o comportamento do router com valores diferentes para entender quando cada provedor será escolhido.

Quando usar cada router?