Credenciais

CLIENT_SECRET e WEBHOOK_SECRET nunca podem ir para o bundle do frontend. Mantenha-os em variáveis de ambiente no servidor.

applicationUUID

Várias chamadas à API pedem applicationUUID. É a sua PUBLISHABLE_KEY sem o prefixo:

Ambientes

Teste sempre todo o fluxo com pk_test_ antes de mudar para pk_live_. Produção exige HTTPS.

Ciclo de vida da ordem

Uma ordem tem três estados. A transição é dirigida pela FaciPay e confirmada pelo webhook.

A fonte da verdade

O estado autoritativo de um pagamento vem sempre do webhook no seu backend, não dos callbacks do frontend. Os callbacks (onApprove, onPending, onCancel) servem para a experiência do utilizador; a confirmação de negócio (libertar produto, faturar) só acontece quando o webhook confirma CON. O endpoint GET /facipaypartner/paymentByExternalTransaction é apenas uma rede de segurança (fallback) para quando o webhook falha ou atrasa.

Idempotência

O externalTransactionId é a chave de idempotência. Garante que:
  • Cada ordem tem um externalTransactionId único (ex.: order_<UUID>).
  • Se um webhook chegar repetido para uma ordem já em estado final (CON/CAN), responde 200 sem reprocessar.

Recebimentos e taxas

Próximo passo: Segurança

Verificação HMAC do webhook, passo a passo por framework.