O FaciPayCallback entrega o resultado do pagamento.
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, usa FaciPayCallbackAdapter (todos os métodos têm implementação vazia por defeito).

PaymentResult

orderId
String
Identificador da transação.
status
PaymentStatus
CREATED | PENDING | CANCELLED | CONFIRMED.
type
PaymentType
DIRECT | MCX | REFERENCE.
rawData
String?
JSON cru 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
Tal como na web, o webhook no teu backend é a fonte da verdade do estado do pagamento. Os callbacks servem a experiência do utilizador; confirma o pagamento pelo webhook antes do fulfillment. Ver Webhooks.