Skip to main content
O abacatepay.js é o script que coloca o formulário de cartão no seu site. Ele cuida de três coisas:
  • desenha os campos do cartão num iframe seguro (o número e o CVV nunca passam pelo seu código);
  • faz a autenticação 3DS quando o banco do cliente exige, numa janela que abre e fecha sozinha;
  • devolve o token ctok_, que o seu backend usa para criar a cobrança.
Quer o fluxo completo, do formulário à cobrança? Siga o passo a passo. Esta página é a referência do script.

Instalação

Coloque a tag no <head> da página de pagamento:
O script cria o objeto global AbacatePay. Use sempre esse endereço: não copie o arquivo para o seu servidor, porque ele é atualizado por nós. Não existe pacote npm do abacatepay.js; em React, Vue ou Next.js, carregue a mesma tag (veja o exemplo em React).

Uso básico

Use <script type="module"> (ou uma função async) para poder usar await. Num <script> comum, await fora de função é erro de sintaxe e nada acontece.

AbacatePay.create(opções)

Cria o checkout. Não desenha nada ainda: isso é papel do mount(). create() lança um erro na hora se publicKey estiver vazia ou se amount for menor que 100. Os callbacks são opcionais. Você pode usar só await com try/catch nos métodos, ou só os callbacks, ou os dois.

Métodos

checkout.mount(alvo)

Desenha o formulário dentro do elemento. Aceita um seletor CSS ('#cartao') ou o próprio elemento. O conteúdo que estiver dentro dele é substituído. Devolve uma Promise que resolve quando o formulário está pronto e rejeita com um erro se algo falhar, por exemplo uma chave pública inválida. Chame uma vez por checkout.

checkout.tokenize(cliente, endereço?)

Valida o cartão, faz o 3DS quando o banco exige e devolve o token. Chame no clique do botão de pagar, nunca antes: o token vale só 60 segundos. cliente (obrigatório): endereço (opcional): endereço de cobrança do cartão. Em produção ele é enviado ao banco na autenticação 3DS. Se enviar, mande os cinco campos: street, number, city, state (sigla com 2 letras) e zipCode.
Resultado:
Para pagar de novo depois de uma recusa, chame tokenize() outra vez: cada chamada gera um token novo.

checkout.destroy()

Remove o formulário. Use quando o cliente sai da tela de pagamento sem recarregar a página (SPA).

Propriedades


onCardChange

Recebe o estado do formulário a cada mudança:

Erros

Os erros do abacatepay.js têm name igual a AbacatePayError, uma message e um code:
Mensagens mais comuns com code: 'API':

3DS

Em produção, alguns bancos pedem que o cliente confirme a compra (código por SMS, aprovação no app do banco). Quando isso acontece, o tokenize() abre uma janela por cima da página, com o título Autenticação do cartão, e só resolve depois que o cliente termina. Você não precisa fazer nada além de esperar a Promise. Se o cliente não confirmar, o tokenize() rejeita com THREE_DS_FAILED.

Dev mode

Com a chave pública de teste, o abacatepay.js mostra um formulário de teste: campos simples, já preenchidos com o cartão 4242 4242 4242 4242, sem 3DS e sem cobrança real. Para simular recusas, troque o número pelos cartões de teste.

Aparência

O theme é repassado ao formulário seguro. Em styles, cada chave é um seletor CSS de dentro do formulário e o valor é um objeto de estilos:
O theme vale para o formulário seguro de produção. O formulário de teste do Dev mode tem visual fixo.

Exemplo em React

Coloque a tag do script no index.html (no Next.js, use <Script src="https://abacatepay.com/abacatepay.js" strategy="beforeInteractive" /> no layout raiz). O componente cobra pelo mesmo backend do passo a passo (POST /pagar):
PagamentoCartao.jsx
Uso: