Skip to main content
Use esta página quando precisar do contrato exato do SDK de navegador para Payment Element v3.

Carregue o SDK

O script expõe window.Pagou.
Ambientes suportados:

Inicialize Elements

Opções: Você pode atualizar uma instância existente antes do submit:

Crie e monte o campo de cartão

elements.create("card") cria um campo hospedado de cartão. Se já existir um campo de cartão na mesma instância de elements, o SDK desmonta o campo anterior antes de criar o novo. Opções do cartão:

Eventos do cartão

Eventos suportados: Remova handlers durante o teardown do componente quando a mesma instância de cartão puder continuar viva:

Envie um pagamento

elements.submit(...) é a ação principal do SDK. Ela cria uma sessão de Element, tokeniza o campo hospedado, chama seu callback createTransaction, conclui qualquer autenticação de cartão que o pagamento exija e resolve o resultado final.
createTransaction recebe:
Envie apenas token ao seu back-end como credencial de pagamento. Trate brand, last4, exp_month e exp_year como metadados para exibição ou bookkeeping.

Resultado do submit

Valores possíveis de status incluem: Não libere o pedido usando apenas o status do navegador. Use webhook ou reconciliação no servidor como fonte final de verdade.

3D Secure

elements.submit(...) conclui a autenticação do cartão para você quando o pagamento exige, usando o buyer e os products que o seu servidor já envia ao criar a transaction. Você não coleta nada a mais no navegador. Veja 3D Secure. Retorne o payload da transaction do seu back-end sem alterações. Se ele pedir alguma ação adicional, o SDK detecta e continua o fluxo. Se você já criou a transaction server-side e só precisa que o SDK conclua uma ação que ela reportou, repasse essa ação diretamente:
Ou passe a transaction para uma instância de Elements:

Retomar após um reload

Se a página recarregar ou o comprador sair no meio do pagamento, retome a mesma transaction em vez de iniciar uma nova tentativa de checkout. resume() recria a sessão de Element a partir da sua chave pública, então funciona mesmo após um carregamento completo da página.
resume() retorna o mesmo formato de resultado de submit(). Ele retoma uma ação pendente quando ainda houver uma, retorna o status terminal quando o pagamento já finalizou e retorna processing quando o desfecho ainda não chegou. Persista o id da transaction antes que o comprador possa sair da página, para tê-lo na volta.

Reinserção do cartão (auto-heal)

Um pagamento que aguardava autenticação de cartão (3DS pré-cobrança) estava vinculado à sessão de Element que capturou o cartão; um reload inicia uma nova sessão e o desafio original não pode mais rodar. resume() se auto-corrige por padrão — o element/SDK cuida de toda a recuperação, igual para checkout hospedado e integradores diretos. Sua única responsabilidade: manter um CardElement montado e chamar resume().
Num desafio pré-cobrança de sessão obsoleta, resume() pede que o comprador reinsira o cartão no element montado, retokeniza sob a sessão atual, substitui o desafio obsoleto, roda o novo e resolve num status terminal. Nenhuma nova transaction é criada.
Apenas o mesmo cartão pode substituir o pagamento — um cartão diferente é recusado. Sem card element montado, ou se o comprador não reinserir dentro do tempo limite, resume() resolve com um resultado terminal claro pedindo para iniciar uma nova tentativa. Nunca entra em loop nem trava.

Modo do token

Passe mode em submit para declarar a intenção da chamada e escolher o tipo de token gerado:

Cleanup

Desmonte o campo de cartão ao sair da tela de checkout:
Destrua a instância de Elements quando o fluxo de pagamento inteiro deixar de existir:

Regras de produção

  • Use pk_test_* apenas com Pagou.setEnvironment("sandbox").
  • Use pk_live_* com o ambiente padrão de produção.
  • Nunca envie dados brutos de cartão ao seu back-end.
  • Nunca registre tokens pgct_* ou pgpm_*, nem dados de cartão em logs.
  • Desabilite submits duplicados enquanto elements.submit(...) estiver em execução.
  • Persista o id da transaction para poder chamar resume(...) após um reload.
  • Retorne o payload da transaction do back-end sem remover id, status ou next_action.
  • Trate o status do navegador como provisório até webhook ou reconciliação confirmar o estado final do pagamento.