Přeskočit na hlavní obsah

Google Pay

Knihovna obsahuje komponentu SecureGooglePayButton, která zjednodušuje integraci Google Pay do vaší aplikace. Komponenta automaticky:

  • ověří dostupnost Google Pay na zařízení,
  • zobrazí standardní Google Pay tlačítko,
  • zpracuje platební tok a získá platební token,
  • odešle token ke zpracování na platební bránu.
Informace

Předpokladem pro využití Google Pay je aktivace Checkout API a správné nastavení v Google Play ConsoleGoogle Pay Console, které jsou popsány níže. Kompletní dokumentaci pro nativní integraci bez SDK naleznete v sekci Google Pay — Mobilní aplikace.

1. Google Play Console

Před nasazením Google Pay do produkční verze aplikace je nutné aplikaci správně nakonfigurovat a publikovat v obchodě Google Play. Tento krok je požadován společností Google a je nezbytný pro aktivaci Google Pay v souladu s jejími podmínkami.

Konfigurace, nahrávání a správa aplikace se provádí prostřednictvím rozhraní Google Play Console. Aplikace musí být dostupná minimálně v režimu interního nebo uzavřeného testování. Možností je také plné zveřejnění.

Tip

V dokumentaci není popsán podrobný postup nastavení v Google Play Console. Proces může být rozsáhlý a liší se podle konkrétní situace, proto doporučujeme řídit se oficiálními pokyny společnosti Google.

Během vývoje je také nutné zohlednit další požadavky Google, které se týkají zveřejnění aplikace s dostupným Google Pay.

2. Google Pay Console

Jakmile je aplikace zpřístupněna alespoň v režimu interního testování, je vhodné seznámit se s požadavky na schválení v Google Pay Console. Tento krok je nezbytný pro aktivaci produkční verze Google Pay.

Celý proces registrace a konfigurace je popsán v oficiální dokumentaci.

Schvalovací proces může trvat několik dní a vyžaduje splnění následujících požadavků:

Upozornění

Součástí schvalovacího procesu je také doložení screenshotů implementace Google Pay ve vaší aplikaci.

V tomto kroku postačuje zřídit přístup do Google Pay Console a ověřit, že je v sekci „Rozhraní API služby Google Pay" uvedena vaše aplikace, která byla nakonfigurována v Google Play Console.

Podání žádosti o schválení bude popsáno v pozdější sekci, a to po dokončení integrace.

3. Implementace

Následující část popisuje jednotlivé komponenty knihovny potřebné k integraci Google Pay do vaší aplikace.

Tip

Knihovna řeší konfiguraci platební brány, sestavení platebního požadavku, extrakci tokenu i jeho odeslání na API automaticky. Stačí použít komponentu SecureGooglePayButton a předat potřebné parametry.

Požadavky

PožadavekPopis
googleMerchantIdGoogle Pay Merchant ID — povinný pro produkční prostředí.
googleMerchantNameNázev obchodníka zobrazený v Google Pay dialogu (volitelné).
threeDSConfigInstance ThreeDSConfig předaná do ComgateSecureSession (vyžadováno i pro Google Pay).
Aktivace Checkout APIKonfigurace Google Pay je během inicializace session načtena interně knihovnou.

Jak získat googleMerchantId

googleMerchantId získáte v Google Pay & Wallet Console v detailu vašeho obchodnického profilu.

Stručný postup:

  1. Otevřete Google Pay & Wallet Console.
  2. Vyberte svůj Merchant profil (nebo vytvořte nový).
  3. V sekci s detaily integrace zkopírujte hodnotu Merchant ID.
  4. Tuto hodnotu použijte jako googleMerchantIdComgateSecureSession.

SecureGooglePayButton

Jetpack Compose

import cz.comgate.sdk.compose.*

SecureGooglePayButton(
session = session,
onPaymentResult = { result -> handleResult(result) },
paymentParamsProvider = {
PaymentParams(
price = 100,
curr = "CZK",
country = "CZ",
label = "Název platby",
refId = "ref-123",
fullName = "Jan Novák"
)
},
modifier = Modifier
.fillMaxWidth()
.height(56.dp)
)

