Skip to main content

Výsledky platby

Výsledok platby je reprezentovaný sealed triedou PaymentResult. Callback onPaymentResult v SecurePayButton.setup() aj SecureGooglePayButton.setup() je vždy volaný na hlavnom vlákne (main thread).

PaymentResult​

V praxi rozlišujte tieto typy výsledku:

Typ PaymentResultPopis
PaymentResult.PaidPlatba bola dokončena a potvrzena.
PaymentResult.AuthorizedPlatba bola autorizovaná bankou (pre-autorizácia).
PaymentResult.PendingPlatba sa stále spracováva (medzistav).
PaymentResult.CancelledPlatba bola zrušená alebo zamietnutá serverem.
PaymentResult.FailedChyba na strane knižnice počas platebního procesu.

Platba je úspešne dokončená.

is PaymentResult.Paid -> {
val transId = result.transId
// Platba dokončena
}

Authorized​

Platba bola autorizovaná (pre-autorizovaná) bankou. Ide o finálny stav. Zachytenie (settlement) platby vykoná obchodník samostatne pomocou štandardných endpointov /capturePreauth alebo /cancelPreauth.

is PaymentResult.Authorized -> {
val transId = result.transId
// Platba autorizovaná, čaká na zachytenie
}

PENDING​

Platba ešte nie je finálna, backend ju stále spracováva. Finálnym stavom bude Paid, Authorized alebo Cancelled.

is PaymentResult.Pending -> {
val transId = result.transId
// Čekáme na finální stav
}

CANCELLED​

Platba bola zrušená alebo zamietnutá serverem. Obsahuje identifikátor transakce a volitelný dôvod.

is PaymentResult.Cancelled -> {
val transId = result.transId
val reason = result.errorReason
// Platba bola ukončena bez úhrady
}

Ak je výsledok PaymentResult.Cancelled, obsahuje odpoveď aj errorReason. V SDK je tento dôvod dostupný jako PaymentResult.Cancelled.errorReason.

Možné hodnoty errorReason​

errorReasonVýznam
CUSTOMER_CLICKZrušené platiteľom.
FRAUD_SUSPECTEDPodozrenie na podvod.
ESHOP_CANCELLEDZrušené obchodníkom.
PROVIDER_REPORTZrušené providerom.
PROVIDER_TIMEOUTVypršal časový limit poskytovateľa.
CUSTOMER_TIMEOUTVypršal časový limit platby.
ACS_TIMEOUTVypršal časový limit na overenie.
INVALID_CARDNO_EXPIRYNesprávne zadané číslo karty alebo dátum platnosti karty.
INVALID_CVCNesprávne zadaný CVC / CVV kód.
LIMIT_EXCEEDEDLimit karty bol prekročený.
NO_FUNDSNa účte nie je dostatočný zostatok.
REJECTED_BY_BANKPlatba bola zamietnutá bankou.
3DS_AUTH_FAILOverenie platby nebolo úspešné.
NOT_SPECIFIEDNešpecifikované.
Testovanie chybových scenárov

V dev režime (devMode = true) môžete tieto hodnoty simulovať pomocou parametra errorReason v PaymentParams. Viď sekciu Simulácia chybového dôvodu.

FAILED​

Chyba na strane knižnice, ktorá nastala počas platobného procesu. Na rozdiel od Cancelled (kde server aktívne zamietol platbu), Failed značí, že k dokončeniu platby vôbec nedošlo — napr. sieťová chyba,...

Výsledok obsahuje objekt ComgateError s machine-readable kódom (code) a ľudsky čitateľnou správou (message).

is PaymentResult.Failed -> {
val errorCode = result.error.code // napr. "PAYMENT_NETWORK_ERROR"
val errorMessage = result.error.message // napr. "Payment request failed due to a network error"
// Zobrazení chyby používateľi
}

ComgateError​

Všetky chyby sú definované ako podtypy sealed triedy ComgateError. Každý typ obsahuje:

  • code — strojovo čitateľný identifikátor chyby
  • message — ľudsky čitateľný popis v angličtine
