client_secret; o SDK conclui a coleta e devolve
somente um payment_method reutilizável. O token de uso único fica interno.
Use Checkout white-label quando você quer controlar a tela de pagamento
inteira. Se preferir uma página pronta da Chargefy, use Checkout
Sessions.
Quando usar
O que fica com quem
Como as peças se encaixam
Pagamento imediato
1. Crie ou reutilize um customer
O cartão pertence a um customer. Para cartão no Brasil, crie o customer comdocument (CPF/CNPJ).
2. Inicie o cadastro no backend
Crie um setup intent para o customer. Envie oclient_secret retornado somente
à página que vai coletar o cartão.
client_secret, combinado com a chave publicável, autoriza consultar e
concluir somente esse cadastro. Envie-o à página do comprador, mas não o
coloque em analytics, logs ou mensagens.
3. Salve o cartão no navegador
Na sua tela de pagamento, carregue o Chargefy.js, use a chave publicável do mesmo ambiente e conclua o cadastro.pm_*; número e CVC não chegam à sua aplicação.
4. Cobre com o cartão salvo
Crie o payment intent comcustomer, payment_method e confirm: true.
status.
Controle explícito do token
Na maioria das integrações,confirmSetup() é o caminho mais simples: o SDK
mantém o token de uso único no navegador e devolve diretamente o
payment_method. Algumas integrações, porém, precisam transportar o token_id
no próprio backend antes de salvar o cartão.
Os dois caminhos produzem o mesmo cartão salvo. A diferença está apenas em quem
transporta a credencial intermediária.
1. Tokenize o cartão no navegador
O número do cartão continua indo diretamente do navegador para a Chargefy. Sua página envia somentetoken.id ao backend.
2. Troque o token por um cartão salvo
No backend, crie e confirme o setup intent em uma única chamada. O token é de uso único; se a operação falhar antes de salvar o cartão, gere outro.pm_* retornado.
Parcelamento
Parcelas são definidas empayment_method_options.credit_card.installments no create ou update do payment intent. Não envie parcelamento no confirm.
O objeto retornado detalha o cálculo do parcelamento:
Exiba o valor exato das parcelas
No Brasil, Payment Previews serve basicamente para uma coisa: exibir no seu checkout a quantidade de parcelas e o valor exato de cada uma, já com o acréscimo calculado — antes de criar o payment intent, sem você calcular juro na mão.payment_methods.credit_card.installments.options[] com
count, per_installment_amount e amount de cada opção — a tabela pronta
para o seu seletor de parcelas — além dos totais de pix e boleto no mesmo
payload. Quando o comprador escolher, envie o count no create ou update do
payment intent. A Chargefy recalcula tudo no servidor; a preview serve apenas
para exibição.
Repasse de taxa (surcharge)
Se você quer que o comprador cubra a taxa da organização — a organização recebe líquido exatamente oamount —, envie has_surcharge: true na preview
e no payment intent. Os totais passam a incluir surcharge_amount, e no
intent a decomposição fica em amount_details
(principal_amount + surcharge_amount + installment_interest_amount = amount).
UX recomendada
Recusa e retry
Se o cartão for recusado, a tentativa termina, mas o Payment Intent volta pararequires_payment_method com o motivo em last_payment_error. Para tentar de
novo:
- Crie um novo setup intent no backend.
- Chame
confirmSetup()com o novoclient_secrete os dados corrigidos. - Atualize o mesmo Payment Intent com esse
pm_*. - Confirme novamente o mesmo Payment Intent.
charge
recusada é terminal; o Payment Intent em requires_payment_method continua
sendo o mesmo pagamento e aceita uma nova tentativa com dados corrigidos ou
outro método.
3DS e autenticação
Hoje a cobrança de cartão é síncrona: ao confirmar, ostatus já volta
succeeded, requires_capture (quando capture_method: manual) ou
requires_payment_method na recusa. Não há etapa de redirecionamento ou desafio
3DS no fluxo de cartão.
Cartão não usa
next_action neste checkout white-label. O campo aparece em
métodos assíncronos: Pix no fluxo direto e boleto quando o intent nasce de
checkout hospedado ou invoice.Webhooks são a fonte da verdade
A resposta síncrona ajuda a atualizar a tela, mas o estado final da sua operação deve vir dos webhooks. Verifique a assinatura antes de processar eventos — veja Entrega de webhooks.Erros esperados
Todos seguem o formato de erro{ error: { code, message, param, type } }.
Sandbox
Emtest, o número do cartão escolhe o cenário (aprovado, recusado, saldo
insuficiente etc.). Use ch_test_* no backend e pk_test_* no Chargefy.js.
Veja os cartões de teste em Chargefy.js e os cenários completos em Sandbox.
Chargefy for Platforms
Se você cobra em nome de organizações filhas, envie o headerOrganization em
todas as chamadas do backend. No navegador, a chave publicável e o
client_secret precisam pertencer à mesma organização e ao mesmo ambiente.
Veja Autenticação para a matriz de chaves e
escopos.
Próximos passos
Chargefy.js
Referência do script de tokenização no navegador.
Tokenização de cartão
Salve cartão para assinaturas, recompra e cobrança futura.
Payment Intents
Contrato completo de create, confirm, capture e cancel.
Webhooks
Entrega, assinatura e processamento idempotente.

