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
- A equipe de integração cadastra as origens HTTPS da sua conta, uma a uma.
- Na criação da cobrança com cartão, o seu servidor informa a origem da loja em
paymentMethodOptions.creditCard.threeDs.checkoutOrigin(oudebitCard). - A Accelerazione confere se a origem está cadastrada para a sua conta antes de processar a cobrança.
- 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.comnão liberahttps://checkout.loja.example.com, nemhttps://www.loja.example.com. - Subdomínios e domínios diferentes valem igualmente.
https://loja-a.example.comehttps://checkout.outra-marca.examplepodem conviver na mesma conta. - Só HTTPS, só a origem. Sem caminho, consulta, fragmento, usuário na URL ou curinga (
https://*.loja.example.comnã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
"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ção | Resultado |
|---|---|
checkoutOrigin cadastrado para a sua conta | A cobrança segue; o desafio, se houver, abre nessa origem. |
checkoutOrigin malformado, não cadastrado ou de outra conta | 400 three_ds_checkout_origin_invalid, antes de qualquer cobrança. |
| Campo omitido, conta com uma só origem | Usa essa origem. |
| Campo omitido, conta com origem padrão | Usa a origem padrão. |
| Campo omitido, várias origens sem padrão, venda exige 3DS | 400 three_ds_checkout_origin_required. |
| Campo omitido, venda sem 3DS | A 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) eevent.source(o iframe do desafio). - O resultado financeiro vem da consulta do PaymentIntent ou do webhook, nunca só da mensagem do iframe.
Erros
| HTTP | type | Causa | Ação |
|---|---|---|---|
400 | three_ds_checkout_origin_invalid | Origem 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. |
400 | three_ds_checkout_origin_required | A 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.
Exiba o desafio 3DS
Abra o desafio em um iframe quando a cobrança voltar RequiresAction, receba as mensagens do navegador e confirme o resultado pelo servidor.
Capture o cartão com o SDK de campos
Colete os dados do cartão em campos seguros da Accelerazione dentro do seu checkout e cobre com um token, sem que número e código de segurança passem pela sua página ou pelo seu servidor.