Nastavení vzhledu tlačítka

SecureGooglePayButton nově umožňuje přizpůsobit vzhled a typ Google Pay tlačítka.

Metody stylování

MetodaParametrPopis
setButtonTheme(theme)GooglePayButtonThemeNastaví vizuální variantu (DARK, LIGHT).
setButtonType(type)GooglePayButtonTypeNastaví typ popisku tlačítka.
setCornerRadius(radiusDp)IntNastaví zaoblení rohů v dp.
SecureGooglePayButton(
session = session,
onPaymentResult = { result -> /* ... */ },
paymentParamsProvider = { /* ... */ },
modifier = Modifier.fillMaxWidth().height(56.dp),
update = {
setButtonTheme(GooglePayButtonTheme.LIGHT)
setButtonType(GooglePayButtonType.CHECKOUT)
setCornerRadius(12)
}
)

XML atributy

XML atributFormátPopis
app:gpButtonThemeenumVizuální varianta tlačítka: dark (výchozí), light.
app:gpButtonTypeenumTyp popisku tlačítka: book, buy, checkout, donate, order, pay (výchozí), plain, subscribe.
app:gpButtonCornerRadiusdimensionZaoblení rohů tlačítka (výchozí: 8dp).

Nastavení

Metoda setup() propojí tlačítko se session a parametry platby:

Důležitý rozdíl oproti karetní platbě
  • SecurePayButton (Compose) používá Activity.
  • SecureGooglePayButton (Compose) vyžaduje FragmentActivity (nebo podtyp, např. AppCompatActivity).
@Composable
private fun PaymentScreen(session: ComgateSecureSession) {
SecureGooglePayButton(
session = session,
onPaymentResult = { result ->
// Zpracování výsledku platby
},
paymentParamsProvider = {
PaymentParams(
price = 100,
curr = "CZK",
label = "Název platby",
refId = "ref-123",
fullName = "Jan Novák",
country = "CZ"
)
},
modifier = Modifier
.fillMaxWidth()
.height(56.dp)
)
}

Automatická vazba na session

Po zavolání gpButton.setup(...) se tlačítko automaticky naváže na ComgateSecureSession. Jakmile session dokončí inicializaci a obsahuje Google Pay konfiguraci, tlačítko samo ověří dostupnost Google Pay na zařízení a případně se zobrazí.

val session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
threeDSConfig = ThreeDSConfig(),
lifecycleOwner = this,
onInitialized = { result ->
result.onFailure { e ->
Toast.makeText(this, "Chyba: ${e.message}", Toast.LENGTH_LONG).show()
}
}
)
Použití ve Fragmentu

Ve výše uvedených příkladech se do lifecycleOwner předává this (aktivita). Pokud session vytváříte uvnitř Fragmentu, předejte místo toho viewLifecycleOwner — napojí session na životní cyklus view, čímž se předejde memory leakům:

  • Activity: lifecycleOwner = this
  • Fragment: lifecycleOwner = viewLifecycleOwner (ne this — Fragment přežívá opětovné vytvoření view)

PaymentParams

Parametry platby pro Google Pay využívají stejný objekt PaymentParams jako karetní platby. Kompletní popis všech parametrů naleznete v sekci Karetní data — PaymentParams.

Konfigurace v ComgateSecureSession

Pro Google Pay je nutné v konstruktoru ComgateSecureSession předat googleMerchantId (pro produkci) a volitelně googleMerchantName:

val session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
googleMerchantId = "váš-google-pay-merchant-id", // Povinné pro produkci
googleMerchantName = "Název obchodu", // Volitelné
threeDSConfig = ThreeDSConfig(), // Vyžadováno i pro Google Pay
lifecycleOwner = this
)

Kompletní příklad