Inicializácia​
KódPopis
DEVICE_ROOTEDZariadenie je pravdepodobne rootované alebo inak pozmenené. Inicializácia je zablokovaná za účelom ochrany kartových dát. V devMode sa táto kontrola preskočí.
INIT_NETWORK_ERRORInicializácia session zlyhala pre sieťovú chybu.
INIT_UNAUTHORIZEDServer vrátil HTTP 401 pri inicializácii — neplatná alebo expirovaná autorizácia.
INIT_FAILEDInicializácia session zlyhala (iný než sieťový dôvod).
APPLICATION_NOT_ALLOWEDAplikácia nie je povolená na použitie SDK (package name nie je na allow-liste).
Spracovanie platby​
KódPopis
SESSION_NOT_INITIALIZEDSession nebola inicializována. Zavolejte nejprve initialize().
INVALID_CARD_DATAKartové údaje nejsou validní.
MISSING_CARDHOLDER_NAMEMeno držiteľa karty nebolo poskytnuté.
PAYMENT_FAILEDPlatba selhala (jiný než síťový dôvod).
PAYMENT_NETWORK_ERRORPlatobná požiadavka zlyhala pre sieťovú chybu.
PAYMENT_CREATE_FAILEDVytvorenie platby selhalo.
POLLING_TIMEOUTKontrola stavu platby vypršala.
POLLING_NETWORK_ERRORKontrola stavu platby zlyhala pre sieťovú chybu.
Google Pay​
KódPopis
GOOGLE_PAY_NOT_CONFIGUREDGoogle Pay nie je nakonfigurovaný.
GOOGLE_PAY_FAILEDGoogle Pay platba zlyhala.
Validácia polí​
KódPopis
INVALID_PANNeplatné číslo karty.
INVALID_EXPIRY_MONTHNeplatný mesiac expirácie.
CARD_EXPIREDKarta je expirovaná.
INVALID_CVVNeplatný CVV kód.

SecurePaymentStatusView​

Komponenta SecurePaymentStatusView slúži na zobrazovanie stavových hlásení platby (úspech, spracovanie, chyba). Začína v skrytom stave (GONE) a zobrazí sa po zavolaní showStatus().

Zobrazenie stavu z PaymentResult​

Metóda showStatus(PaymentResult) automaticky rozpozná typ výsledku a zobrazí zodpovedajúci štýl:

val statusState = rememberPaymentStatusState()

// Automatické mapování PaymentResult na stavovou zprávu
statusState.showStatus(paymentResult)

// V Composable:
SecurePaymentStatusView(state = statusState)
PaymentResultSprávanie
PaidZobrazí lokalizovanú správu „Paid“ so zeleným štýlom (úspech).
AuthorizedZobrazí lokalizovanú správu „Authorized" so zeleným štýlom (úspech).
PendingZobrazí lokalizovanou zprávu „Processing" s oranžovým stylem (spracovania).
CancelledZobrazí errorReason s červeným štýlom (chyba).
FailedZobrazí error.message s červeným štýlom (chyba).

Skrytie view​

statusState.clear()

Štylizácia​

Podrobnosti o štylizácii SecurePaymentStatusView prostredníctvom update bloku, setter metód a XML atribútov nájdete v sekcii Štylizácia komponentov.

Kompletný príklad spracovania výsledkov​

@Composable
private fun PaymentResultHandler(session: ComgateSecureSession) {
val statusState = rememberPaymentStatusState()
var resultText by remember { mutableStateOf("") }
var resultVisible by remember { mutableStateOf(false) }

// ... (kartové polia, kolektor, tlačidlo — viď sekcia Kartové údaje)

// Spracovanie výsledku platby:
fun handlePaymentResult(result: PaymentResult) {
when (result) {
is PaymentResult.Paid -> {
statusState.showStatus(result)
resultVisible = true
resultText = "Platba dokončena\nTransId: ${result.transId ?: "-"}"
}

is PaymentResult.Authorized -> {
statusState.showStatus(result)
resultVisible = true
resultText = "Platba autorizovaná\nTransId: ${result.transId}"
}

is PaymentResult.Pending -> {
statusState.showStatus(result)
resultVisible = true
resultText = "Platba se zpracovává\nTransId: ${result.transId ?: "-"}"
}

is PaymentResult.Cancelled -> {
resultVisible = false
statusState.showStatus(result)
// Volitelne: Toast.makeText(context, "Platba zrušená: ${result.errorReason ?: "bez detailu"}", Toast.LENGTH_LONG).show()
}

is PaymentResult.Failed -> {
resultVisible = false
statusState.showStatus(result)
Log.w("PaymentResult", "Failed: ${result.error.code} — ${result.error.message}")
// Volitelne: Toast.makeText(context, "Chyba: ${result.error.message}", Toast.LENGTH_LONG).show()
}
}
}

Column(modifier = Modifier.fillMaxWidth()) {
SecurePaymentStatusView(
state = statusState,
modifier = Modifier.fillMaxWidth()
)

if (resultVisible) {
Text(
text = resultText,
modifier = Modifier.padding(top = 8.dp)
)
}
}
}