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:
- Sempre tenta a Woovi primeiro.
- Se a Woovi não responder dentro do timeout ou retornar 5xx, tenta a AbacatePay.
- Se a AbacatePay também falhar, tenta o MercadoPago.
- 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 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?