POST para o único endpoint registado para a sua conta.
Como os webhooks são configurados
Os webhooks são configurados ao nível da conta, não por ordem. Você fornece a URL do seu endpoint de webhook à equipa FaciPay (no onboarding ou via suporte); ela regista-a internamente contra as credenciais da sua conta. A partir daí, a FaciPay fazPOST de todas as notificações
de estado de pagamento da sua conta para esse único endpoint registado.
Não existe portal self-service: é a equipa FaciPay que regista a URL por si. O campo
additionalInfo
do createPaymentOrder é puramente informativo e não configura o webhook nem quaisquer URLs de
retorno/cancelamento — a navegação de retorno/cancelamento é feita no cliente pelos callbacks da SDK
(onApprove / onPending / onCancel).Payload
| Campo | Descrição |
|---|---|
data.externalTransactionId | Chave de idempotência (a sua ordem). |
data.paymentStatus | PEN | CON | CAN. |
data.referenceNumber | Referência associada. |
data.amount | Valor em AOA (inteiro). |
Verificação da assinatura
Cada webhook é assinado. O headerx-facipay-content-token contém o HMAC SHA-256 do body
cru calculado com o seu WEBHOOK_SECRET. Verifique-o antes de JSON.parse.
Leia o body cru
Antes de qualquer parser JSON (ver detalhes por framework em Segurança).
Node.js (Express)
Mapeamento de estados
paymentStatus | Ação |
|---|---|
CON | Pago. Dispara fulfillment (confirmação, email, libertar produto). |
CAN | Cancelado. Reabre carrinho, liberta stock. |
PEN | Continua pendente. |
Idempotência
Fallback
Se o webhook falhar ou atrasar, useGET /facipaypartner/paymentByExternalTransaction para
consultar o estado. É apenas rede de segurança — o webhook continua a ser a fonte da verdade.
A integração de referência (
fake-store) recebe o webhook mas não valida a assinatura
(é didática). Em produção, valide sempre o HMAC como acima.