# Go-live checklist
Checklist para passar a FaciPay de sandbox a produção sem surpresas.
Antes de trocar `pk_test_` por `pk_live_`, percorra esta checklist.
## Verificação funcional
Sem erros no console; o botão renderiza dentro do container.
Pagamento confirmado dispara `onApprove` e redireciona para `/sucesso`.
`onPending` recebe os dados da referência (`data.payment?.data?.paymentReference` e `entity.number`); a página `/pendente` mostra-os ao cliente.
Fechar o popup sem pagar dispara `onCancel` → `/cancelado`.
## Verificação do webhook
| # | Cenário | Esperado |
|---|---|---|
| 1 | Assinatura **válida** | Estado da ordem muda na BD. |
| 2 | Assinatura **inválida** | `401`; a BD **não** muda. |
| 3 | Webhook **duplicado** (mesmo `paymentId` + `paymentStatus`) | `200`, **sem** reprocessar. |
| 4 | Fallback `paymentByExternalTransaction` | Devolve o mesmo estado da BD após o webhook. |
## Produção
- Troque a base URL para `https://api.faciconnect.com` e a chave para `pk_live_…`.
- Confirme que **HTTPS** está ativo no seu domínio (a SDK e os webhooks exigem-no).
- O URL do endpoint de webhook que registou junto da equipa FaciPay é **público**, HTTPS e acessível.
## Robustez
- **Total recalculado no servidor** em todas as ordens.
- **Idempotência**: localize a ordem por `externalTransactionId`, deduplique por `paymentId` + `paymentStatus`.
- Tarefas pesadas (emails, ERP, faturação) fora do caminho do webhook (fila/background),
para responder `200` em < 5s.
- **Avise o utilizador** para permitir popups do seu site.
- Polling de fallback na página `/pendente` (a cada 5–10s) caso o webhook atrase.
## Suporte
Dúvidas ou credenciais de produção: [atendimento@faci-x.ao](mailto:atendimento@faci-x.ao).