Como funciona
- 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.
- São duas chaves. A chave pública (
pk_...) vai no navegador. A chave de API (abc_...) fica só no backend. - O token
ctok_vale 60 segundos e uma cobrança. Para cobrar o mesmo cartão de novo depois, use ocardTokenda resposta (veja como).
Passo 1: pegue as duas chaves
Ligue o Modo Teste no dashboard e copie:Passo 2: a página
Crie a pasta do projeto:public/index.html e troque pk_SUA_CHAVE_PUBLICA pela sua chave pública:
public/index.html
Passo 3: o backend
Crieserver.mjs na pasta minha-loja:
server.mjs
.env, com a chave de API:
.env
Passo 4: teste
4242 4242 4242 4242, e nada é cobrado de verdade. No terminal aparece a cobrança aprovada e o cardToken (no Dev mode, dev_card_4242).
Para testar recusas, troque o número no formulário:
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, e 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. CPF ou CNPJ precisa ser válido.
- Libere o pedido quando o
statusforAPPROVED. Se vierPENDING, espere o webhooktransparent.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.
Erros mais comuns
Todos os erros estão em Criar cobrança Cartão e em abacatepay.js.
Próximos passos
Cobrar de novo um cartão salvo
Use o
cardToken para cobrar o mesmo cartão sem o cliente digitar nada.Parcelar e outros campos
installmentCount, metadata, respostas e status.