A SDK inclui uma integração de referência completa — a Wow Media Store — em examples/fake-store/. É uma loja funcional com produtos, carrinho, checkout, webhook e páginas de retorno. Use-a como mapa para a sua própria integração.
A integração de referência é didática. O webhook de exemplo não valida HMAC (está marcado como TODO). Em produção, siga sempre o guia de Segurança e valide a assinatura.

Stack

  • Backend: Node.js + Express + TypeScript
  • Base de dados: SQLite (prepared statements)
  • Frontend: HTML + a FaciPay JS SDK

Correr localmente

Anatomia

O fluxo, passo a passo

1

Carregamento de produtos e carrinho

A loja lê produtos da BD e mantém um carrinho por sessão.
2

Renderização do botão FaciPay

checkout.html chama FaciPay(token).generateButton({...}).render('#facipay-checkout-button').
3

createOrder() → backend

O callback faz POST /api/orders/create-from-cart. O servidor recalcula o total, cria a ordem na BD e chama FaciPayService.createOrder() → devolve referenceNumber.
4

Popup e callbacks

A SDK abre o popup. Conforme o resultado, dispara onApprove, onPending ou onCancel, e a loja redireciona para success / pending-ref / cancel.
5

Webhook

A FaciPay chama POST /api/webhook/payment. O OrderStatusService atualiza o estado (CON/CAN/PEN) e executa ações pós-pagamento (limpar carrinho, etc.).

Backend: criar a ordem

O FaciPayService.createOrder() mostra o fluxo real de token + criação de ordem (ver Autenticação):
O additionalInfo é apenas informativo — não é usado para configurar o webhook nem quaisquer URLs de retorno/cancelamento. O webhook é registado de forma global pela equipa FaciPay contra as suas credenciais, e a navegação de retorno/cancelamento é tratada pelos callbacks do SDK (onApprove/onPending/onCancel).

Frontend: SDK real

O checkout.html usa funcionalidades além do básico — referências múltiplas, info do cliente e atualização de quantidade:
Os scripts facipay-profiles.js e facipay-settings.js do exemplo são andaimes do demo (troca de credenciais entre perfis) — não fazem parte da SDK pública.

Próximo passo: Segurança

Como validar o webhook corretamente (o que o exemplo ainda não faz).