vext.js troca os dados do cartão por um token
no navegador, e o seu servidor cobra com esse token.
O número do cartão nunca passa pelo seu servidor nem pelos nossos. Quem o troca por um token é
o
vext.js, no navegador. É isso que mantém a sua aplicação fora do escopo de PCI — e é o motivo
de nenhum endpoint nosso aceitar number ou cvv (mandá-los devolve 422).Os valores aqui são inteiros em centavos: R$ 100,00 se envia como
10000. Decimais são
recusados com 422, e o porquê está em Valores em centavos.1
Crie uma chave publicável
No painel, em Desenvolvedores → Navegador. Ela começa com
pk_ e é a única credencial que pode
ir para o navegador.Cadastre os domínios das suas páginas de pagamento. A chave é pública por natureza — fica no
código-fonte de uma página que qualquer um abre —, então a proteção dela não é o segredo: é a lista
de domínios. Sem ela, copiar a chave do seu HTML bastaria para tokenizar cartão em nome da sua loja
de outro site.2
Troque o cartão por um token
Uma tag e uma função. Sem npm, sem build, sem dependência.Isso é tudo. A máscara do número, a conversão de mês e ano para número e a mensagem de erro segura
para mostrar ao comprador já vêm resolvidas.Os códigos de erro, quando você quiser tratá-los um a um:
Formulário completo
3
Cobre, no seu servidor
O corpo mínimo. É isso.
description no lugar de items, e nenhum campo de 3DS.201 e a venda está feita.A resposta, e os três desfechos
A
message do 402 é nossa e pode ser mostrada ao comprador. O decline_code é da operadora e
serve ao seu time entender o padrão das recusas — não vire texto na tela.
Melhorando a aprovação
Estes três campos são opcionais e cada um sobe a aprovação. Nenhum deles é obrigatório para a venda acontecer, e é por isso que eles não estão no passo 3:Endereço de cobrança — dois campos bastam
Endereço de cobrança — dois campos bastam
O antifraude reprova bem mais sem endereço, e é ele que a bandeira compara com o cadastro do portador
numa contestação. Mas você não precisa dos seis campos: mande CEP e número, e nós completamos rua,
bairro, cidade e UF.Mandar os seis continua sendo o melhor: não depende da nossa busca de CEP responder.
Parcelas — consulte a grade antes de mostrar
Parcelas — consulte a grade antes de mostrar
A grade muda por bandeira e por valor, e quem a calcula somos nós. Peça em
GET /v1/installments e mostre ao comprador exatamente os
valores que vieram de lá. O juro é cobrado dele e soma ao total; o amount da cobrança continua
sendo o preço do seu produto.A mesma rota responde a pergunta inversa: com net_amount, quanto cobrar para você receber um valor
cheio.customer_ip — o IP de quem compra
customer_ip — o IP de quem compra
Quem abre a conexão conosco é o seu servidor. Sem este campo, é o endereço dele que fica
gravado, e o “Local” da venda aponta para o seu datacenter em toda cobrança. Atrás de CDN ou proxy,
leia o IP do cabeçalho encaminhado.
Autenticação do portador: opcional
Você percebeu que o 3DS não apareceu em nenhum passo. Ele é opcional nesta API, e o padrão é não autenticar — o interruptor do painel governa os checkouts hospedados por nós, não esta porta. O que isso custa: sem autenticação, uma contestação por “não fui eu” sai do seu saldo. Com ela, responde o banco emissor. Se o seu produto tem risco de fraude, vale implementar — é um passo a mais no navegador, e está em Autenticação do portador.Veja também
Cofre de cartões
Guardar o cartão e cobrar de novo sem pedir nada ao comprador.
Assinaturas
Cobrar em série, e o que a bandeira exige que você declare.
Ficou algo de fora? Chame no WhatsApp. Se o assunto for uma chamada específica, informe o horário dela; se for uma entrega de webhook, informe o
X-Vext-Delivery — é por ele que localizamos a tentativa, a resposta do seu servidor e o horário.