Skip to main content

Integration checklist

The checklist guides the developer through the entire useCheckout() integration — from account activation to production deployment.

Tip

Checked items are saved to the browser's local storage and remain preserved even after the page is refreshed.

SymbolMeaning
🔜Must be met before production deployment (not necessarily in order).
⚠️Critical — without it the SDK will not work correctly.
Optional.

1. Prerequisites

Comgate account is active.
At least one of the following methods is activated (depending on planned payment methods):
Card only — CARD_CZ_COMGATE method activated.
Apple Pay / Google Pay only — CARD_CZ_COMGATE or CARD_CZ_CSOB_2 method activated.
Card + Apple Pay / Google Pay — CARD_CZ_COMGATE method activated.
Shop is registered with Comgate with the correct domain / subdomain.
🔜 HTTPS is available on the production domain.
⚠️ The SDK is not running in an iframe or WebView.
❔ If CSP is used — domains checkout.comgate.cz, payments.comgate.cz, pay.google.com, applepay.cdn-apple.com are allowed.
❔ File uploads to /.well-known/ on your domain must be allowed (for Apple Pay).


2. Configuration in the Comgate portal

A shop connection with activated services (Card, Apple Pay, Google Pay) has been created in the portal.
The checkoutId has been obtained from the connection settings.

❔ Domain verification — Apple Pay

Only if you integrate Apple Pay.

🔜 The /.well-known/apple-developer-merchantid-domain-association file has been uploaded to your domain.
🔜 The file content matches the value from the /v2.0/appleDomainAssociation endpoint (ASCII/UTF-8, no trailing newline).
🔜 Domain + subdomains verified in the Comgate client portal.
🔜❔ Automatic file content refresh implemented.

❔ Domain verification — Google Pay

Only if you integrate Google Pay.

🔜 Domain + subdomains approved in Google Pay Console.
🔜 Integration screenshots ready for Google review.

3. Implementation of useCheckout()

[Link to documentation] · [Examples]

Payment creation (backend)

⚠️ Payment is created via Merchant API — transactionId obtained.
⚠️ The payer e-mail is always provided when creating the payment.

Preparing HTML elements

❔ For Apple Pay: <div> with a defined size (min. 240×45 px).
❔ For Google Pay: <div> with a defined size (min. 240×45 px).
❓ For card: container with a unique ID, inner elements #{id}-ibox and #{id}-button > button, min. size 280×250 px.
⚠️ The elements exist in the DOM before useCheckout() is called.

Calling useCheckout()

checkoutId and transactionId are passed.
⚠️ All required callbacks are implemented: onPaid, onCancelled, onPending, onError.
In onPaid the user sees a success confirmation (or is redirected).
In onCancelled / onPending the user sees an understandable message and can repeat the action.
In onError the error is logged and the user is informed.

Processing the result (result)

result.applepay?.success is checked — if false, the element is hidden.
result.googlepay?.success is checked — if false, the element is hidden.
The state where useCheckout() rejects (the SDK failed to load) is handled.

4. SPA — lifecycle

Required for applications with client-side routing (Vue, React, Next.js, Nuxt, …).

Warning

Without proper cleanup, old instances remain in memory and cause conflicts when the payment page is loaded again.

⚠️ When leaving the page, destroy() is called on the Apple Pay, Google Pay and Card instances.
⚠️ destroy() is not called on Core — it is a singleton managed by the SDK.
⚠️ Cleanup is performed in the correct lifecycle hook (onUnmounted / useEffect cleanup).
⚠️ For a new payment, useCheckout() is called again — the old instance is not used.

5. Backend — payment verification

Danger

Never rely solely on frontend callbacks (onPaid). Always verify the payment state server-to-server.

⚠️ The backend verifies the payment state via the Merchant API (endpoint /v1.0/status) after receiving the notification.
⚠️ The order is marked as paid only after confirmation from the backend, not based on onPaid.

6. Test scenarios

Before deploying to production, verify the following scenarios for each implemented method:

❔ Apple Pay

Successful payment → onPaid was called, user sees confirmation.
Declined payment (insufficient funds) → onPending, user is informed.
User closed Apple Pay sheet → onPending, application behaves correctly.
❔ Preauthorization payment → onPaid.
❔ Initial recurring payment → onPaid.

❔ Google Pay

Successful payment → onPaid was called, user sees confirmation.
Declined payment (insufficient funds) → onPending, user is informed.
User closed Google Pay dialog → onPending, application behaves correctly.
❔ Preauthorization payment → onPaid.
❔ Initial recurring payment → onPaid.

❔ Card payment

Successful payment → onPaid was called, user sees confirmation.
Declined payment (insufficient funds) → onPending, user is informed.
3D Secure verification took place (iframe modal) and the payment was completed.
Invalid card details → user sees a validation error.
❔ Preauthorization payment → onPaid.

7. Production deployment

🔜 Apple Pay — domain verified in the Comgate portal (production).
🔜 Google Pay — domain approved in Google Pay Console (production).
checkoutId matches the production connection.
⚠️ SDK elements are not programmatically hidden, overlaid or modified.
Payment tested on a real device (iOS for Apple Pay, Android for Google Pay).
All implemented payment methods (card, Apple Pay, Google Pay) are functional in the production environment.