Criar cobrança com 3DS
O que é o 3DS?
O 3D Secure (3DS) é um protocolo de autenticação adicional para transações com cartão de crédito. Ele adiciona uma camada de segurança ao verificar a identidade do portador do cartão junto ao banco emissor antes de aprovar a transação. Quando ativado, a transação pode passar por um dos seguintes fluxos:
| Tipo de desafio | Descrição |
|---|---|
DATA_ONLY | Autenticação silenciosa sem interação do usuário. A transação é aprovada com base em dados do dispositivo |
FRICTIONLESS | O banco emissor aprova automaticamente sem desafio visível ao usuário |
ISSUER_CHALLENGE | O banco emissor exige que o usuário realize uma ação (ex: digitar código OTP, autenticar no app do banco) |
Rotas que suportam 3DS
Cobranças (Payments)
POST /api/v3/payments — Criar cobrança com cartão de crédito
POST /api/v3/payments — Criar cobrança com cartão de créditoCria uma cobrança e já processa o pagamento no cartão se os dados do cartão forem enviados no corpo da requisição.
POST /api/v3/payments/{id}/payWithCreditCard — Pagar cobrança existente com cartão
POST /api/v3/payments/{id}/payWithCreditCard — Pagar cobrança existente com cartãoProcessa o pagamento de uma cobrança já criada utilizando cartão de crédito.
Cobranças Lean (Lean Payments)
POST /api/v3/lean/payments — Criar cobrança com cartão de crédito (resposta reduzida)
POST /api/v3/lean/payments — Criar cobrança com cartão de crédito (resposta reduzida)Funciona da mesma forma que POST /api/v3/payments, porém retorna uma resposta com conjunto de campos reduzido. Também suporta 3DS — o campo threeDSecureChallengeUrl é retornado na resposta lean quando aplicável.
Parcelamentos (Installments)
POST /api/v3/installments — Criar parcelamento com cartão de crédito
POST /api/v3/installments — Criar parcelamento com cartão de créditoCria um parcelamento e já processa a primeira parcela no cartão se os dados do cartão forem enviados.
POST /api/v3/installments/{id}/payWithCreditCard — Pagar parcelamento existente com cartão
POST /api/v3/installments/{id}/payWithCreditCard — Pagar parcelamento existente com cartãoProcessa o pagamento de um parcelamento já criado utilizando cartão de crédito.
Contrato de Requisição
Para acionar o 3DS, a requisição deve incluir os objetos threeDSecure e deviceInfo além dos campos padrão da cobrança/parcelamento.
Objeto threeDSecure
threeDSecure| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
callbackUrl | string | Sim | URL para a qual o Asaas irá redirecionar o pagador após a conclusão do desafio 3DS. Deve ser HTTPS em produção. Tamanho máximo: 2000 caracteres |
Objeto deviceInfo
deviceInfoInformações sobre o dispositivo do pagador, coletadas no browser/app no momento do checkout. Necessárias para que o banco emissor avalie o risco da transação.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
colorDepth | integer | Não | Profundidade de cor do dispositivo (ex: 24) |
screenHeight | integer | Não | Altura da tela em pixels (ex: 900) |
screenWidth | integer | Não | Largura da tela em pixels (ex: 1440) |
timeZoneOffset | integer | Não | Diferença do fuso horário do dispositivo em relação ao UTC em minutos (ex: 180 para UTC-3) |
language | string | Não | Idioma do browser (ex: "pt-BR") |
userAgent | string | Não | User-Agent do browser do pagador |
remoteIp | string | Não | IP do dispositivo do pagador |
Exemplo de requisição (payWithCreditCard)
payWithCreditCard){
"creditCard": {
"holderName": "João da Silva",
"number": "4111111111111111",
"expiryMonth": "05",
"expiryYear": "2028",
"ccv": "123"
},
"creditCardHolderInfo": {
"name": "João da Silva",
"email": "[email protected]",
"cpfCnpj": "12345678901",
"postalCode": "01310-100",
"address": "Av. Paulista",
"addressNumber": "100",
"province": "Centro",
"phone": "11987654321"
},
"threeDSecure": {
"callbackUrl": "https://seusite.com.br/callback/3ds"
},
"deviceInfo": {
"colorDepth": 24,
"screenHeight": 900,
"screenWidth": 1440,
"timeZoneOffset": 180,
"language": "pt-BR",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
"remoteIp": "200.100.50.25"
}
}Contrato de Resposta
Quando o 3DS está habilitado e a cobrança é com cartão de crédito, a resposta inclui o campo adicional:
| Campo | Tipo | Descrição |
|---|---|---|
threeDSecureChallengeUrl | string ou null | URL para onde o pagador deve ser redirecionado para completar o desafio 3DS. Retorna null quando a autenticação ocorre de forma silenciosa (DATA_ONLY ou FRICTIONLESS) |
Exemplo de resposta com desafio pendente
{
"id": "pay_xxxxxxxxxxxxx",
"status": "PENDING",
"billingType": "CREDIT_CARD",
"value": 100.00,
"threeDSecureChallengeUrl": "https://banco-emissor.com.br/3ds/challenge?token=abc123"
}Exemplo de resposta sem desafio (frictionless ou data-only)
{
"id": "pay_xxxxxxxxxxxxx",
"status": "CONFIRMED",
"billingType": "CREDIT_CARD",
"value": 100.00,
"threeDSecureChallengeUrl": null
}Fluxo de Autenticação 3DS
- Você envia a requisição com os objetos
threeDSecureedeviceInfo - Se um desafio for necessário, a resposta retorna
threeDSecureChallengeUrl - Você redireciona o pagador para a URL do desafio
- O pagador realiza a autenticação no ambiente do banco emissor
- Após o resultado do desafio, o Asaas:
- Redireciona o pagador para a
callbackUrlinformada - Envia um webhook para notificar sua aplicação sobre o desfecho (ver seção abaixo)
- Redireciona o pagador para a
- Você aguarda o webhook do Asaas ou consulta o status da cobrança para confirmar o resultado
Notificações via Webhook
Ao final do fluxo 3DS, o Asaas envia um webhook para a URL configurada na sua conta com um dos seguintes eventos:
| Evento | Quando é disparado |
|---|---|
PAYMENT_CONFIRMED | O desafio foi concluído com sucesso e a captura do cartão foi aprovada |
PAYMENT_CREDIT_CARD_CAPTURE_REFUSED | O desafio foi concluído com sucesso, mas a captura do cartão foi recusada pela adquirente |
PAYMENT_CREDIT_CARD_THREE_D_SECURE_CHALLENGE_FAILED | O pagador falhou ou abandonou o desafio 3DS — a cobrança não é capturada |
Atenção:
- Em sandbox, todas as transações serão aprovadas automaticamente, mesmo que enviadas com os parâmetros necessários para aplicação do 3DS.
- Ainda não é possível testar o fluxo de desafio no ambiente Sandbox.
- Para uso em produção, entre em contato com o nosso time de suporte para habilitação do 3DS.
Updated about 3 hours ago
