O checkout devolve um CheckoutResult.
enum CheckoutResult {
case approved(PaymentResult) // pagamento confirmado
case pending(PaymentResult) // referência gerada
case cancelled // utilizador cancelou
case failed(FaciPayError) // erro
}
completion: { result in
switch result {
case .approved(let payment):
updateUI(status: "Confirmado", orderId: payment.orderId)
case .pending(let payment):
showReference(payment.rawData)
case .cancelled:
updateUI(status: "Cancelado")
case .failed(let error):
showError(error.localizedDescription)
}
}
PaymentResult
Identificador da ordem FaciPay.
.created | .pending | .cancelled | .confirmed.
.direct | .mcx | .reference.
Campos adicionais da resposta (referência, entidade, etc.).
FaciPayError
.invalidKey(String) .paymentFailed(String)
.keyValidationFailed(String) .cancelled
.networkError(String) .invalidRequest(String)
.sdkNotInitialized .uiError(String)
.timeout .unknown(String)
Todos os erros expõem errorDescription e recoverySuggestion (via LocalizedError).
Como na web, o webhook no teu backend é a fonte da verdade. Confirma o pagamento pelo
webhook antes do fulfillment. Ver Webhooks.