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 PaymentResult | Popis |
|---|---|
PaymentResult.Paid | Platba bola dokončena a potvrzena. |
PaymentResult.Authorized | Platba bola autorizovaná bankou (pre-autorizácia). |
PaymentResult.Pending | Platba sa stále spracováva (medzistav). |
PaymentResult.Cancelled | Platba bola zrušená alebo zamietnutá serverem. |
PaymentResult.Failed | Chyba na strane knižnice počas platebního procesu. |
Paid
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
errorReason | Význam |
|---|---|
CUSTOMER_CLICK | Zrušené platiteľom. |
FRAUD_SUSPECTED | Podozrenie na podvod. |
ESHOP_CANCELLED | Zrušené obchodníkom. |
PROVIDER_REPORT | Zrušené providerom. |
PROVIDER_TIMEOUT | Vypršal časový limit poskytovateľa. |
CUSTOMER_TIMEOUT | Vypršal časový limit platby. |
ACS_TIMEOUT | Vypršal časový limit na overenie. |
INVALID_CARDNO_EXPIRY | Nesprávne zadané číslo karty alebo dátum platnosti karty. |
INVALID_CVC | Nesprávne zadaný CVC / CVV kód. |
LIMIT_EXCEEDED | Limit karty bol prekročený. |
NO_FUNDS | Na účte nie je dostatočný zostatok. |
REJECTED_BY_BANK | Platba bola zamietnutá bankou. |
3DS_AUTH_FAIL | Overenie platby nebolo úspešné. |
NOT_SPECIFIED | Nešpecifikované. |
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 chybymessage— ľudsky čitateľný popis v angličtine
Inicializácia
| Kód | Popis |
|---|---|
DEVICE_ROOTED | Zariadenie 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_ERROR | Inicializácia session zlyhala pre sieťovú chybu. |
INIT_UNAUTHORIZED | Server vrátil HTTP 401 pri inicializácii — neplatná alebo expirovaná autorizácia. |
INIT_FAILED | Inicializácia session zlyhala (iný než sieťový dôvod). |
APPLICATION_NOT_ALLOWED | Aplikácia nie je povolená na použitie SDK (package name nie je na allow-liste). |
Spracovanie platby
| Kód | Popis |
|---|---|
SESSION_NOT_INITIALIZED | Session nebola inicializována. Zavolejte nejprve initialize(). |
INVALID_CARD_DATA | Kartové údaje nejsou validní. |
MISSING_CARDHOLDER_NAME | Meno držiteľa karty nebolo poskytnuté. |
PAYMENT_FAILED | Platba selhala (jiný než síťový dôvod). |
PAYMENT_NETWORK_ERROR | Platobná požiadavka zlyhala pre sieťovú chybu. |
PAYMENT_CREATE_FAILED | Vytvorenie platby selhalo. |
POLLING_TIMEOUT | Kontrola stavu platby vypršala. |
POLLING_NETWORK_ERROR | Kontrola stavu platby zlyhala pre sieťovú chybu. |
Google Pay
| Kód | Popis |
|---|---|
GOOGLE_PAY_NOT_CONFIGURED | Google Pay nie je nakonfigurovaný. |
GOOGLE_PAY_FAILED | Google Pay platba zlyhala. |
Validácia polí
| Kód | Popis |
|---|---|
INVALID_PAN | Neplatné číslo karty. |
INVALID_EXPIRY_MONTH | Neplatný mesiac expirácie. |
CARD_EXPIRED | Karta je expirovaná. |
INVALID_CVV | Neplatný 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)
| PaymentResult | Správanie |
|---|---|
Paid | Zobrazí lokalizovanú správu „Paid“ so zeleným štýlom (úspech). |
Authorized | Zobrazí lokalizovanú správu „Authorized" so zeleným štýlom (úspech). |
Pending | Zobrazí lokalizovanou zprávu „Processing" s oranžovým stylem (spracovania). |
Cancelled | Zobrazí errorReason s červeným štýlom (chyba). |
Failed | Zobrazí 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)
)
}
}
}