Checkout — Обзор
Размещённый checkout — это страница, на которой покупатель реально
отправляет средства. Вы не отрисовываете сами селектор актива,
депозитный адрес и QR — SDK открывает нашу страницу (по адресу
https://checkout.infraio.xyz/<session_key>), а мы занимаемся UI.
Три режима
Центрированный overlay-popup, по умолчанию ~560×780. Витрина
остаётся на месте. onSuccess срабатывает, когда popup закрывается
после оплаты. Режим по умолчанию.
Жёсткая навигация на checkout. Лучше всего для браузеров,
блокирующих popup’ы, или для mobile web, где оверлеи выглядят
неестественно. Покупатель возвращается через ваш success_url /
cancel_url из сессии.
iframe внутри вашей страницы. Лучше всего, когда вы контролируете layout полностью и хотите нулевое переключение контекста. Авто-resize через postMessage.
EmbedЭвристика выбора режима
| Если… | Используйте |
|---|---|
| Desktop web, обычная e-commerce | Popup |
| Mobile web | Redirect (popup’ы + mobile = грустно) |
| Жёсткая CSP-залоченная админ-панель | Redirect |
| In-app webview / нативный checkout на странице | Embed |
| Хотите полностью кастомный поток покупателя с white-label заголовком | Embed + hideHeader + ваш собственный wallet connect |
Что видит покупатель
Независимо от режима страница показывает:
- Сводку заказа (позиции, общая сумма, валюта). Скрывается
через
hideSummary, если вы уже показали это на своей стороне. - Селектор актива — список комбинаций сеть × актив, включённых вами в настройках мерчанта. Покупатель выбирает одну.
- Депозитный адрес + QR + сумму для выбранной комбинации. Покупатель либо сканирует, либо подключает кошелёк (кнопка WalletConnect), либо платит из заранее подключённого кошелька, переданного вами через SDK.
- Пульс статуса — «Ожидание перевода», «Tx обнаружена (3/12 подтверждений)», «Оплачено».
- Кнопку Cancel (присутствует всегда) → срабатывает
onCancel.
Кастомизация страницы
| Параметр | Как | Ограничения |
|---|---|---|
| Скрыть сводку заказа | hideSummary: true в SDK | Покупатель всё ещё видит сумму в депозитной панели |
| Скрыть заголовок InfraIO | hideHeader: true в SDK | Сочетайте с walletAddress для полного white-label |
| Предподключить кошелёк | walletAddress + walletChainId + onSignRequest | Обходит модал WalletConnect |
| Локаль | locale в SDK — один из en, vi, ja, ko, es, pt-BR, ru, tr, zh-CN, zh-TW | Локализует страницу checkout и страницы возврата (а также модал подключения кошелька). Неизвестное значение или отсутствие → откат к en |
| Логотип, фирменный цвет | Панель мерчанта → Branding | Применяется глобально, не per-session |
Поведение return URL
В режиме redirect покупатель всегда возвращается на один из:
success_urlиз сессии (при успешно проведённом платеже)cancel_urlиз сессии (при отмене/забрасывании)- Если вы не задали их, SDK возвращается на страницу, открывшую
checkout, с добавлением
?session_id=…&status=success|cancel
В режимах popup и embed навигации нет — управление возвращается
на вашу страницу через onSuccess / onCancel. Используйте их, чтобы
решить, какое UI показать дальше.
CSP и встраивание
Если вы используете режим embed, ваш CSP должен разрешить наш
origin в frame-src:
Content-Security-Policy:
frame-src https://checkout.infraio.xyz https://checkout-dev.infraio.xyz;iframe несёт permissions policy allow="payment; clipboard-write" —
он может вызывать Payment Request API и писать в clipboard, не больше.
Он не помещён в HTML-sandbox: страница checkout — это полноценное
приложение, подключающее кошельки, чья безопасность postMessage
(проверки origin с обеих сторон) и сторонние wallet SDK (WalletConnect,
Coinbase, MetaMask) требуют настоящего same-origin скриптового
контекста, поэтому атрибут HTML sandbox сломал бы подключение
кошелька ради незначительного выигрыша в изоляции. Изоляция вместо
этого обеспечивается границей cross-origin, строгими проверками origin
в postMessage и вашим CSP frame-src.
Особенности mobile
Popup’ы агрессивно блокируются на mobile Safari. Если ваш трафик в
основном мобильный, по умолчанию используйте mode: "redirect". Overlay
popup’а также перекрывает зону клавиатуры на маленьких экранах — это
нормально для ввода суммы, но неудобно для выбора актива.
Брендинг (для тех, кому нужен white-label)
Полный white-label требует:
hideHeader: trueв SDK- Предподключённый
walletAddress(покупатель не видит WalletConnect) - Ваш логотип + фирменный цвет в брендинге панели мерчанта
- (Опционально) Кастомный домен для страницы checkout —
pay.your-shop.comвместоcheckout.infraio.xyz. Self-serve через панель, как только CNAME подтверждён.
Что дальше
- SDK → JavaScript — полный справочник опций по режимам.
- Концепции → Сессии — что происходит на стороне сервера, пока покупатель на странице.
- Концепции → Сети и активы — какие комбинации сеть × актив доступны в селекторе.