Checkout — Visão geral
O checkout hospedado é a página onde o comprador efetivamente
envia os fundos. Você não renderiza o seletor de ativo, o endereço de
depósito ou o QR por conta própria — o SDK abre a nossa página (em
https://checkout.infraio.xyz/<session_key>) e a gente cuida da UI.
Três modos
Popup sobreposto centralizado, ~560×780 por padrão. A sua loja
fica parada. onSuccess dispara quando o popup fecha após o
pagamento. Modo padrão.
Navegação completa para o checkout. Melhor para navegadores que
bloqueiam popup ou para mobile web onde overlays ficam
desconfortáveis. O comprador retorna pela success_url /
cancel_url da sessão.
iframe dentro da sua página. Melhor quando você controla o layout de ponta a ponta e quer zero troca de contexto. Auto-redimensiona via postMessage.
EmbedHeurística para escolher o modo
| Se… | Use |
|---|---|
| Desktop web, e-commerce padrão | Popup |
| Mobile web | Redirect (popups + mobile = tristeza) |
| Painel administrativo com CSP estrita | Redirect |
| Webview in-app / checkout-numa-página nativo | Embed |
| Você quer um fluxo de comprador totalmente customizado com header white-label | Embed + hideHeader + a sua própria conexão de carteira |
O que o comprador vê
Independente do modo, a página mostra:
- Resumo do pedido (itens, total, moeda). Esconda com
hideSummaryse você já mostrou isso do seu lado. - Seletor de ativo — lista de combinações rede × ativo que você habilitou nas configurações do lojista. O comprador escolhe uma.
- Endereço de depósito + QR + valor para a combinação escolhida. O comprador escaneia, conecta uma carteira (botão WalletConnect) ou paga a partir de uma carteira pré-conectada que você forneceu via SDK.
- Pulso de status — “Aguardando transferência”, “Tx detectada (3/12 confirmações)”, “Pago”.
- Botão Cancelar (sempre presente) → aciona
onCancel.
Customizando a página
| Botão de ajuste | Como | Limites |
|---|---|---|
| Esconder resumo do pedido | hideSummary: true no SDK | O comprador ainda vê o total no painel de depósito |
| Esconder header InfraIO | hideHeader: true no SDK | Combine com walletAddress para white-label completo |
| Pré-conectar uma carteira | walletAddress + walletChainId + onSignRequest | Pula o modal de WalletConnect |
| Idioma (locale) | locale no SDK — um de en, vi, ja, ko, es, pt-BR, ru, tr, zh-CN, zh-TW | Localiza a página de checkout e as páginas de reembolso (e o modal de conexão de carteira). Desconhecido ou omitido → volta para en |
| Logo, cor da marca | Dashboard do lojista → Branding | Aplica globalmente, não por sessão |
Comportamento da URL de retorno
Para o modo redirect o comprador sempre volta para um destes:
success_urlda sessão (em pagamento liquidado)cancel_urlda sessão (em cancelamento/abandono)- Se você não configurou essas, o SDK faz fallback para a página que
abriu o checkout, com
?session_id=…&status=success|cancelanexado
Para os modos popup e embed não há navegação — o controle
retorna para a sua página via onSuccess / onCancel. Use isso
para decidir qual UI mostrar em seguida.
CSP e embed
Se você usa o modo embed, o seu CSP precisa permitir a nossa
origem em frame-src:
Content-Security-Policy:
frame-src https://checkout.infraio.xyz https://checkout-dev.infraio.xyz;O iframe carrega a política de permissões allow="payment; clipboard-write"
— ele pode invocar a Payment Request API e escrever no clipboard,
nada além disso. Ele não é HTML-sandboxeado: a página de
checkout é um app completo de conexão de carteira cuja segurança de
postMessage (checagens de origem dos dois lados) e SDKs de carteira
de terceiros (WalletConnect, Coinbase, MetaMask) exigem um contexto
de scripting real de mesma origem, então um atributo HTML sandbox
quebraria a conexão de carteira por um ganho de isolamento
insignificante. O isolamento vem, em vez disso, da fronteira
cross-origin, das checagens estritas de origem do postMessage e do
seu CSP de frame-src.
Considerações para mobile
Popups são bloqueados agressivamente no Safari mobile. Se o seu
tráfego é principalmente mobile, use por padrão mode: "redirect".
O overlay do popup também cobre a área do teclado em telas pequenas
— ok para digitação de valor, desconfortável para escolha de ativo.
Branding (para o pessoal de white-label)
White-label completo requer:
hideHeader: trueno SDKwalletAddresspré-conectado (o comprador não vê WalletConnect)- O logo + cor da marca configurados no branding do dashboard do lojista
- (Opcional) Domínio customizado para a página de checkout —
pay.your-shop.comno lugar decheckout.infraio.xyz. Self-service via dashboard uma vez que o seu CNAME esteja verificado.
Próximos passos
- SDK → JavaScript — referência completa de opções por modo.
- Conceitos → Sessões — o que acontece do lado do servidor enquanto o comprador está na página.
- Conceitos → Redes e ativos — quais combinações rede × ativo estão disponíveis no seletor.