dunas

Provedores

Um provedor ou vários, atrás da mesma API.

O provedor é quem cobra de verdade. O dunas fala com cada um do jeito dele e entrega a mesma resposta para o seu código, então trocar ou adicionar um provedor é uma linha na configuração.

Woovi

woovi({ appId: process.env.WOOVI_APP_ID, sandbox: true })

sandbox: true usa o ambiente de testes. Se você configurar um header de autorização nos webhooks da Woovi, passe o mesmo valor em webhookAuthorization.

AbacatePay

abacatepay({
  apiKey: process.env.ABACATEPAY_API_KEY,
  webhookSecret: process.env.ABACATEPAY_WEBHOOK_SECRET,
})

O modo de desenvolvimento vem da própria chave.

Formas de pagamento

Pix vem ligado em todos os provedores. As outras formas você liga em methods, só com o que a sua conta tem:

woovi({ appId: process.env.WOOVI_APP_ID, methods: ["pix_automatico"] })

abacatepay({
  apiKey: process.env.ABACATEPAY_API_KEY,
  webhookSecret: process.env.ABACATEPAY_WEBHOOK_SECRET,
  methods: ["card", "pix_automatico"],
})
PixPix AutomáticoCartão
Woovihosted ou embeddedhosted ou embedded—
AbacatePayhosted ou embeddedhostedhosted

hosted manda o cliente para a página do provedor. embedded devolve o Pix para você mostrar no seu app. O TypeScript acompanha essa tabela: subscribe só aceita a forma e o checkout que algum provedor ligou.

  • Na Woovi, Pix Automático pede o nome e o CPF ou CNPJ do cliente.
  • Na AbacatePay, Pix Automático precisa ser habilitado na loja pelo suporte.
  • Uma assinatura com Pix Automático ou cartão fica no provedor que a criou. O roteamento só escolhe na hora de assinar.

Roteamento

Com mais de um provedor, routing escolhe qual cria cada cobrança, entre os que oferecem a forma de pagamento pedida.

ModoO que faz
"failover"Usa o primeiro da lista e passa para o próximo se ele falhar. É o padrão.
"round-robin"Alterna entre eles.
{ weights: { woovi: 70, abacatepay: 30 } }Divide por peso.
Uma funçãoVocê decide, por valor ou por cliente.
routing: ({ amountInCents }) => (amountInCents > 50_000 ? "woovi" : "abacatepay")

A função também pode devolver uma lista, que vira a ordem de tentativa.

Webhooks

Os provedores avisam o seu app quando uma cobrança muda. Registre os webhooks uma vez, com o servidor já no ar:

await billing.registerWebhooks({ baseUrl: "https://seuapp.com" })

Registrar de novo não duplica nada. E o dunas trata cada aviso só como um sinal: ele confere a assinatura e relê a cobrança no provedor antes de liberar qualquer acesso.

Dados do cliente

Os provedores pedem dados de quem paga. Mande o que você tiver com upsertCustomer. A AbacatePay recebe o pagador quando há nome, e-mail, CPF ou CNPJ e celular. A Woovi, quando há nome e pelo menos um desses três.

Nesta página