Implementácia
Táto stránka vás prevedie kompletnou integráciou Checkout SDK do vášho e-shopu.
Jedno volanie useCheckout() pokryje celý platobný flow — od vykreslenia formulára až po spracovanie Apple Pay alebo Google Pay a platby kartou.
Inštalácia
Checkout SDK možno do projektu pridať dvoma spôsobmi — pomocou dependency manageru alebo načítaním z Comgate CDN.
Dependency manager
Použite, ak spravujete závislosti pomocou npm, yarn alebo pnpm a projekt zostavujete prostredníctvom bundleru (Vite, Webpack, Next.js, …).
Balíček @comgate/checkout-js obsahuje iba zavádzač (loader) — samotné SDK sa sťahuje dynamicky za behu. Aj napriek tomu odporúčame pravidelne kontrolovať dostupnosť nových verzií a balíček aktualizovať, aby vám neunikli dôležité opravy a vylepšenia.
- npm
- yarn
- pnpm
npm install @comgate/checkout-js
yarn add @comgate/checkout-js
pnpm add @comgate/checkout-js
Comgate CDN
Ak nechcete využívať dependency managery, možno SDK načítať priamo z Comgate CDN.
Po načítaní je knižnica dostupná globálne ako 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>
Odporúčame načítavať Checkout SDK v rámci elementu <body>, vložiť skripty ideálne tesne pred ukončovaciu 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áca s verziami
Pre produkčné nasadenie odporúčame používať fixnú major verziu. Comgate garantuje spätnú kompatibilitu v rámci rovnakej major verzie, takže opravy a vylepšenia sa dostávajú k používateľom automaticky.
- CDN: Použite major verziu v URL (napr.
/sdk/@3) - NPM: Použite parameter
versionv konfiguráciiuseCheckout(),preloadComgateCheckout()aleboprefetchComgateCheckout()— možno odovzdať reťazec alebo importovanú konštantu.
- CDN
- NPM
<!-- Fixná major verzia v URL — odporúčané pre produkciu -->
<script src="https://checkout.comgate.cz/sdk/@3"></script>
<!-- Konkrétna patch verzia — neodporúčame - vhodné pre testovanie/vývoj -->
<script src="https://checkout.comgate.cz/sdk/v/3.0.1"></script>
// VERSION_3 = '3'
// VERSION_PREFERRED = VERSION_3 (aktuálne odporúčaná verzia)
import { useCheckout, VERSION_3, VERSION_PREFERRED } from '@comgate/checkout-js';
// použitie konštanty:
useCheckout({ version: VERSION_3, /* ... */ });
// alebo obyčajný reťazec:
useCheckout({ version: '3', /* ... */ });
Uzamknutie na konkrétnu patch verziu (napr. 3.0.1) dôrazne neodporúčame.
Príprava HTML
Po inštalácii knižnice je ďalším krokom príprava HTML štruktúry. Pred volaním useCheckout() pripravte na stránke kontajnerové elementy pre jednotlivé platobné metódy, ktoré plánujete využívať.
Apple Pay a Google Pay
Pre každú metódu pripravte prázdny <div>, do ktorého SDK vykreslí natívne tlačidlo. Tlačidlá sa automaticky prispôsobujú rozmerom kontajnera — veľkosť teda určujete vaším vlastným štýlom elementu. Každému elementu priraďte tiež unikátne ID.
Každý mountPoint (Apple Pay, Google Pay aj karta) musí zodpovedať práve jednému elementu v DOM. Ak selektor nájde viac prvkov, SDK vyhodí chybu. Používajte preto selektor s ID (napr. '#cg-applepay-box') alebo odovzdajte priamo referenciu na konkrétny HTMLDivElement.
Element musí byť v DOM v okamihu volania useCheckout(). Vo frameworkoch (Vue, React, Angular…) preto volajte useCheckout() vždy až po pripojení komponenty do DOM — typicky vnútri onMounted (Vue) alebo useEffect (React). SDK toleruje krátke zdržanie spôsobené render cyklom frameworku, ale nespoliehajte sa na to ako na náhradu správnej lifecycle integrácie.
<div id="cg-applepay-box" style="width: 240px; height: 45px;"></div>
<div id="cg-googlepay-box" style="width: 240px; height: 45px;"></div>
Odporúčané rozmery
Pri implementácii oboch metód voľte zjednotené rozmery, ktoré vyhovejú obom službám. Nižšie sú minimálne a odporúčané veľkosti — Google Pay má prísnejšie minimá:
| Typ | Apple Pay min. | Google Pay min. | Odporúčaná | |
|---|---|---|---|---|
| Desktop | iba logo (plain) | 100 × 30 px | 140 × 40 px | 160 × 45 px |
| s textom | 140 × 30 px | 240 × 40 px | 240 × 45 px | |
| Mobil | iba logo (plain) | 100 × 30 px | 140 × 40 px | 160 × 50 px |
| s textom | 140 × 30 px | 240 × 40 px | 240 × 50 px |
Nezabudnite na viewport meta tag: <meta name="viewport" content="width=device-width, initial-scale=1">.
Karetný formulár
Pre platbu prostredníctvom karetného formulára potrebujete na stránke pripraviť kontajnerový element — <div> s ľubovoľným ID, na ktorý v konfigurácii odkážete pomocou mountPoint (CSS selektor, napr. '#cg-card-box', alebo priamy odkaz na HTMLDivElement).
SDK z ID elementu automaticky hľadá ďalšie elementy:
${id}-ibox→ sem SDK vloží zabezpečený iframe s poľami karty (element je povinný a musí byť vložený vnútri hlavného div)${id}-button→ wrapper pre<button>, SDK ho napojí na platbu (môže byť aj mimo kontajnera)
Vstupné polia karty bežia v izolovanom iframe — citlivé dáta nikdy neopustia zabezpečené prostredie → PCI-DSS compliance.
- V kontajneri
- Mimo kontajnera
Tlačidlo môže byť umiestnené vnútri kontajnera, ideálne pod iframe s poľami karty:
<div id="cg-card-box">
<div id="cg-card-box-ibox"><!-- iframe s poľami karty --></div>
<div id="cg-card-box-button">
<button type="button">Zaplatiť kartou</button>
</div>
</div>
Tlačidlo nemusí byť iba vnútri kontajnera — môže byť kdekoľvek na stránke, ak má <div> správne ID:
<div id="cg-card-box">
<div id="cg-card-box-ibox"></div>
</div>
<!-- tlačidlo kdekoľvek inde na stránke -->
<div id="cg-card-box-button">
<button type="button">Zaplatiť kartou</button>
</div>
CSS Štýl
SDK automaticky vkladá predvolené štýly karetného kontajnera pri mountovaní — nie je potrebné pridávať žiadne vlastné CSS. Možnosti prispôsobenia sú popísané v sekcii Prispôsobenie vzhľadu — Karetný formulár.
Loading stav (pred načítaním SDK)
Do času, než sa SDK stihne načítať a spustiť, sa kontajner zobrazí ako prázdny priestor. Ak chcete namiesto prázdneho priestoru zobraziť loading spinner, je to možné — podrobnosti nájdete nižšie v sekcii Loading stav karetného formulára.
Loading stav je voliteľný — ak vám prázdny priestor pred načítaním nevadí, nie je potrebné nič implementovať.
Najskôr ale implementujte SDK a až potom pridajte vlastné štýly alebo loading spinner.
Implementácia
Akonáhle máte HTML elementy pripravené, môžete prejsť k samotnej inicializácii SDK.
Funkcia useCheckout() je váš hlavný (a vlastne jediný) vstupný bod. Zavoláte ju s konfiguračným objektom, ona urobí všetko potrebné — načíta moduly, vykreslí UI — a vráti vám Promise s inštanciami jednotlivých modulov.
Zjednodušený flow procesu: Váš backend / cloud app založí platbu na Comgate Merchant API, ktoré vám vráti transId. Toto ID spolu s checkoutId (získate v klientskom portáli pri aktivácii Checkout SDK) odovzdáte na váš frontend do volania funkcie useCheckout(). SDK inicializuje platobné metódy, vykreslí tlačidlá a formuláre, a keď zákazník zaplatí, zavolá váš callback.
Modul Core je implementovaný ako singleton. Inštancia vzniká pri prvom volaní useCheckout() a zostáva aktívna až do ukončenia / obnovenia stránky.
Ďalšie volania useCheckout() nevytvárajú novú inštanciu modulu Core, ale iba aktualizujú odovzdané callbacky (napríklad onPaid alebo onCancelled). Predtým odovzdané callbacky sa tým nahradia a aktívne zostávajú vždy iba callbacky odovzdané pri poslednom volaní useCheckout().
Pri opustení platobnej stránky je potrebné zavolať destroy() na inštanciách modulov Apple Pay, Google Pay a karty — inak zostanú aktívne v pamäti a môžu spôsobovať konflikty pri ďalších spracovaniach platieb. Viac informácií je v sekcii Úklid inštancií.
- Štandardná implementácia
- Kompletná ukážka
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: 'sk',
onPaid: (payload) => { console.log('Zaplatené', payload); },
onCancelled: (payload) => { console.log('Zrušené', 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'); },
},
// ak nechcete ApplePay, tento kľúč vynechajte
applepay: {
mountPoint: CHECKOUT_BOX_APPLE_PAY,
},
// ak nechcete GooglePay, tento kľúč vynechajte
googlepay: {
mountPoint: CHECKOUT_BOX_GOOGLE_PAY,
payment: {
// Merchant ID, ktoré vám pridelí Google po registrácii u Google Pay Business Console.
// Pre testovanie nie je potrebné, ale pre produkčné nasadenie je povinný.
// DIY
googlePayMerchantId: GOOGLE_PAY_MERCHANT_ID
}
},
// ak nechcete kartu, tento kľúč vynechajte
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: 'sk',
onPaid: (payload) => {
// Platba úspešná — presmerujte na ďakovnú stránku
window.location.href = '/dakujeme?id=' + payload.transactionId;
},
onCancelled: (payload) => {
// Platba zrušená — presmerujte na stránku so zrušením
window.location.href = '/platba-zrusena';
},
onPending: (payload) => {
// Pokus neuspel — zobrazte hlášku, platiteľ môže skúsiť znovu
document.getElementById('error-msg').textContent =
'Platba neprešla (' + payload.message + '). Skúste to prosím znovu.';
},
onError: (payload) => {
// Kritická chyba — zobrazte chybovú 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 sa spustí až po dokončení funkcie / vyriešení Promise
// možno napríklad aj zastaviť spracovanie
// viac v dokumentácii k onButtonClick nižšie
},
},
},
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 sa spustí až po dokončení funkcie / vyriešení Promise
// možno napríklad aj zastaviť spracovanie
// viac v dokumentácii k onButtonClick nižšie
},
},
},
card: {
mountPoint: '#cg-card-box',
actions: {
// onButtonClick => onButtonClickHandler,
onButtonClick: (moduleId) => {
console.log('Card Button clicked', moduleId);
// platba sa spustí až po dokončení funkcie / vyriešení Promise
// možno napríklad aj zastaviť spracovanie
// viac v dokumentácii k onButtonClick nižšie
},
},
// zmena vzhľadu karetného formulára pre zadávanie karetných dát
appearance: {
version: 1, // zvýšte o 1 pri každej zmene
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 čaká na dokončenie tejto funkcie pred zahájením platby.
// Funkcia by mala byť krátka — Google Pay a Apple Pay vyžadujú,
// aby k platbe došlo bezprostredne po fyzickom kliknutí.
// Pri príliš dlhom zdržaní platbu odmietnu.
// A) Funkcia nič nevráti → platba pokračuje (najčastejší prípad)
// B) Promise.resolve() → platba pokračuje
// return Promise.resolve();
// C) Promise.reject() → platba sa zastaví, zákazník musí kliknúť znovu
// (SDK zákazníka nenotifikuje — túto logiku zaisťuje e-shop sám)
// return Promise.reject();
// D) Nevyriešený Promise → Checkout čaká na resolve alebo reject
// Správa sa ako prípad B alebo C podľa toho, čím Promise skončí
// return new Promise((resolve, reject) => {
// setTimeout(() => {
// resolve(); // pokračovať
// // reject(); // zastaviť
// }, 2000);
// });
// Poznámka: ľubovoľná iná návratová hodnota (napr. false, true, číslo)
// je ignorovaná a správa sa rovnako ako prípad A.
}
Výsledok inicializácie
Funkcia useCheckout() vracia Promise<TUseCheckoutResult>. Výsledok obsahuje stav celej inicializácie aj jednotlivých modulov.
Štruktúra odpovede
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;
}
Ako interpretovať výsledok
Po úspešnom vyriešení Promise vráti useCheckout() objekt typu TUseCheckoutResult. Objekt obsahuje celkový príznak success a samostatný výsledok inicializácie pre každý modul, ktorý ste zahrnuli do konfigurácie — teda pre každý kľúč (applepay, googlepay, card), ktorý ste odovzdali do useCheckout(). Moduly, ktoré ste v konfigurácii vynechali, nebudú vo výsledku prítomné.
| Situácia | result.success | result.[modul].success | Čo robiť |
|---|---|---|---|
| Všetko OK | true | true u všetkých | Platobné metódy sú pripravené, nie je potrebné nič riešiť. |
| Niektorý modul zlyhal (AP/GP/karta nedostupná, element nenájdený…) | false | false u dotknutého modulu | Promise sa splní. Skontrolujte result.[modul].error — zistíte príčinu. Skryte alebo deaktivujte nedostupnú platobnú metódu. |
Kritická chyba (neplatné checkoutId, Core zlyhal, sieťový problém) | – | – | Promise sa zamietne — výsledný objekt nevznikne vôbec. Spracujte v bloku catch. |
Kľúč modulu (applepay, googlepay, card) je vo výsledku prítomný iba vtedy, ak ste daný modul zahrnuli do konfigurácie. Ak ste napr. neodovzdali kľúč applepay, bude result.applepay rovné undefined.
Vlastnosti výsledku modulu
Každý modul vracia objekt TUseCheckoutModuleResult<T> s troma vlastnosťami:
| Vlastnosť | Typ | Popis |
|---|---|---|
success | boolean | true — modul bol načítaný, zariadenie ho podporuje a UI bolo vykreslené do zadaného mount pointu. false — inicializácia zlyhala, viď error. |
error | string | undefined | Popis príčiny zlyhania, prítomný iba pri success: false. Príklady: "Apple Pay is not available on this device", "Element \"#cg-applepay-box\" not found", ... |
instance | T | null | Referencia na inštanciu modulu. Pri success: true obsahuje aktívnu inštanciu. Pri success: false môže byť null (modul sa ani nevytvoril) alebo obsahovať čiastočne inicializovanú inštanciu. |
Príklad spracovania
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 úspešný, ak Promise neskončil výnimkou
console.log('Core inicializovaný', result.core.instance);
// Skontrolujte result.success pre rýchly prehľad, či všetko prebehlo v poriadku
if (!result.success) {
console.warn('Niektorý modul sa nepodarilo inicializovať');
}
// Apple Pay — môže byť nedostupný na zariadení
if (result.applepay?.success) {
console.log('Apple Pay pripravený');
} else if (result.applepay) {
console.warn('Apple Pay nedostupné:', result.applepay.error);
document.getElementById('cg-applepay-box').style.display = 'none';
}
// Google Pay — môže byť nedostupný na zariadení
if (result.googlepay?.success) {
console.log('Google Pay pripravený');
} else if (result.googlepay) {
console.warn('Google Pay nedostupné:', result.googlepay.error);
document.getElementById('cg-googlepay-box').style.display = 'none';
}
// Karetný formulár
if (result.card?.success) {
console.log('Karetný formulár vykreslený');
} else if (result.card) {
console.warn('Karetný formulár nedostupný:', result.card.error);
}
} catch (error) {
// Kritická chyba — SDK sa nepodarilo inicializovať
console.error('Checkout inicializácia zlyhala:', error);
}
Úklid inštancií
Ak vaša aplikácia používa client-side routing (Vue Router, React Router, Next.js App Router apod.), musíte pri opustení platobnej stránky zavolať destroy() na všetkých moduloch. Bez toho zostávajú staré inštancie Apple Pay, Google Pay a karetného formulára v pamäti, môžu reagovať na budúce udalosti a spôsobovať konflikty pri ďalšom spracovaní platieb.
Metóda destroy() odstráni vykreslené UI (iframe, tlačidlá), odpojí event listenery a uvoľní prostriedky modulu. Je dostupná na inštanciách modulov applepay, googlepay a card. Na inštanciu Core sa destroy() nevolá — Core je singleton a jeho životný cyklus riadi SDK samo.
const result = await useCheckout({ /* ... */ });
// Pri opustení platobnej stránky zavolajte destroy na všetkých moduloch:
function cleanup() {
result.applepay?.instance?.destroy();
result.googlepay?.instance?.destroy();
result.card?.instance?.destroy();
// => na CORE sa destroy nevolá
}
// Vue 3
onUnmounted(() => cleanup());
// React
useEffect(() => {
return () => cleanup();
}, []);
Po zavolaní destroy() nemožno inštanciu modulu znovu použiť — pre novú platbu je potrebné zavolať useCheckout() znovu.
Používajte iba funkcie a metódy popísané v tejto dokumentácii. SDK obsahuje interné prvky, ktoré nie sú určené na verejné použitie. Ich využitie nie je podporované a môže viesť k nefunkčnosti SDK.
Ďalšie funkcie
Niektoré funkcie SDK pracujú automaticky na pozadí, iné možno voliteľne ovládať. Nižšie sú popísané tie najdôležitejšie.
3D Secure
Pri platbe kartou môže banka zákazníka vyžadovať dodatočné overenie pomocou 3D Secure. 3D Secure je úplne v réžii SDK — nie je potrebná žiadna dodatočná implementácia.
Ak banka vyžaduje dodatočné overenie (3D Secure), SDK automaticky zvolí najvhodnejšiu metódu zobrazenia:
- iframe modal — ak je overovacia stránka banky zobraziteľná v iframe, SDK ju zobrazí priamo na stránke. Ak sa iframe nepodarí načítať, SDK prejde na presmerovanie.
- Nové okno (popup) — ak banka neumožňuje zobrazenie v iframe, SDK otvorí nové okno. Ak je popup zablokovaný prehliadačom, SDK prejde na presmerovanie.
- Presmerovanie — záložná metóda pre oba scenáre vyššie. Zákazník je presmerovaný na stránku banky.
V prípade presmerovania je zákazník po dokončení overenia vrátený na jednu z URL nastavených v klientskom portáli:
- URL zaplatený — platba úspešná,
- URL zrušený — platba zrušená,
- URL nevybavený — zákazník môže platbu zopakovať.
Click to Pay
Na podpore Click to Pay sa intenzívne pracuje. Funkcia bude dostupná v jednej z budúcich verzií SDK.
Click to Pay umožní zákazníkom platiť uloženou kartou bez nutnosti zadávať číslo karty znovu. Po implementácii bude automatickou súčasťou karetného formulára — bez nutnosti dodatočnej konfigurácie.
Debug mode
Odovzdaním debug: true v konfigurácii aktivujete rozšírené logovanie do konzoly prehliadača. SDK vypisuje farebne označené správy s prefixom [ComgateCheckout], ktoré pomáhajú pri diagnostike problémov.
useCheckout({
checkoutId: COMGATE_CHECKOUT_ID,
debug: true, // zapne rozšírené logovanie
core: { /* ... */ },
card: { mountPoint: '#cg-card-box' },
});
Debug mode nepoužívajte v produkcii — výpisy môžu obsahovať citlivé informácie o priebehu inicializácie.
Informácie o verzii
Pre diagnostiku a logovanie možno zistiť verziu loaderu aj jednotlivých načítaných modulov.
Verzia loaderu je dostupná cez exportovanú funkciu getLoaderVersion():
import { getLoaderVersion } from '@comgate/checkout-js';
const { version, revision } = getLoaderVersion();
console.log('Loader:', version, revision);
Verzie jednotlivých modulov sú dostupné cez globálny objekt window.comgate.checkout po dokončení inicializácie. Každý modul (Core, Apple Pay, Google Pay, Card) vystavuje metódu version():
// Verzie modulov sú dostupné po vyrieš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() modulov sú dostupné iba vtedy, ak bol daný modul úspešne načítaný. Ak modul nebol zahrnutý do konfigurácie alebo zlyhalo jeho načítanie, príslušná vlastnosť (checkout.applepay apod.) nebude prítomná.
Prednačítanie SDK
| Funkcia | Priorita | Použitie |
|---|---|---|
prefetchComgateCheckout() | Nízka (prefetch) | Zákazník možno bude platiť — košík, produktová stránka. |
preloadComgateCheckout() | Vysoká (preload) | Zákazník určite bude platiť — súhrn objednávky, platobný krok. |
preloadComgateCheckout()
Predbežne načíta skripty SDK do cache prehliadača prostredníctvom <link rel="preload">. Skripty sa nespustia — len sa uložia, aby následné volanie useCheckout() bolo rýchlejšie.
Vhodné pre stránky, kde viete, že zákazník čoskoro prejde na platobný krok (napr. zhrnutie 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šetky moduly vopred načítané:', 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šetky moduly vopred načítané:', result.preloaded);
}
});
Parametre
| Parameter | Typ | Povinný | Default | Popis |
|---|---|---|---|---|
checkoutId | string | Áno | – | UUID v4 pridelené Comgatom. Identifikuje váš e-shop. Formát: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx. |
modules | TModuleType[] | Áno | – | Moduly na predbežné načítanie. Povolené hodnoty: MODULE_APPLEPAY ('applepay'), MODULE_GOOGLEPAY ('googlepay'), MODULE_CARD ('card'), MODULE_CORE ('core'). Musí obsahovať aspoň jeden modul (okrem core). Core je vždy zahrnutý automaticky. |
version | string | Nie | '3' | Verzia SDK. Odporúčame fixnú major verziu (napr. '3'). Povolené hodnoty: '2', '3', alebo konkrétny semver ('2.x.x', '3.x.x'). Verzia 1 nie je podporovaná. |
debug | boolean | Nie | false | Zapne rozšírené logovanie do konzoly prehliadača. |
onPreload | (payload: TPreloadComgateCheckoutResult) => void | Nie | undefined | Alternatívny callback volaný po dokončení prednačítania. Payload je zhodný s návratovou hodnotou Promise. |
Parameter onPreload je alternatívou k spracovaniu výsledku cez .then(). Obe varianty možno kombinovať — callback je zavolaný vždy ako prvý.
Návratová hodnota Promise<TPreloadComgateCheckoutResult>
| Atribút | Typ | Popis |
|---|---|---|
checkoutId | string | Odovzdané checkoutId. |
success | boolean | true ak boli všetky požadované moduly úspešne načítané do cache. |
preloaded | TModuleType[] | Pole názvov úspešne vopred načítaných modulov (napr. ['core', 'applepay', 'googlepay']). |
error | { [key in TModuleTypeExtended]?: Error } | Detaily chýb pre jednotlivé moduly. Kľúč je názov modulu ('core', 'applepay', 'googlepay', 'card', 'loader'), hodnota je inštancia Error. Prítomný iba ak niektorý modul zlyhal. |
Chybové stavy
Promise sa zamietne (reject) ak:
checkoutIdnie je validné UUID v4modulesnie je pole alebo neobsahuje žiadny modul (mimo core)- Niektorý z požadovaných modulov sa nepodarilo vopred načítať
V prípade zamietnutia je payload totožný s TPreloadComgateCheckoutResult, ale success je false a pole error obsahuje detaily.
prefetchComgateCheckout()
Vloží do stránky <link rel="prefetch"> pre skripty SDK. Prehliadač ich stiahne s nízkou prioritou vo voľnom čase — na rozdiel od preloadComgateCheckout() nebude sťahovanie blokovať aktuálny rendering ani súťažiť s kritickými zdrojmi.
Vhodné pre stránky, kde zákazník možno prejde na platbu, ale zatiaľ to nie je isté (napr. produktová stránka, košík pred súhrnom).
- 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šetky moduly prefetchnuté:', 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šetky moduly prefetchnuté:', result.prefetched);
}
});
Parametre
| Parameter | Typ | Povinný | Default | Popis |
|---|---|---|---|---|
checkoutId | string | Áno | – | UUID v4 pridelené Comgatom. Identifikuje váš e-shop. Formát: xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx. |
modules | TModuleType[] | Áno | – | Moduly na prefetchnutie. Povolené hodnoty: MODULE_APPLEPAY ('applepay'), MODULE_GOOGLEPAY ('googlepay'), MODULE_CARD ('card'), MODULE_CORE ('core'). Musí obsahovať aspoň jeden modul (okrem core). Core je vždy zahrnutý automaticky. |
version | string | Nie | '3' | Verzia SDK. Odporúčame fixnú major verziu (napr. '3'). Povolené hodnoty: '2', '3', alebo konkrétny semver ('2.x.x', '3.x.x'). Verzia 1 nie je podporovaná. |
debug | boolean | Nie | false | Zapne rozšírené logovanie do konzoly prehliadača. |
onPrefetch | (payload: TPrefetchComgateCheckoutResult) => void | Nie | undefined | Callback volaný po dokončení prefetche. Payload je zhodný s návratovou hodnotou Promise. |
Parameter onPrefetch je alternatívou k spracovaniu výsledku cez .then(). Obe varianty možno kombinovať — callback je zavolaný vždy ako prvý.
Návratová hodnota Promise<TPrefetchComgateCheckoutResult>
| Atribút | Typ | Popis |
|---|---|---|
checkoutId | string | Odovzdané checkoutId. |
success | boolean | true ak boli všetky požadované moduly úspešne prefetchnuté. |
prefetched | TModuleType[] | Pole názvov úspešne prefetchnutých modulov (napr. ['core', 'applepay', 'googlepay']). |
error | { [key in TModuleTypeExtended]?: Error } | Detaily chýb pre jednotlivé moduly. Prítomný iba ak niektorý modul zlyhal. |
Konfiguračná referencia
Kompletný prehľad všetkých konfiguračných parametrov, ktoré možno odovzdať do useCheckout(). Každá platobná metóda má vlastnú sadu nastavení — povinný je iba checkoutId a objekt core.
TUseCheckoutConfig
| Atribút | Typ | Povinný | Popis |
|---|---|---|---|
checkoutId | string | Áno | UUID v4 pridelené Comgatom. Identifikuje váš e-shop. |
version | string | Nie | Verzia SDK. Default '3'. Odporúčame fixnú major verziu (napr. '3'). Povolené hodnoty: '2', '3', alebo konkrétny semver ('3.x.x'). Verzia 1 nie je podporovaná. |
core | TUseCheckoutCore | Áno | Konfigurácia jadra SDK — callbacky, ID transakcie, lokalizácia. |
applepay | TUseCheckoutApplePay | Nie | Zapne modul Apple Pay. Ak kľúč chýba, modul sa nenačíta. |
googlepay | TUseCheckoutGooglePay | Nie | Zapne modul Google Pay. Ak kľúč chýba, modul sa nenačíta. |
card | TUseCheckoutCard | Nie | Zapne modul karetného formulára. Ak kľúč chýba, modul sa nenačíta. |
TUseCheckoutCore
| Atribút | Typ | Povinný | Default | Popis |
|---|---|---|---|---|
transactionId | string | Áno | – | ID platby vo formáte XXXX-XXXX-XXXX. Získate pri založení platby cez API. |
locale | string | Nie | 'en' | Jazyk textov 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 | Nie | 'top' | Cieľ presmerovania pri 3D Secure fallbacku: 'self' (aktuálne okno), 'parent' (rodičovský frame), 'top' (hlavné okno). |
onPaid | (payload) => void | Áno | – | Volané po úspešnej platbe. Viď Payload onPaid. |
onCancelled | (payload) => void | Áno | – | Volané po zrušení platby. Viď Payload onCancelled. |
onPending | (payload) => void | Áno | – | Volané po neúspešnom pokuse; platba zostáva aktívna. Viď Payload onPending. |
onError | (payload) => void | Áno | – | Volané pri neočakávanej chybe SDK. Viď Payload onError. |
onPaymentStarted | () => void | Nie | – | Volané pri zahájení spracovania platby (zobrazenie loaderu). |
onPaymentStopped | () => void | Nie | – | Volané po dokončení spracovania platby (skrytie loaderu). |
Pri onPaymentStarted neodstraňujte HTML elementy zo stránky — použite CSS (display: none alebo overlay).
Callbacky — payload referencia
Všetky callbacky prijímajú objekt payload. Každý payload obsahuje atribút service ('card' | 'applepay' | 'googlepay'), ktorý identifikuje platobnú metódu.
onPaid(payload)
| Atribút | Typ | Popis |
|---|---|---|
transactionId | string | ID transakcie |
price | number | Zaplatená suma |
currency | string | Mena (ISO 4217, napr. CZK, EUR) |
status | 'PAID' | 'AUTHORIZED' | Stav platby |
service | string | Platobná metóda |
onCancelled(payload)
| Atribút | Typ | Popis |
|---|---|---|
status | 'CANCELLED' | Stav platby |
message | string | Dôvod zrušenia |
scope | string | Oblasť chyby |
service | string | Platobná metóda |
declineStatusCode | string? | Kód zamietnutia (voliteľný) |
onPending(payload)
| Atribút | Typ | Popis |
|---|---|---|
status | 'PENDING' | Stav platby |
message | string | Popis chyby |
scope | string | Oblasť chyby |
service | string | Platobná metóda |
declineStatusCode | string? | Kód zamietnutia (voliteľný) |
onPending neznamená definitívne zlyhanie — iba neúspešný pokus. Platba zostáva aktívna a zákazník môže operáciu opakovať.
onError(payload)
| Atribút | Typ | Popis |
|---|---|---|
message | string | Popis chyby |
scope | string | Oblasť chyby |
critical | boolean | true = kritická chyba, SDK nemožno ďalej používať |
canRepeat | boolean? | true = zákazník môže platbu opakovať |
service | string | Platobná metóda |
declineStatusCode | string? | Kód zamietnutia (voliteľný) |
Rozlíšenie platobnej metódy
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
| Atribút | Typ | Povinný | Popis |
|---|---|---|---|
mountPoint | string | Áno | CSS selektor kontajnera pre tlačidlo (napr. '#cg-applepay-box'). |
ui | object | Nie | Vizuálne nastavenie tlačidla — podrobnosti viď Apple Pay. |
actions | object | Nie | { onButtonClick } — viď onButtonClickHandler. |
payment | object | Nie | { provider, providerId } — podrobnosti viď Apple Pay. |
TUseCheckoutGooglePay
| Atribút | Typ | Povinný | Popis |
|---|---|---|---|
mountPoint | string | Áno | CSS selektor kontajnera pre tlačidlo (napr. '#cg-googlepay-box'). |
ui | object | Nie | Vizuálne nastavenie tlačidla — podrobnosti viď Google Pay. |
actions | object | Nie | { onButtonClick } — viď onButtonClickHandler. |
payment | object | Nie | { googlePayMerchantId, provider, providerId } — podrobnosti viď Google Pay. |
TUseCheckoutCard
| Atribút | Typ | Povinný | Popis |
|---|---|---|---|
mountPoint | string | HTMLDivElement | Áno | CSS selektor alebo priamy odkaz na DOM element (musí byť <div> s neprázdnym id). SDK z id odvodí selektory pre sub-elementy (#${id}-ibox, #${id}-button). |
actions | object | Nie | { onButtonClick } — viď onButtonClickHandler. |
appearance | object | Nie | Prispôsobenie vzhľadu polí vnútri iframe — podrobnosti viď Karetný formulár. |
Správanie SDK na základe prítomnosti elementov v kontajneri:
- Nájde
#{id}-ibox→ vloží iframe s poľami karty. - Nájde
#{id}-button→ napojí tlačidlo na platobný flow. - Nenájde
#{id}-button→ platbu možno spustiť ručne volanímprocess()na inštancii modulu.