class PaymentActivity : AppCompatActivity() {

private lateinit var session: ComgateSecureSession

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

// 1. Vytvoření session s Google Pay konfigurací
session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
googleMerchantId = "váš-google-pay-merchant-id",
googleMerchantName = "Název obchodu",
threeDSConfig = ThreeDSConfig(),
lifecycleOwner = this,
onInitialized = { result ->
result.onFailure { e ->
Toast.makeText(this, "Chyba: ${e.message}", Toast.LENGTH_LONG).show()
}
}
)

// 2. Nastavení Compose UI
setContent {
MaterialTheme {
Surface(modifier = Modifier.fillMaxSize()) {
GooglePayScreen(session)
}
}
}
}
}

@Composable
private fun GooglePayScreen(session: ComgateSecureSession) {
var resultText by remember { mutableStateOf("") }

Column(modifier = Modifier.fillMaxSize().padding(16.dp)) {
// Google Pay tlačítko
SecureGooglePayButton(
session = session,
onPaymentResult = { result ->
resultText = when (result) {
is PaymentResult.Paid -> "Platba úspěšná"
is PaymentResult.Pending -> "Platba se zpracovává..."
is PaymentResult.Cancelled -> "Platba zamítnuta: ${result.errorReason}"
is PaymentResult.Failed -> "Chyba: ${result.error.message}"
else -> ""
}
},
paymentParamsProvider = {
PaymentParams(
price = 100,
curr = "CZK",
label = "Objednávka #123",
refId = "order-123",
fullName = "Jan Novák",
country = "CZ"
)
},
modifier = Modifier.fillMaxWidth().height(56.dp)
)

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

Kombinace s karetní platbou

Google Pay tlačítko lze snadno kombinovat s karetním formulářem na jedné obrazovce. Obě komponenty sdílejí stejnou ComgateSecureSession:

class PaymentActivity : AppCompatActivity() {

private lateinit var session: ComgateSecureSession

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

// Session pro oba typy plateb
session = ComgateSecureSession(
checkoutId = "váš-checkout-id",
email = "zakaznik@example.com",
context = applicationContext,
googleMerchantId = "váš-google-pay-merchant-id",
googleMerchantName = "Název obchodu",
threeDSConfig = ThreeDSConfig(), // Vyžadováno i pro Google Pay
lifecycleOwner = this
)

setContent {
MaterialTheme {
Surface(modifier = Modifier.fillMaxSize()) {
CombinedPaymentScreen(session)
}
}
}
}
}

@Composable
private fun CombinedPaymentScreen(session: ComgateSecureSession) {
val panState = rememberSecurePanFieldState()
val expiryState = rememberSecureExpiryFieldState()
val cvvState = rememberSecureCvvFieldState()
val statusState = rememberPaymentStatusState()

val collector = rememberSecureCardCollector(panState, expiryState, cvvState)

Column(modifier = Modifier.fillMaxSize().padding(16.dp)) {
// Karetní formulář
SecurePanField(state = panState, modifier = Modifier.fillMaxWidth())
Spacer(modifier = Modifier.height(8.dp))
SecureExpiryField(state = expiryState, modifier = Modifier.fillMaxWidth())
Spacer(modifier = Modifier.height(8.dp))
SecureCvvField(state = cvvState, modifier = Modifier.fillMaxWidth())
Spacer(modifier = Modifier.height(12.dp))

SecurePayButton(
session = session,
collector = collector,
onPaymentResult = { result -> statusState.showStatus(result) },
paymentParamsProvider = { /* ... */ },
modifier = Modifier.fillMaxWidth()
)

HorizontalDivider(modifier = Modifier.padding(vertical = 16.dp))

// Google Pay
SecureGooglePayButton(
session = session,
onPaymentResult = { result -> statusState.showStatus(result) },
paymentParamsProvider = { /* ... */ },
modifier = Modifier.fillMaxWidth().height(56.dp)
)

SecurePaymentStatusView(
state = statusState,
modifier = Modifier.fillMaxWidth().padding(top = 8.dp)
)
}
}
Informace

Při použití Google Pay v rámci Mobilního SDK vždy vytvořte a předejte threeDSConfig do ComgateSecureSession.

4. Podání žádosti o schválení

Pro aktivaci Google Pay v produkčním režimu je nutné odeslat žádost o schválení prostřednictvím Google Pay Console. Tento krok je nezbytný pro zpřístupnění plateb reálným plátcům a zároveň zajišťuje soulad s požadavky společnosti Google.

Checklist integrace

Před podáním žádosti je nutné projít kontrolní seznam integrace a ověřit, zda je integrace funkční. Google neprovádí detailní kontrolu splnění jednotlivých položek checklistu. V rámci integrace přes Comgate není možné splnit všechny požadavky uvedené v seznamu, přesto doporučujeme ověřit alespoň klíčové části.

Následující tabulka shrnuje požadavky, které buď není možné v rámci integrace s Comgate splnit, nebo jejich splnění není povinné:

SekceTestSplnitelnostVysvětlení
BasicsIf you complete a DIRECT tokenizationSpecification type integration...Nelze splnitKnihovna provádí integraci prostřednictvím platební brány. Přímá integrace (DIRECT) není podporována.
Functional testsIf you require a shipping address...VolitelnéAdresa není na straně Comgate zpracovávána.
If you require a telephone number...VolitelnéTelefonní číslo není na straně Comgate zpracováváno.
Tip

Knihovna SecureGooglePayButton řeší veškerou konfiguraci platební brány interně (tokenizaci, gateway identifikátor apod.). Při procházení checklistu se proto zaměřte zejména na body týkající se UX, tlačítka a celkového chování aplikace.

Průvodce žádostí

Tip

Než podáte žádost o schválení, doporučujeme připravit si všechny požadované screenshoty aplikace.

Google vyžaduje snímky obrazovky znázorňující následující situace:

  1. uživatel si prohlíží položku nebo službu,
  2. uživatel je připraven dokončit nákup,
  3. uživatel si zvolil Google Pay jako platební metodu,
  4. uživateli se zobrazují platební údaje uložené v Google Pay (doporučujeme vyfotit jiným zařízením),
  5. nákup byl úspěšně dokončen.

Přesné znění požadavků najdete na konci formuláře žádosti v Google Pay Console.

  1. Přihlaste se do Google Pay Console a vyberte obchodní profil, pod kterým budou platby Google Pay provozovány.
  1. Na úvodní stránce (případně v levém menu v sekci Rozhraní API služby Google Pay → Integrate with your Android app) zvolte aplikaci, pro kterou má být žádost o schválení podána.
https://pay.google.com/business/console/home/XXXXXXXXXXX

Výběr aplikace z hlavní stránky Google Pay Console

  1. Ve formuláři v sekci Your Google Pay API integration type zvolte možnost Brána (Gateway).
https://pay.google.com/business/console/payment/android/XXXXXXXXXXX/com.example.app

Výběr typu integrace „Brána" ve formuláři žádosti o schválení

  1. Nahrajte všechny připravené screenshoty, které demonstrují správnou funkčnost Google Pay ve vaší aplikaci.
Tip

Některé kategorie ve formuláři mohou obsahovat shodné screenshoty – záleží na tom, jakým způsobem je navržen váš checkout proces.

https://pay.google.com/business/console/payment/android/XXXXXXXXXXX/com.example.app

Nahrání screenshotů do formuláře žádosti o schválení

  1. Po vyplnění všech požadovaných údajů klikněte na tlačítko Uložit.

  2. Pokud se formulář úspěšně uloží a neobsahuje žádné chyby, zobrazí se v horní části stránky nová sekce pro odeslání žádosti. Zkontrolujte, že jsou splněny všechny požadavky, potvrďte je zaškrtnutím příslušných políček a klikněte na tlačítko Submit for approval, čímž žádost odešlete.

https://pay.google.com/business/console/payment/android/XXXXXXXXXXX/com.example.app

Odeslání �žádosti o schválení v Google Pay Console

Po odeslání žádosti provede podpora Google Pay kontrolu vaší aplikace. V případě úspěchu bude integrace schválena, v opačném případě obdržíte e‑mail s instrukcemi, co je potřeba upravit. Proces schvalování může trvat několik dní.

Tip

V některých případech se může stát, že podpora Google Pay na žádost delší dobu nereaguje. Doporučujeme vyčkat alespoň 5 pracovních dní (dle kalendáře USA) a teprve poté kontaktovat podporu s dotazem na stav žádosti.

Možnost Kontaktovat podporu najdete v levém menu Google Pay Console.

  1. Jakmile je aplikace schválena, obdržíte email s potvrzením. Schválení též uvidíte v Google Pay Console, kde bude aplikace označena jako „Aktivní". Nyní je možné přepnout v ComgateSecureSession parametr devMode na false (nebo jej zcela vynechat) pro aktivaci produkčního režimu.
https://pay.google.com/business/console/payment/XXXXXXXXXXX

Stav schválení aplikace označený jako „Aktivní" v Google Pay Console

5. Testovací prostředí

Na rozdíl od integrace Apple Pay je testování Google Pay podstatně jednodušší. Pro testování je však nutné použít fyzické zařízení s aktivovanou peněženkou Google Wallet.

Jako doplněk při vývoji lze využít také emulátor systému Android, integrovaný v rámci Android Studia. Ten však podporuje pouze omezené funkce, například zobrazení tlačítka Google Pay.

Testovací vs. produkční režim

Knihovna automaticky přepíná Google Pay mezi testovacím a produkčním prostředím na základě parametru devModeComgateSecureSession:

devModeProstředí Google PayPopis
trueWalletConstants.ENVIRONMENT_TESTTestovací karty, žádné reálné transakce.
false (výchozí)WalletConstants.ENVIRONMENT_PRODUCTIONReálné platby — vyžaduje schválenou aplikaci v Google Pay Console.
Upozornění

Při vývoji a testování vždy nastavte devMode = true. Produkční platby jsou dostupné až po schválení aplikace v Google Pay Console a její instalaci přes Google Play — včetně režimu interního testování.

Fyzické Android zařízení

Pro plnohodnotné testování Google Pay doporučujeme používat skutečné zařízení. Zařízení musí být přihlášeno k libovolnému účtu Google a podporovat Google Wallet.

  1. Připravte zařízení

    • Zkontrolujte, že je nainstalována aktuální verze Androidu.
    • Přihlaste se do Google účtu určeného pro testování.
    • Připravte si USB kabel pro připojení zařízení k počítači.
  2. Aktivujte vývojářský režim

  3. Testovací karty

    • Pokud je devMode nastaven na true, po kliknutí na tlačítko Google Pay se automaticky zobrazí testovací karty.
    • Tyto karty nelze použít pro reálné transakce a slouží výhradně k ověření integrace.
    • Podrobnosti naleznete v oficiální dokumentaci Google.
  4. Spusťte aplikaci na zařízení

  5. Otestujte platbu

    • Po spuštění aplikace klikněte na tlačítko Google Pay.
    • Pokud je vše nastaveno správně, zobrazí se výběr testovacích karet.
    • Transakce bude simulována – nedojde k jejímu reálnému provedení.
Tip

Pokud se Google Pay nezobrazuje, zkontrolujte:

  • zda je devMode nastaven na trueComgateSecureSession,
  • zda bylo zavoláno gpButton.setup(...) na tlačítku SecureGooglePayButton,
  • správnost parametrů v PaymentParams,
  • podporu Google Wallet na zařízení.

Android emulátor

Android emulátor podporuje Google Pay pouze v omezeném rozsahu. Lze otestovat zobrazení tlačítka Google Pay a základní UI. Není možné dokončit platbu ani získat platební token. Pro testování generování tokenu je vždy nutné použít fyzické Android zařízení.

Spuštění aplikace v emulátoru je popsáno v oficiální dokumentaci.

Upozornění

Na Android emulátoru nelze získat zašifrovaný platební token. Jedná se o záměrné omezení ze strany společnosti Google.