Implementace
Tato stránka vás provede kompletní integrací Checkout SDK do vašeho e-shopu.
Jedno volání useCheckout() pokryje celý platební flow — od vykreslení formuláře až po zpracování Apple Pay nebo Google Pay a platby kartou.
Instalace
Checkout SDK lze do projektu přidat dvěma způsoby — pomocí dependency manageru nebo načtením z Comgate CDN.
Dependency manager
Použijte, pokud spravujete závislosti pomocí npm, yarn nebo pnpm a projekt sestavujete prostřednictvím bundleru (Vite, Webpack, Next.js, …).
Balíček @comgate/checkout-js obsahuje pouze zavaděč (loader) — samotné SDK se stahuje dynamicky za běhu. I přesto doporučujeme pravidelně kontrolovat dostupnost nových verzí a balíček aktualizovat, aby vám neunikly důležité opravy a vylepšení.
- npm
- yarn
- pnpm
npm install @comgate/checkout-js
yarn add @comgate/checkout-js
pnpm add @comgate/checkout-js
Comgate CDN
Pokud nechcete využívat dependency managery, lze SDK načíst přímo z Comgate CDN.
Po načtení je knihovna dostupná globálně jako window.comgateCheckoutJs.
- <body>
- <head>
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<title>Comgate Checkout example - script in body</title>
<!-- ... metas ... -->
</head>
<body>
<!-- ... content ... -->
<script src="https://checkout.comgate.cz/sdk/@3"></script>
<script>
if (window.comgateCheckoutJs) {
const comgateLoaderVersion = comgateCheckoutJs.getLoaderVersion();
console.log(comgateLoaderVersion.version);
}
</script>
</body>
</html>
Doporučujeme načítat Checkout SDK v rámci elementu <body>, vložit scripty ideálně těsně před ukončovací značku </body>.
<!DOCTYPE html>
<html lang="cs">
<head>
<meta charset="UTF-8">
<title>Comgate Checkout example - script in head</title>
<!-- ... metas ... -->
<script src="https://checkout.comgate.cz/sdk/@3" defer></script>
</head>
<body>
<!-- ... content ... -->
<script>
// nutné vyčkat na event DOMContentLoaded
document.addEventListener('DOMContentLoaded', () => {
if (!window.comgateCheckoutJs) {
console.log('Loader not found.');
return;
}
const comgateLoaderVersion = comgateCheckoutJs.getLoaderVersion();
console.log(comgateLoaderVersion.version);
});
</script>
</body>
</html>
Práce s verzemi
Pro produkční nasazení doporučujeme používat fixní major verzi. Comgate garantuje zpětnou kompatibilitu v rámci stejné major verze, takže opravy a vylepšení se dostávají k uživatelům automaticky.
- CDN: Použijte major verzi v URL (např.
/sdk/@3) - NPM: Použijte parametr
versionv konfiguraciuseCheckout(),preloadComgateCheckout()neboprefetchComgateCheckout()— lze předat řetězec nebo importovanou konstantu.
- CDN
- NPM
<!-- Fixní major verze v URL — doporučeno pro produkci -->
<script src="https://checkout.comgate.cz/sdk/@3"></script>
<!-- Konkrétní patch verze — nedoporučujeme - vhodné pro testování/vývoj -->
<script src="https://checkout.comgate.cz/sdk/v/3.0.1"></script>
// VERSION_3 = '3'
// VERSION_PREFERRED = VERSION_3 (aktuálně doporučená verze)
import { useCheckout, VERSION_3, VERSION_PREFERRED } from '@comgate/checkout-js';
// použití konstanty:
useCheckout({ version: VERSION_3, /* ... */ });
// nebo prostý řetězec:
useCheckout({ version: '3', /* ... */ });
Uzamčení na konkrétní patch verzi (např. 3.0.1) důrazně nedoporučujeme.
Příprava HTML
Po instalaci knihovny je dalším krokem příprava HTML struktury. Před voláním useCheckout() připravte na stránce kontejnerové elementy pro jednotlivé platební metody, které plánujete využívat.
Apple Pay a Google Pay
Pro každou metodu připravte prázdný <div>, do kterého SDK vykreslí nativní tlačítko. Tlačítka se automaticky přizpůsobují rozměrům kontejneru — velikost tedy určujete vaším vlastním stylem elementu. Každému elementu přiřadte též unikátní ID.
Každý mountPoint (Apple Pay, Google Pay i karta) musí odpovídat právě jednomu elementu v DOM. Pokud selektor najde více prvků, SDK vyhodí chybu. Používejte proto selektor s ID (např. '#cg-applepay-box') nebo předejte přímo referenci na konkrétní HTMLDivElement.
Element musí být v DOM v okamžiku volání useCheckout(). Ve frameworcích (Vue, React, Angular…) proto volejte useCheckout() vždy až po připojení komponenty do DOM — typicky uvnitř onMounted (Vue) nebo useEffect (React). SDK toleruje krátké zpoždění způsobené render cyklem frameworku, ale nespolehejte se na to jako na náhradu správné lifecycle integrace.
<div id="cg-applepay-box" style="width: 240px; height: 45px;"></div>
<div id="cg-googlepay-box" style="width: 240px; height: 45px;"></div>
Doporučené rozměry
Při implementaci obou metod volte sjednocené rozměry, které vyhoví oběma službám. Níže jsou minimální a doporučené velikosti — Google Pay má přísnější minima:
| Typ | Apple Pay min. | Google Pay min. | Doporučená | |
|---|---|---|---|---|
| Desktop | jen logo (plain) | 100 × 30 px | 140 × 40 px | 160 × 45 px |
| s textem | 140 × 30 px | 240 × 40 px | 240 × 45 px | |
| Mobil | jen logo (plain) | 100 × 30 px | 140 × 40 px | 160 × 50 px |
| s textem | 140 × 30 px | 240 × 40 px | 240 × 50 px |
Nezapomeňte na viewport meta tag: <meta name="viewport" content="width=device-width, initial-scale=1">.
Karetní formulář
Pro platbu prostřednictví karetního formuláře potřebujete na stránce připravit kontejnerový element — <div> s libovolným ID, na který v konfiguraci odkážete pomocí mountPoint (CSS selektor, např. '#cg-card-box', nebo přímý odkaz na HTMLDivElement).
SDK z ID elementu automaticky hledá další elementy:
${id}-ibox→ sem SDK vloží zabezpečený iframe s poli karty (element je povinný a musí být vložený uvnitř hlavního div)${id}-button→ wrapper pro<button>, SDK ho napojí na platbu (může být i mimo kontejner)
Vstupní pole karty běží v izolovaném iframe — citlivá data nikdy neopustí zabezpečené prostředí → PCI-DSS compliance.
- V kontejneru
- Mimo kontejner
Tlačítko může být umístěné uvnitř kontejneru, ideálně pod iframe s poli karty:
<div id="cg-card-box">
<div id="cg-card-box-ibox"><!-- iframe s poli karty --></div>
<div id="cg-card-box-button">
<button type="button">Zaplatit kartou</button>
</div>
</div>
Tlačítko nemusí být jen uvnitř kontejneru — může být kdekoliv na stránce, pokud má <div> správné ID:
<div id="cg-card-box">
<div id="cg-card-box-ibox"></div>
</div>
<!-- tlačítko kdekoliv jinde na stránce -->
<div id="cg-card-box-button">
<button type="button">Zaplatit kartou</button>
</div>
CSS Styl
SDK automaticky vkládá výchozí styly karetního kontejneru při mountování — není potřeba přidávat žádné vlastní CSS. Možnosti přizpůsobení jsou popsány v sekci Přizpůsobení vzhledu — Karetní formulář.
Loading stav (před načtením SDK)
Do doby, než se SDK stihne načíst a spustit, se kontejner zobrazí jako prázdný prostor. Pokud chcete místo prázdného prostoru zobrazit loading spinner, je to možné — podrobnosti najdete níže v sekci Loading stav karetního formuláře.
Loading stav je volitelný — pokud vám prázdný prostor před načtením nevadí, není potřeba nic implementovat.
Nejdříve ale implementujte SDK a až poté přidejte vlastní styly nebo loading spinner.
Implementace
Jakmile máte HTML elementy připravené, můžete přejít k samotné inicializaci SDK.
Funkce useCheckout() je váš hlavní (a vlastně jediný) vstupní bod. Zavoláte ji s konfiguračním objektem, ona udělá vše potřebné — načte moduly, vykreslí UI — a vrátí vám Promise s instancemi jednotlivých modulů.
Zjednodušené flow procesu: Váš backend / cloud app založí platbu na Comgate Merchant API, které vám vrátí transId. Toto ID spolu s checkoutId (získáte v klientském portálu při aktivaci Checkout SDK) předáte na váš frontend do volání funkce useCheckout(). SDK inicializuje platební metody, vykreslí tlačítka a formuláře, a až zákazník zaplatí, zavolá váš callback.
Modul Core je implementován jako singleton. Instance vzniká při prvním volání useCheckout() a zůstává aktivní až do ukončení / obnovení stránky.
Další volání useCheckout() nevytvářejí novou instanci modulu Core, ale pouze aktualizují předané callbacky (například onPaid nebo onCancelled). Dříve předané callbacky se tím nahradí a aktivní zůstávají vždy pouze callbacky předané při posledním volání useCheckout().
Při opuštění platební stránky je nutné zavolat destroy() na instancích modulů Apple Pay, Google Pay a karty — jinak zůstanou aktivní v paměti a mohou způsobovat konflikty při dalších zpracováních plateb. Více informací je v sekci Úklid instancí.
- Standardní implementace
- Kompletní ukázka
import { useCheckout } from '@comgate/checkout-js';
const COMGATE_CHECKOUT_ID = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
const COMGATE_TRANSACTION_ID = 'XXXX-XXXX-XXXX';
const GOOGLE_PAY_MERCHANT_ID = 'BCR3D****ZEY1LKS';
const CHECKOUT_BOX_GOOGLE_PAY = '#cg-googlepay-box';
const CHECKOUT_BOX_APPLE_PAY = '#cg-applepay-box';
const CHECKOUT_BOX_CARD = '#cg-card-box';
useCheckout({
checkoutId: COMGATE_CHECKOUT_ID,
core: {
transactionId: COMGATE_TRANSACTION_ID,
locale: 'cs',
onPaid: (payload) => { console.log('Zaplaceno', payload); },
onCancelled: (payload) => { console.log('Zrušeno', payload); },
onPending: (payload) => { console.warn('Opakujte platbu', payload); },
onError: (payload) => { console.error('Chyba', payload); },
onPaymentStarted: () => { document.body.classList.add('loading'); },
onPaymentStopped: () => { document.body.classList.remove('loading'); },
},
// pokud nechcete ApplePay, tento klíč vynechte
applepay: {
mountPoint: CHECKOUT_BOX_APPLE_PAY,
},
// pokud nechcete GooglePay, tento klíč vynechte
googlepay: {
mountPoint: CHECKOUT_BOX_GOOGLE_PAY,
payment: {
// Merchant ID, které vám přidělí Google po registraci u Google Pay Business Console.
// Pro testování není potřeba, ale pro produkční nasazení je povinný.
// DIY
googlePayMerchantId: GOOGLE_PAY_MERCHANT_ID
}
},
// pokud nechcete kartu, tento klíč vynechte
card: {
mountPoint: CHECKOUT_BOX_CARD,
},
})
.then((result) => {
console.log('Checkout result', result);
if (result.applepay && !result.applepay.success) {
document.querySelector(CHECKOUT_BOX_APPLE_PAY).style.display = 'none';
}
if (result.googlepay && !result.googlepay.success) {
document.querySelector(CHECKOUT_BOX_GOOGLE_PAY).style.display = 'none';
}
if (result.card && !result.card.success) {
document.querySelector(CHECKOUT_BOX_CARD).style.display = 'none';
}
})
.catch((error) => {
console.error('Unexpected error', error);
});
import { useCheckout } from '@comgate/checkout-js';
const COMGATE_CHECKOUT_ID = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx';
const COMGATE_TRANSACTION_ID = 'XXXX-XXXX-XXXX';
const GOOGLE_PAY_MERCHANT_ID = 'BCR3D****ZEY1LKS';
useCheckout({
checkoutId: COMGATE_CHECKOUT_ID,
core: {
transactionId: COMGATE_TRANSACTION_ID,
locale: 'cs',
onPaid: (payload) => {
// Platba úspěšná — přesměrujte na děkovnou stránku
window.location.href = '/dekujeme?id=' + payload.transactionId;
},
onCancelled: (payload) => {
// Platba zrušena — přesměrujte na stránku se zrušením
window.location.href = '/platba-zrusena';
},
onPending: (payload) => {
// Pokus neuspěl — zobrazte hlášku, plátce může zkusit znovu
document.getElementById('error-msg').textContent =
'Platba neprošla (' + payload.message + '). Zkuste to prosím znovu.';
},
onError: (payload) => {
// Kritická chyba — zobrazte chybovou hlášku
document.getElementById('error-msg').textContent =
'Nastala chyba: ' + payload.message;
console.error('Checkout SDK error:', payload);
},
onPaymentStarted: () => {
document.getElementById('loading-overlay').style.display = 'flex';
},
onPaymentStopped: () => {
document.getElementById('loading-overlay').style.display = 'none';
},
},
applepay: {
mountPoint: '#cg-applepay-box',
ui: { type: 'pay', color: 'black' },
actions: {
// onButtonClick => onButtonClickHandler,
onButtonClick: (moduleId) => {
console.log('Apple Pay clicked', moduleId);
// platba se spustí až po dokončení funkce / vyřešení Promise
// lze například i zastavit zpracování
// více v dokumentaci k onButtonClick níže
},
},
},
googlepay: {
mountPoint: '#cg-googlepay-box',
ui: { type: 'pay', color: 'black' },
payment: { googlePayMerchantId: GOOGLE_PAY_MERCHANT_ID },
actions: {
// onButtonClick => onButtonClickHandler,
onButtonClick: (moduleId) => {
console.log('Google Pay clicked', moduleId);
// platba se spustí až po dokončení funkce / vyřešení Promise
// lze například i zastavit zpracování
// více v dokumentaci k onButtonClick níže
},
},
},
card: {
mountPoint: '#cg-card-box',
actions: {
// onButtonClick => onButtonClickHandler,
onButtonClick: (moduleId) => {
console.log('Card Button clicked', moduleId);
// platba se spustí až po dokončení funkce / vyřešení Promise
// lze například i zastavit zpracování
// více v dokumentaci k onButtonClick níže
},
},
// změna vzhledu karetního formuláře pro zadávání karetních dat
appearance: {
version: 1, // zvedněte o 1 při každé změně
variables: {
colorText: '#111827',
colorBackground: '#ffffff',
colorPrimary: '#0891b2',
colorDanger: '#dc2626',
colorPlaceholder: '#9ca3af',
borderColor: '#e5e7eb',
borderRadius: '4px',
fontFamily: 'Arial, sans-serif',
fontSize: '14px',
spacing: '8px',
},
rules: {
label: { color: '#374151', fontWeight: 'bold', fontSize: '12px' },
input: { backgroundColor: '#ffffff', borderColor: '#e5e7eb', color: '#111827', paddingBlock: '6px', paddingInline: '8px' },
inputFocus: { borderColor: '#0891b2' },
inputInvalid: { borderColor: '#dc2626' },
error: { color: '#dc2626', fontSize: '11px' },
},
},
},
})
.then((result) => {
if (result.applepay && !result.applepay.success) {
document.getElementById('cg-applepay-box').style.display = 'none';
}
if (result.googlepay && !result.googlepay.success) {
document.getElementById('cg-googlepay-box').style.display = 'none';
}
if (result.card && !result.card.success) {
document.getElementById('cg-card-box').style.display = 'none';
console.warn('Card not available:', result.card.error);
}
})
.catch((error) => {
console.error('Unexpected SDK error:', error);
});
onButtonClickHandler
function onButtonClickHandler(moduleId) {
console.log("onButtonClick", moduleId);
// Checkout čeká na dokončení této funkce před zahájením platby.
// Funkce by měla být krátká — Google Pay a Apple Pay vyžadují,
// aby k platbě došlo bezprostředně po fyzickém kliknutí.
// Při příliš dlouhém prodlení platbu odmítnou.
// A) Funkce nic nevrátí → platba pokračuje (nejčastější případ)
// B) Promise.resolve() → platba pokračuje
// return Promise.resolve();
// C) Promise.reject() → platba se zastaví, zákazník musí kliknout znovu
// (SDK zákazníka nenotifikuje — tuto logiku zajišťuje e-shop sám)
// return Promise.reject();
// D) Nevyřešený Promise → Checkout čeká na resolve nebo reject
// Chová se jako případ B nebo C podle toho, čím Promise skončí
// return new Promise((resolve, reject) => {
// setTimeout(() => {
// resolve(); // pokračovat
// // reject(); // zastavit
// }, 2000);
// });
// Poznámka: libovolná jiná návratová hodnota (např. false, true, číslo)
// je ignorována a chová se stejně jako případ A.
}
Výsledek inicializace
Funkce useCheckout() vrací Promise<TUseCheckoutResult>. Výsledek obsahuje stav celé inicializace i jednotlivých modulů.
Struktura odpovědi
interface TUseCheckoutResult {
success: boolean;
core: TUseCheckoutModuleResult<CheckoutCore>;
applepay?: TUseCheckoutModuleResult<ModuleApplePay>;
googlepay?: TUseCheckoutModuleResult<ModuleGooglePay>;
card?: TUseCheckoutModuleResult<ModuleCard>;
}
interface TUseCheckoutModuleResult<T> {
success: boolean;
error?: string;
instance: T | null;
}
Jak interpretovat výsledek
Po úspěšném vyřešení Promise vrátí useCheckout() objekt typu TUseCheckoutResult. Objekt obsahuje celkový příznak success a samostatný výsledek inicializace pro každý modul, který jste zahrnuli do konfigurace — tedy pro každý klíč (applepay, googlepay, card), který jste předali do useCheckout(). Moduly, které jste v konfiguraci vynechali, nebudou ve výsledku přítomny.
| Situace | result.success | result.[modul].success | Co dělat |
|---|---|---|---|
| Vše OK | true | true u všech | Platební metody jsou připraveny, není potřeba nic řešit. |
| Některý modul selhal (AP/GP/karta nedostupná, element nenalezen…) | false | false u dotčeného modulu | Promise se splní. Zkontrolujte result.[modul].error — zjistíte příčinu. Skryjte nebo deaktivujte nedostupnou platební metodu. |
Kritická chyba (neplatné checkoutId, Core selhal, síťový problém) | – | – | Promise se zamítne — výsledný objekt nevznikne vůbec. Zpracujte v bloku catch. |
Klíč modulu (applepay, googlepay, card) je ve výsledku přítomen pouze tehdy, pokud jste daný modul zahrnuli do konfigurace. Pokud jste např. nepředali klíč applepay, bude result.applepay rovno undefined.
Vlastnosti výsledku modulu
Každý modul vrací objekt TUseCheckoutModuleResult<T> se třemi vlastnostmi:
| Vlastnost | Typ | Popis |
|---|---|---|
success | boolean | true — modul byl načten, zařízení jej podporuje a UI bylo vykresleno do zadaného mount pointu. false — inicializace selhala, viz error. |
error | string | undefined | Popis příčiny selhání, přítomen pouze při success: false. Příklady: "Apple Pay is not available on this device", "Element \"#cg-applepay-box\" not found", ... |
instance | T | null | Reference na instanci modulu. Při success: true obsahuje aktivní instanci. Při success: false může být null (modul se ani nevytvořil) nebo obsahovat částečně inicializovanou instanci. |
Příklad zpracování
import { useCheckout } from '@comgate/checkout-js';
try {
const result = await useCheckout({
checkoutId: COMGATE_CHECKOUT_ID,
core: { transactionId: COMGATE_TRANSACTION_ID, onPaid, onCancelled, onPending, onError },
applepay: { mountPoint: '#cg-applepay-box' },
googlepay: { mountPoint: '#cg-googlepay-box', payment: { googlePayMerchantId: GP_MERCHANT_ID } },
card: { mountPoint: '#cg-card-box' },
});
// Core je vždy úspěšný, pokud Promise neskončil výjimkou
console.log('Core inicializován', result.core.instance);
// Zkontrolujte result.success pro rychlý přehled, zda vše proběhlo v pořádku
if (!result.success) {
console.warn('Některý modul se nepodařilo inicializovat');
}
// Apple Pay — může být nedostupný na zařízení
if (result.applepay?.success) {
console.log('Apple Pay připraven');
} else if (result.applepay) {
console.warn('Apple Pay nedostupné:', result.applepay.error);
document.getElementById('cg-applepay-box').style.display = 'none';
}
// Google Pay — může být nedostupný na zařízení
if (result.googlepay?.success) {
console.log('Google Pay připraven');
} else if (result.googlepay) {
console.warn('Google Pay nedostupné:', result.googlepay.error);
document.getElementById('cg-googlepay-box').style.display = 'none';
}
// Karetní formulář
if (result.card?.success) {
console.log('Karetní formulář vykreslen');
} else if (result.card) {
console.warn('Karetní formulář nedostupný:', result.card.error);
}
} catch (error) {
// Kritická chyba — SDK se nepodařilo inicializovat
console.error('Checkout inicializace selhala:', error);
}
Úklid instancí
Pokud vaše aplikace používá client-side routing (Vue Router, React Router, Next.js App Router apod.), musíte při opuštění platební stránky zavolat destroy() na všech modulech. Bez toho zůstávají staré instance Apple Pay, Google Pay a karetního formuláře v paměti, mohou reagovat na budoucí události a způsobovat konflikty při dalším zpracování plateb.
Metoda destroy() odstraní vykreslené UI (iframe, tlačítka), odpojí event listenery a uvolní prostředky modulu. Je dostupná na instancích modulů applepay, googlepay a card. Na instanci Core se destroy() nevolá — Core je singleton a jeho životní cyklus řídí SDK samo.
const result = await useCheckout({ /* ... */ });
// Při opuštění platební stránky zavolejte destroy na všech modulech:
function cleanup() {
result.applepay?.instance?.destroy();
result.googlepay?.instance?.destroy();
result.card?.instance?.destroy();
// => na CORE se destroy nevolá
}
// Vue 3
onUnmounted(() => cleanup());
// React
useEffect(() => {
return () => cleanup();
}, []);
Po zavolání destroy() nelze instanci modulu znovu použít — pro novou platbu je nutné zavolat useCheckout() znovu.
Používejte pouze funkce a metody popsané v této dokumentaci. SDK obsahuje interní prvky, které nejsou určeny pro veřejné použití. Jejich využití není podporováno a může vést k nefunkčnosti SDK.
Další funkce
Některé funkce SDK pracují automaticky na pozadí, jiné lze volitelně ovládat. Níže jsou popsány ty nejdůležitější.
3D Secure
Při platbě kartou může banka zákazníka vyžadovat dodatečné ověření pomocí 3D Secure. 3D Secure je zcela v režii SDK — není potřeba žádná dodatečná implementace.
Pokud banka vyžaduje dodatečné ověření (3D Secure), SDK automaticky zvolí nejvhodnější metodu zobrazení:
- iframe modal — pokud je ověřovací stránka banky zobrazitelná v iframe, SDK ji zobrazí přímo na stránce. Pokud se iframe nepodaří načíst, SDK přejde na přesměrování.
- Nové okno (popup) — pokud banka neumožňuje zobrazení v iframe, SDK otevře nové okno. Pokud je popup zablokován prohlížečem, SDK přejde na přesměrování.
- Přesměrování — záložní metoda pro oba scénáře výše. Zákazník je přesměrován na stránku banky.
V případě přesměrování je zákazník po dokončení ověření vrácen na jednu z URL nastavených v klientském portálu:
- URL zaplacený — platba úspěšná,
- URL zrušený — platba zrušena,
- URL nevyřízený — zákazník může platbu zopakovat.
Click to Pay
Na podpoře Click to Pay se intenzivně pracuje. Funkce bude dostupná v jedné z budoucích verzí SDK.
Click to Pay umožní zákazníkům platit uloženou kartou bez nutnosti zadávat číslo karty znovu. Po implementaci bude automatickou součástí karetního formuláře — bez nutnosti dodatečné konfigurace.
Debug mode
Předáním debug: true v konfiguraci aktivujete rozšířené logování do konzole prohlížeče. SDK vypisuje barevně označené zprávy s prefixem [ComgateCheckout], které pomáhají při diagnostice problémů.
useCheckout({
checkoutId: COMGATE_CHECKOUT_ID,
debug: true, // zapne rozšířené logování
core: { /* ... */ },
card: { mountPoint: '#cg-card-box' },
});
Debug mode nepoužívejte v produkci — výpisy mohou obsahovat citlivé informace o průběhu inicializace.
Informace o verzi
Pro diagnostiku a logování lze zjistit verzi loaderu i jednotlivých načtených modulů.
Verze loaderu je dostupná přes exportovanou funkci getLoaderVersion():
import { getLoaderVersion } from '@comgate/checkout-js';
const { version, revision } = getLoaderVersion();
console.log('Loader:', version, revision);
Verze jednotlivých modulů jsou dostupné přes globální objekt window.comgate.checkout po dokončení inicializace. Každý modul (Core, Apple Pay, Google Pay, Card) vystavuje metodu version():
// Verze modulů jsou dostupné po vyřešení useCheckout()
await useCheckout({ /* ... */ });
const checkout = window.comgate?.checkout;
console.log('Core version: ', checkout?.core?.version());
console.log('Apple Pay version: ', checkout?.applepay?.version());
console.log('Google Pay version:', checkout?.googlepay?.version());
console.log('Card version: ', checkout?.card?.version());
Hodnoty version() modulů jsou dostupné pouze tehdy, pokud byl daný modul úspěšně načten. Pokud modul nebyl zahrnut do konfigurace nebo selhalo jeho načítání, příslušná vlastnost (checkout.applepay apod.) nebude přítomna.
Přednačtení SDK
| Funkce | Priorita | Použití |
|---|---|---|
prefetchComgateCheckout() | Nízká (prefetch) | Zákazník možná bude platit — košík, produktová stránka. |
preloadComgateCheckout() | Vysoká (preload) | Zákazník určitě bude platit — souhrn objednávky, platební krok. |
preloadComgateCheckout()
Předběžně načte skripty SDK do cache prohlížeče prostřednictvím <link rel="preload">. Skripty se nespustí — jen se uloží, aby následné volání useCheckout() bylo rychlejší.
Vhodné pro stránky, kde víte, že zákazník brzy přejde na platební krok (např. shrnutí objednávky).
- NPM
- CDN
import {
preloadComgateCheckout,
MODULE_APPLEPAY,
MODULE_GOOGLEPAY,
MODULE_CARD
} from '@comgate/checkout-js';
preloadComgateCheckout({
checkoutId: 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx',
modules: [MODULE_APPLEPAY, MODULE_GOOGLEPAY, MODULE_CARD],
version: '3',
onPreload: (result) => {
console.log('Preload dokončen:', result.preloaded);
},
})
.then((result) => {
if (result.success) {
console.log('Všechny moduly předem načteny:', result.preloaded);
}
});
const {
preloadComgateCheckout,
MODULE_APPLEPAY,
MODULE_GOOGLEPAY,
MODULE_CARD
} = window.comgateCheckoutJs;
preloadComgateCheckout({
checkoutId: 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx',
modules: [MODULE_APPLEPAY, MODULE_GOOGLEPAY, MODULE_CARD],
version: '3',
onPreload: (result) => {
console.log('Preload dokončen:', result.preloaded);
},
})
.then((result) => {
if (result.success) {
console.log('Všechny moduly předem načteny:', result.preloaded);
}
});
Parametry
| Parametr | Typ | Povinný | Default | Popis |
|---|---|---|---|---|
checkoutId | string | Ano | – | UUID v4 přidělené Comgatem. Identifikuje váš e-shop. Formát: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx. |
modules | TModuleType[] | Ano | – | Moduly k předběžnému načtení. Povolené hodnoty: MODULE_APPLEPAY ('applepay'), MODULE_GOOGLEPAY ('googlepay'), MODULE_CARD ('card'), MODULE_CORE ('core'). Musí obsahovat alespoň jeden modul (kromě core). Core je vždy zahrnut automaticky. |
version | string | Ne | '3' | Verze SDK. Doporučujeme fixní major verzi (např. '3'). Povolené hodnoty: '2', '3', nebo konkrétní semver ('2.x.x', '3.x.x'). Verze 1 není podporována. |
debug | boolean | Ne | false | Zapne rozšířené logování do konzole prohlížeče. |
onPreload | (payload: TPreloadComgateCheckoutResult) => void | Ne | undefined | Alternativní callback volaný po dokončení přednačtení. Payload je shodný s návratovou hodnotou Promise. |
Parametr onPreload je alternativou ke zpracování výsledku přes .then(). Obě varianty lze kombinovat — callback je zavolán vždy jako první.
Návratová hodnota Promise<TPreloadComgateCheckoutResult>
| Atribut | Typ | Popis |
|---|---|---|
checkoutId | string | Předané checkoutId. |
success | boolean | true pokud byly všechny požadované moduly úspěšně načteny do cache. |
preloaded | TModuleType[] | Pole názvů úspěšně předem načtených modulů (např. ['core', 'applepay', 'googlepay']). |
error | { [key in TModuleTypeExtended]?: Error } | Detaily chyb pro jednotlivé moduly. Klíč je název modulu ('core', 'applepay', 'googlepay', 'card', 'loader'), hodnota je instance Error. Přítomen pouze pokud některý modul selhal. |
Chybové stavy
Promise se zamítne (reject) pokud:
checkoutIdnení validní UUID v4modulesnení pole nebo neobsahuje žádný modul (mimo core)- Některý z požadovaných modulů se nepodařilo předem načíst
V případě zamítnutí je payload totožný s TPreloadComgateCheckoutResult, ale success je false a pole error obsahuje detaily.
prefetchComgateCheckout()
Vloží do stránky <link rel="prefetch"> pro skripty SDK. Prohlížeč je stáhne s nízkou prioritou ve volném čase — na rozdíl od preloadComgateCheckout() nebude stahování blokovat aktuální rendering ani soutěžit s kritickými zdroji.
Vhodné pro stránky, kde zákazník možná přejde na platbu, ale zatím není jisté (např. produktová stránka, košík před souhrnem).
- NPM
- CDN
import {
prefetchComgateCheckout,
MODULE_APPLEPAY,
MODULE_GOOGLEPAY,
MODULE_CARD
} from '@comgate/checkout-js';
prefetchComgateCheckout({
checkoutId: 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx',
modules: [MODULE_APPLEPAY, MODULE_GOOGLEPAY, MODULE_CARD],
version: '3',
onPrefetch: (result) => {
console.log('Prefetch dokončen:', result.prefetched);
},
})
.then((result) => {
if (result.success) {
console.log('Všechny moduly prefetchnuty:', result.prefetched);
}
});
const {
prefetchComgateCheckout,
MODULE_APPLEPAY,
MODULE_GOOGLEPAY,
MODULE_CARD
} = window.comgateCheckoutJs;
prefetchComgateCheckout({
checkoutId: 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx',
modules: [MODULE_APPLEPAY, MODULE_GOOGLEPAY, MODULE_CARD],
version: '3',
onPrefetch: (result) => {
console.log('Prefetch dokončen:', result.prefetched);
},
})
.then((result) => {
if (result.success) {
console.log('Všechny moduly prefetchnuty:', result.prefetched);
}
});
Parametry
| Parametr | Typ | Povinný | Default | Popis |
|---|---|---|---|---|
checkoutId | string | Ano | – | UUID v4 přidělené Comgatem. Identifikuje váš e-shop. Formát: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx. |
modules | TModuleType[] | Ano | – | Moduly k prefetchnutí. Povolené hodnoty: MODULE_APPLEPAY ('applepay'), MODULE_GOOGLEPAY ('googlepay'), MODULE_CARD ('card'), MODULE_CORE ('core'). Musí obsahovat alespoň jeden modul (kromě core). Core je vždy zahrnut automaticky. |
version | string | Ne | '3' | Verze SDK. Doporučujeme fixní major verzi (např. '3'). Povolené hodnoty: '2', '3', nebo konkrétní semver ('2.x.x', '3.x.x'). Verze 1 není podporována. |
debug | boolean | Ne | false | Zapne rozšířené logování do konzole prohlížeče. |
onPrefetch | (payload: TPrefetchComgateCheckoutResult) => void | Ne | undefined | Callback volaný po dokončení prefetche. Payload je shodný s návratovou hodnotou Promise. |
Parametr onPrefetch je alternativou ke zpracování výsledku přes .then(). Obě varianty lze kombinovat — callback je zavolán vždy jako první.
Návratová hodnota Promise<TPrefetchComgateCheckoutResult>
| Atribut | Typ | Popis |
|---|---|---|
checkoutId | string | Předané checkoutId. |
success | boolean | true pokud byly všechny požadované moduly úspěšně prefetchnuty. |
prefetched | TModuleType[] | Pole názvů úspěšně prefetchnutých modulů (např. ['core', 'applepay', 'googlepay']). |
error | { [key in TModuleTypeExtended]?: Error } | Detaily chyb pro jednotlivé moduly. Přítomen pouze pokud některý modul selhal. |
Konfigurační reference
Kompletní přehled všech konfiguračních parametrů, které lze předat do useCheckout(). Každá platební metoda má vlastní sadu nastavení — povinný je pouze checkoutId a objekt core.
TUseCheckoutConfig
| Atribut | Typ | Povinný | Popis |
|---|---|---|---|
checkoutId | string | Ano | UUID v4 přidělené Comgatem. Identifikuje váš e-shop. |
version | string | Ne | Verze SDK. Default '3'. Doporučujeme fixní major verzi (např. '3'). Povolené hodnoty: '2', '3', nebo konkrétní semver ('3.x.x'). Verze 1 není podporována. |
core | TUseCheckoutCore | Ano | Konfigurace jádra SDK — callbacky, ID transakce, lokalizace. |
applepay | TUseCheckoutApplePay | Ne | Zapne modul Apple Pay. Pokud klíč chybí, modul se nenačte. |
googlepay | TUseCheckoutGooglePay | Ne | Zapne modul Google Pay. Pokud klíč chybí, modul se nenačte. |
card | TUseCheckoutCard | Ne | Zapne modul karetního formuláře. Pokud klíč chybí, modul se nenačte. |
TUseCheckoutCore
| Atribut | Typ | Povinný | Default | Popis |
|---|---|---|---|---|
transactionId | string | Ano | – | ID platby ve formátu XXXX-XXXX-XXXX. Získáte při založení platby přes API. |
locale | string | Ne | 'en' | Jazyk textů SDK. Podporované hodnoty: cs, sk, en, de, es, fr, hr, hu, it, no, pl, ro, si, sl, sv, bg, da, el, et, lt, lv, nl, pt, fi, vi, uk, ru. |
redirectMode | string | Ne | 'top' | Cíl přesměrování při 3D Secure fallbacku: 'self' (aktuální okno), 'parent' (rodičovský frame), 'top' (hlavní okno). |
onPaid | (payload) => void | Ano | – | Voláno po úspěšné platbě. Viz Payload onPaid. |
onCancelled | (payload) => void | Ano | – | Voláno po zrušení platby. Viz Payload onCancelled. |
onPending | (payload) => void | Ano | – | Voláno po neúspěšném pokusu; platba zůstává aktivní. Viz Payload onPending. |
onError | (payload) => void | Ano | – | Voláno při neočekávané chybě SDK. Viz Payload onError. |
onPaymentStarted | () => void | Ne | – | Voláno při zahájení zpracování platby (zobrazení loaderu). |
onPaymentStopped | () => void | Ne | – | Voláno po dokončení zpracování platby (skrytí loaderu). |
Při onPaymentStarted neodstraňujte HTML elementy ze stránky — použijte CSS (display: none nebo overlay).
Callbacky — payload reference
Všechny callbacky přijímají objekt payload. Každý payload obsahuje atribut service ('card' | 'applepay' | 'googlepay'), který identifikuje platební metodu.
onPaid(payload)
| Atribut | Typ | Popis |
|---|---|---|
transactionId | string | ID transakce |
price | number | Zaplacená částka |
currency | string | Měna (ISO 4217, např. CZK, EUR) |
status | 'PAID' | 'AUTHORIZED' | Stav platby |
service | string | Platební metoda |
onCancelled(payload)
| Atribut | Typ | Popis |
|---|---|---|
status | 'CANCELLED' | Stav platby |
message | string | Důvod zrušení |
scope | string | Oblast chyby |
service | string | Platební metoda |
declineStatusCode | string? | Kód zamítnutí (volitelný) |
onPending(payload)
| Atribut | Typ | Popis |
|---|---|---|
status | 'PENDING' | Stav platby |
message | string | Popis chyby |
scope | string | Oblast chyby |
service | string | Platební metoda |
declineStatusCode | string? | Kód zamítnutí (volitelný) |
onPending neznamená definitivní selhání — pouze neúspěšný pokus. Platba zůstává aktivní a zákazník může operaci opakovat.
onError(payload)
| Atribut | Typ | Popis |
|---|---|---|
message | string | Popis chyby |
scope | string | Oblast chyby |
critical | boolean | true = kritická chyba, SDK nelze dále používat |
canRepeat | boolean? | true = zákazník může platbu opakovat |
service | string | Platební metoda |
declineStatusCode | string? | Kód zamítnutí (volitelný) |
Rozlišení platební metody
onPaid: (payload) => {
switch (payload.service) {
case 'card': console.log('Platba kartou'); break;
case 'applepay': console.log('Platba Apple Pay'); break;
case 'googlepay': console.log('Platba Google Pay'); break;
}
}
TUseCheckoutApplePay
| Atribut | Typ | Povinný | Popis |
|---|---|---|---|
mountPoint | string | Ano | CSS selektor kontejneru pro tlačítko (např. '#cg-applepay-box'). |
ui | object | Ne | Vizuální nastavení tlačítka — podrobnosti viz Apple Pay. |
actions | object | Ne | { onButtonClick } — viz onButtonClickHandler. |
payment | object | Ne | { provider, providerId } — podrobnosti viz Apple Pay. |
TUseCheckoutGooglePay
| Atribut | Typ | Povinný | Popis |
|---|---|---|---|
mountPoint | string | Ano | CSS selektor kontejneru pro tlačítko (např. '#cg-googlepay-box'). |
ui | object | Ne | Vizuální nastavení tlačítka — podrobnosti viz Google Pay. |
actions | object | Ne | { onButtonClick } — viz onButtonClickHandler. |
payment | object | Ne | { googlePayMerchantId, provider, providerId } — podrobnosti viz Google Pay. |
TUseCheckoutCard
| Atribut | Typ | Povinný | Popis |
|---|---|---|---|
mountPoint | string | HTMLDivElement | Ano | CSS selektor nebo přímý odkaz na DOM element (musí být <div> s neprazdným id). SDK z id odvodí selektory pro sub-elementy (#${id}-ibox, #${id}-button). |
actions | object | Ne | { onButtonClick } — viz onButtonClickHandler. |
appearance | object | Ne | Přizpůsobení vzhledu polí uvnitř iframe — podrobnosti viz Karetní formulář. |
Chování SDK na základě přítomnosti elementů v kontejneru:
- Najde
#{id}-ibox→ vloží iframe s poli karty. - Najde
#{id}-button→ napojí tlačítko na platební flow. - Nenajde
#{id}-button→ platbu lze spustit ručně volánímprocess()na instanci modulu.