Skip to main content
Neste tutorial, você coloca o formulário de cartão dentro do seu site: o cliente digita o cartão, paga e não sai da página. No fim, você tem uma página funcionando no Modo Teste.

Como funciona

  1. O número do cartão nunca passa pelo seu servidor. O formulário é um iframe seguro. O seu código só recebe um token.
  2. São duas chaves. A chave pública (pk_...) vai no navegador. A chave de API (abc_...) fica só no backend.
  3. O token ctok_ vale 60 segundos e uma cobrança. Para cobrar o mesmo cartão de novo depois, use o cardToken da resposta. Veja One click buy.
Para seguir o tutorial, você precisa de uma conta com o cartão de crédito liberado e do Node.js 20.6 ou superior, que roda o exemplo com --env-file.

Passo 1: pegue as duas chaves

Ligue o Modo Teste no dashboard e copie:
As duas chaves precisam ser do mesmo ambiente: as duas de teste ou as duas de produção. Misturar faz a cobrança falhar com Invalid or expired card token.

Passo 2: a página

Crie a pasta do projeto:
Crie public/index.html e troque pk_SUA_CHAVE_PUBLICA pela sua chave pública:
public/index.html

Passo 3: o backend

Crie server.mjs na pasta minha-loja:
server.mjs
E o arquivo .env, com a chave de API:
.env

Passo 4: teste

Abra http://localhost:3000 e clique em Pagar. No Modo Teste, o formulário já vem preenchido com o cartão de teste 4242 4242 4242 4242, e nada é cobrado de verdade. No terminal aparece a cobrança aprovada e o cardToken (no Modo Teste, dev_card_4242). Para testar recusas, troque o número no formulário por um dos cartões de teste que são recusados. Toda recusa volta com a mesma mensagem, Não foi possível processar o pagamento com este cartão. É de propósito: detalhar o motivo ajudaria quem testa cartão roubado.

Passo 5: produção

O código não muda. Desligue o Modo Teste, copie as duas chaves de Produção e troque na página e no .env. Em produção, o formulário é o seguro de verdade. Alguns bancos pedem confirmação (3DS) numa janela que o abacatepay.js abre e fecha sozinho. São aceitos cartões de crédito Visa e Mastercard. Antes de ir ao ar, ajuste o exemplo para a sua loja:
  • O valor vem do seu pedido, no backend. Não confie no valor que chega do navegador.
  • Os dados do cliente vêm do seu formulário. O CPF ou CNPJ precisa ser válido.
  • Libere o pedido quando o status for APPROVED. Se vier PENDING, espere o webhook transparent.completed.
  • Timeout não é recusa. Se a chamada de cobrança der timeout, não repita na hora: confira na listagem ou espere o webhook.
Use o checklist de produção para conferir o resto da integração.

Erros mais comuns

Todos os erros estão em Criar cobrança Cartão e em abacatepay.js.

Próximos passos

One click buy

Use o cardToken para cobrar o mesmo cartão sem o cliente digitar nada.

Parcelamento no cartão

Deixe o cliente parcelar em até 12x.

Cartão de crédito

Como o cartão funciona na AbacatePay.

Criar cobrança Cartão

Todos os campos, respostas e status do endpoint.