Docs
Cartões

Use o 3DS em várias lojas e domínios

Cadastre mais de uma origem HTTPS na mesma conta e informe em checkoutOrigin de qual loja vem cada cobrança, para o desafio 3DS abrir no checkout certo.

O desafio 3DS só abre dentro de um iframe hospedado numa origem cadastrada para a sua conta, e só manda mensagens para ela. Uma origem é o trio protocolo, domínio e porta: https://loja.example.com. Se a sua conta atende várias lojas, cada uma com o seu checkout, cadastre a origem de cada uma e diga, em cada cobrança, de qual loja ela veio.

Como funciona

  1. A equipe de integração cadastra as origens HTTPS da sua conta, uma a uma.
  2. Na criação da cobrança com cartão, o seu servidor informa a origem da loja em paymentMethodOptions.creditCard.threeDs.checkoutOrigin (ou debitCard).
  3. A Accelerazione confere se a origem está cadastrada para a sua conta antes de processar a cobrança.
  4. A página do desafio aceita ser embutida só nessa origem e envia as mensagens do iframe só para ela.

Cadastre as origens

Peça à equipe de integração o cadastro de cada origem, em cada ambiente (sandbox e produção são cadastros independentes). Não há rota de autosserviço para isso.

  • Cada origem é cadastrada individualmente. Cadastrar https://loja.example.com não libera https://checkout.loja.example.com, nem https://www.loja.example.com.
  • Subdomínios e domínios diferentes valem igualmente. https://loja-a.example.com e https://checkout.outra-marca.example podem conviver na mesma conta.
  • Só HTTPS, só a origem. Sem caminho, consulta, fragmento, usuário na URL ou curinga (https://*.loja.example.com não é aceito).

Se a sua conta já tinha uma origem cadastrada antes, ela continua valendo e passa a ser a origem padrão quando checkoutOrigin não é enviado.

Informe a origem na cobrança

Trecho de POST /api/v1/paymentintents
"paymentMethodOptions": {
  "creditCard": {
    "threeDSecure": "automatic",
    "threeDs": {
      "sessionToken": "3ds_sess_9J4W2C7X5N8QK2R4T6Y8V0H2M4P6A1B3",
      "checkoutOrigin": "https://checkout.loja-b.example.com"
    }
  }
}

Envie o valor a partir da configuração da loja no seu servidor, não do navegador: o servidor sabe qual loja abriu a sessão de checkout. A comparação ignora maiúsculas no domínio e a porta 443 explícita, então https://Checkout.Loja-B.example.com:443 equivale a https://checkout.loja-b.example.com.

SituaçãoResultado
checkoutOrigin cadastrado para a sua contaA cobrança segue; o desafio, se houver, abre nessa origem.
checkoutOrigin malformado, não cadastrado ou de outra conta400 three_ds_checkout_origin_invalid, antes de qualquer cobrança.
Campo omitido, conta com uma só origemUsa essa origem.
Campo omitido, conta com origem padrãoUsa a origem padrão.
Campo omitido, várias origens sem padrão, venda exige 3DS400 three_ds_checkout_origin_required.
Campo omitido, venda sem 3DSA cobrança segue normalmente.

Uma origem informada é sempre conferida, mesmo quando a venda acaba não exigindo 3DS. Numa cobrança que mistura Pix e cartão, a conferência acontece antes de o QR Code ser gerado: uma origem recusada não deixa um Pix pendurado.

Confirmação em etapa separada

A seleção de origem vale para cobranças confirmadas na própria criação, que é o fluxo descrito nesta documentação. Se a sua conta usa confirmação em uma etapa posterior, fale com a equipe de integração antes de usar várias origens: essa etapa ainda não retoma as opções da sessão 3DS.

No checkout de cada loja

Cada loja continua seguindo a coleta do dispositivo e o desafio 3DS:

  • A CSP de cada checkout libera as origens do SDK e da Hooks do ambiente.
  • O listener de mensagens confere event.origin (a origem Hooks) e event.source (o iframe do desafio).
  • O resultado financeiro vem da consulta do PaymentIntent ou do webhook, nunca só da mensagem do iframe.

Erros

HTTPtypeCausaAção
400three_ds_checkout_origin_invalidOrigem fora do formato (com caminho, curinga, http:) ou não cadastrada para a conta da chave.Confira o valor e o ambiente. Para uma loja nova, peça o cadastro da origem.
400three_ds_checkout_origin_requiredA venda exige 3DS, a conta tem várias origens e nenhuma padrão.Envie checkoutOrigin com a origem da loja.

Teste antes de abrir para compradores

Use duas origens cadastradas e uma não cadastrada. Nas duas cadastradas, confira que o desafio aparece, que as mensagens do iframe chegam e que o PaymentIntent termina no estado esperado. Na não cadastrada, confira o 400 three_ds_checkout_origin_invalid. Uma sessão 3DS ou uma tokenização sem desafio não prova que o iframe do banco abre na sua origem: provoque um desafio com os cartões de teste.

Nesta página