Failover de pagamentos é trocar de provedor automaticamente quando o principal deixa de responder, para que as cobranças continuem sendo geradas. No Pix, uma queda de adquirente sem failover significa checkout parado: o cliente quer pagar e não recebe o QR Code. Com failover, a cobrança é gerada em outra adquirente e o pagador nem percebe a troca.
Na xFlow Payments, o failover é a retentativa automática: se a adquirente escolhida não responde, a xFlow tenta de novo e, se precisar, gera a cobrança na próxima adquirente da cadeia. A seguir, o que acontece numa queda, como desenhar o failover e o que o seu sistema precisa fazer.
O que acontece numa queda de adquirente
Uma adquirente fora do ar raramente avisa. Os sinais mais comuns são:
- pedidos de cobrança que demoram e terminam em timeout;
- erros na geração da cobrança;
- cobranças que não chegam ao pagador.
Para quem vende, o efeito é imediato: cada tentativa de compra sem QR Code é uma venda que pode não voltar. Quanto maior o volume, maior o custo de cada minuto parado.
Failover, retentativa e contingência
Os termos aparecem juntos e se completam:
| Termo | O que significa | Na xFlow |
|---|---|---|
| Retentativa | Tentar de novo no mesmo provedor | A xFlow tenta de novo quando a adquirente não responde |
| Failover | Trocar para outro provedor | A cobrança Pix é gerada na próxima adquirente da cadeia |
| Cadeia de contingência | A ordem dos provedores que entram em caso de falha | Definida por regra de roteamento, na configuração da sua conta |
Como desenhar failover de pagamentos
1. Tenha uma cadeia ordenada
Failover precisa de um plano B definido antes da falha. Cada regra deve dizer qual provedor vem primeiro, qual vem depois e assim por diante. Na xFlow, essa ordem faz parte do roteamento de pagamentos: cada regra, por valor, horário ou dia da semana, aponta para uma cadeia.
2. Defina quando desistir de um provedor
Esperar indefinidamente por uma resposta é o mesmo que estar parado. O failover precisa de um limite de espera por tentativa e de um número de novas tentativas antes de passar para o próximo. Na xFlow, isso é feito do lado da xFlow, por adquirente da cadeia.
3. Proteja contra duplicidade
Toda troca e todo retry carregam o risco de gerar duas cobranças para o mesmo pedido. A defesa é a idempotência: um identificador único por pedido, que faz o provedor devolver a mesma cobrança em vez de criar outra. Na API da xFlow, esse identificador é o cabeçalho Idempotency-Key.
4. Cuidado redobrado no dinheiro que sai
Na entrada, uma cobrança a mais fica pendente e expira sem pagamento. Na saída, um envio a mais é dinheiro que sai duas vezes. Por isso, no saque, a regra é nunca repetir sem idempotência: envie o Idempotency-Key em todo POST /api/v1/transfers e espere o webhook withdrawal.completed ou withdrawal.failed antes de concluir que algo deu errado.
5. Observe o que está acontecendo
Failover sem visibilidade esconde problemas. Acompanhe os códigos de erro, o tempo de resposta e a situação dos serviços.
Como a xFlow faz failover no Pix
- Seu sistema chama
POST /api/v1/chargescom umIdempotency-Key. - A regra de roteamento da sua conta escolhe a primeira adquirente.
- Se ela não responde, a xFlow tenta de novo.
- Se continuar sem resposta, a xFlow gera a cobrança na próxima adquirente da cadeia.
- A API devolve a cobrança com
pix.copyPasteepix.qrCodeBase64, no mesmo formato de sempre. - Se nenhuma adquirente da cadeia gerar a cobrança, a API responde
502 charge_failed.
O pagador recebe um único QR Code, o da cobrança que a API devolveu. O seu sistema não precisa saber qual adquirente gerou a cobrança.
O que o seu sistema deve fazer
| Situação | O que fazer |
|---|---|
| Sem resposta da API (a conexão caiu do seu lado) | Repita o pedido com o mesmo Idempotency-Key e o mesmo corpo |
502 charge_failed |
A cobrança não foi gerada. Espere um pouco e tente de novo com o mesmo Idempotency-Key |
429 rate_limited |
Espere os segundos do cabeçalho retry-after e tente de novo |
409 idempotency_conflict |
A chave foi usada com outro corpo. Use uma chave nova para um pedido novo |
| Webhook não chegou | Consulte GET /api/v1/charges/{id} para confirmar o status |
Exemplo de retry seguro em Node.js
async function criarCobranca(pedido, tentativas = 3) {
const cred = Buffer.from(process.env.XFLOW_PUBLIC_KEY + ":" + process.env.XFLOW_SECRET_KEY).toString("base64");
for (let i = 0; i < tentativas; i++) {
try {
const res = await fetch("https://app.xflowpayments.com/api/v1/charges", {
method: "POST",
headers: {
Authorization: "Basic " + cred,
"Content-Type": "application/json",
"Idempotency-Key": "pedido-" + pedido.id, // a mesma chave em todas as tentativas
},
body: JSON.stringify({
amountCents: pedido.valorCentavos,
customer: pedido.cliente,
external_reference: "pedido-" + pedido.id,
}),
});
if (res.status === 429) {
const espera = Number(res.headers.get("retry-after") || 1);
await new Promise((r) => setTimeout(r, espera * 1000));
continue;
}
if (res.status === 502) {
await new Promise((r) => setTimeout(r, 2000 * (i + 1)));
continue;
}
return await res.json();
} catch (erro) {
// a conexão falhou do seu lado: repete com a mesma Idempotency-Key
await new Promise((r) => setTimeout(r, 2000 * (i + 1)));
}
}
throw new Error("Não foi possível gerar a cobrança agora.");
}Como a chave é a mesma em todas as tentativas, a API devolve a mesma cobrança se uma delas já tiver sido criada. Os detalhes estão na documentação.
Como acompanhar a operação
- Página de status. A página de status mostra a situação da API, dos webhooks e do painel.
- Logs da API. Em Integrações > Logs da API, cada requisição aparece com status, duração e código de erro, por 30 dias.
- request_id. Toda resposta traz um
request_id. Guarde-o nos seus logs para cruzar com os da xFlow e com o suporte.
Failover é uma das peças da orquestração de pagamentos. Se você ainda compara opções, veja a diferença entre orquestração e gateway.
Perguntas frequentes
O que é failover de pagamentos?
É a troca automática para outro provedor de pagamento quando o principal falha. No Pix, a cobrança é gerada em outra adquirente, e o pagador recebe o QR Code normalmente.
O que acontece com as vendas numa queda de adquirente?
Sem failover, as cobranças não são geradas até a adquirente voltar, e o checkout para. Com failover, a próxima adquirente da cadeia assume a geração das cobranças.
Como a xFlow faz failover?
Cada regra de roteamento tem uma cadeia de adquirentes em ordem. Se a adquirente escolhida não responde ao pedido da cobrança Pix, a xFlow tenta de novo e, se precisar, gera a cobrança na próxima da cadeia.
Meu sistema precisa fazer alguma coisa durante a queda?
O failover entre adquirentes é feito pela xFlow. Do seu lado, envie sempre um Idempotency-Key, repita o pedido com a mesma chave se não receber resposta e trate os erros 502 charge_failed e 429 rate_limited.