# 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).