# Callbacks & resultado
FaciPayCallback, PaymentResult e tratamento de erros.
O `FaciPayCallback` entrega o resultado do pagamento.
```kotlin
object : FaciPayCallback {
override fun onApprove(result: PaymentResult) {
// Pagamento confirmado
navigateToSuccess(result.orderId)
}
override fun onPending(result: PaymentResult) {
// Referência gerada — mostrar instruções de pagamento
showReference(result.data)
}
override fun onCancel() {
// Utilizador fechou o checkout
}
override fun onError(error: FaciPayException) {
showError(error.code, error.message)
}
}
```
Para Java ou para implementar só alguns métodos, use `FaciPayCallbackAdapter` (todos os
métodos têm implementação vazia por defeito).
## PaymentResult
Identificador da transação.
`CREATED` | `PENDING` | `CANCELLED` | `CONFIRMED`.
`DIRECT` | `MCX` | `REFERENCE`.
JSON bruto com campos adicionais; `data` expõe-o como `Map`.
Propriedades auxiliares: `isConfirmed`, `isPending`, `isCancelled`.
## Códigos de erro (FaciPayException)
```
CODE_INVALID_KEY CODE_PAYMENT_FAILED
CODE_KEY_VALIDATION_FAILED CODE_PAYMENT_CANCELLED
CODE_NETWORK_ERROR CODE_INVALID_REQUEST
CODE_TIMEOUT CODE_POPUP_BLOCKED
CODE_SDK_NOT_INITIALIZED CODE_UNKNOWN
```
Tal como na web, o **webhook no seu backend** é a fonte da verdade do estado do pagamento.
Os callbacks servem a experiência do utilizador; confirme o pagamento pelo webhook antes do
fulfillment. Ver [Webhooks](/pt/api-reference/webhooks).