Autenticação 3DS
stable
No contexto de autorização, também existem os eventos de autenticação 3DS. Estes eventos não fazem parte do processo de autorização de uma transação com um cartão, porém informam ao parceiro sobre a necessidade da criação de um desafio de autenticação para o prosseguimento de uma compra realizada pelo cliente.
É somente por meio do evento PREAUTHENTICATIONCHALLENGE_WAS_REQUESTED que o parceiro poderá obter o challengeId, identificador do desafio que deverá ser informado no endpoint de confirmação do desafio.
Para mais informações sobre quando essas mensagens são disparadas e sobre o seu conteúdo, consulte as páginas:
Pré-requisitos
Para receber esses eventos, o parceiro deverá:
- Configurar previamente o recebedor de eventos do webhook.
- Conhecer a estrutura básica dos eventos que acompanha o objeto
data.
Informações sobre os eventos
Contexto e nome do evento
Os campos context e name poderão variar de acordo com a tabela a seguir:
context | name | Descrição |
|---|---|---|
Authorization | PRE_AUTHENTICATION_WAS_RECEIVED | Após receber um pedido de pré-autenticação 3DS, o Bankly realizou uma análise antifraude para identificar a necessidade de criação de um desafio. Caso o resultado dessa análise tenha sido "challenge" (desafio), o evento PRE_AUTHENTICATION_CHALLENGE_WAS_REQUESTED será enviado para o parceiro. |
Authorization | PRE_AUTHENTICATION_CHALLENGE_WAS_REQUESTED | Um desafio foi requisitado. Após receber este evento, o parceiro deverá criar um desafio e enviá-lo a seu cliente para que ele possa confirmar a tentativa de compra. |
Identificador (entityId)
entityId)O campo entityId é o identificador da entidade emissora do evento e seu valor depende do contexto de sua emissão.
No contexto de autorização, o entityId é o identificador único do desafio (challengeId).
Atualização do contrato: Operational.Flow3DS (data.error)
Com a implementação de melhorias no fluxo de autenticação 3DS no Autorizador, o objeto data.error passa a expor informações de erro e falhas ocorridas durante o processo de autenticação 3DS nos eventos de pré-autenticação.
Os novos campos permitem que consumidores identifiquem e monitorem problemas no fluxo 3DS, como erros de formato, falhas de componentes ou timeouts durante a comunicação com Directory Server (DS) ou Access Control Server (ACS).
Todos os campos do objeto data.error são opcionais (nullable) e somente serão preenchidos quando ocorrer erro durante o fluxo de autenticação 3DS.
Características do campo
| Nome | Tipo | Formato | Obrigatoriedade | Descrição |
|---|---|---|---|---|
data.error.code | string | — | Opcional (Nullable) | Código que indica o tipo de problema identificado na mensagem 3DS. |
data.error.component | string | — | Opcional (Nullable) | Código do componente 3DS que identificou o erro (S=3DS Server, C=DS, A=ACS). |
data.error.description | string | — | Opcional (Nullable) | Texto descritivo do problema identificado. |
data.error.detail | string | — | Opcional (Nullable) | Detalhe adicional referente ao problema. |
data.error.messageType | string | — | Opcional (Nullable) | Tipo de mensagem identificada como errônea (AReq, CReq, RReq). |
Regras de presença
- O objeto
data.errorestará presente apenas nos eventosPRE_AUTHENTICATION_WAS_RECEIVEDePRE_AUTHENTICATION_CHALLENGE_WAS_REQUESTEDquando ocorrer erro durante o fluxo de autenticação 3DS. - Todos os campos do objeto
data.errorsão nullable. - O objeto
data.errorserá preenchido apenas quando houver erro, falha ou timeout no processo de autenticação 3DS. - Quando a autenticação 3DS ocorre com sucesso, o objeto
data.errornão estará presente (ausente/nulo). - Campos individuais dentro de
data.errorpodem ser nulos se a informação específica não estiver disponível. - O Autorizador apenas propaga as informações de erro recebidas, sem inferir ou complementar valores ausentes.
- Integrações devem estar preparadas para consumir esse campo em todos os eventos documentados.
Exemplo de payload
{
"name": "PRE_AUTHENTICATION_WAS_RECEIVED",
"context": "Authorization",
"data": {
"holder": {
"document": {
"value": "12345678900"
}
},
"card": {
"proxy": "1234567890"
},
"channel": {
"name": "3DS",
"directoryServerTransactionID": "abc-123-def",
"amount": {
"value": 150.00,
"currency": {
"code": 986
}
},
"merchant": {
"name": "Loja X",
"stateOrCountryCode": "BRA"
}
},
"riskAnalysisResult": "DENIED",
"error": {
"code": "203",
"component": "S",
"description": "Data element not in the correct format",
"detail": "Field dsTransID is invalid",
"messageType": "AReq"
}
}
}{
"name": "PRE_AUTHENTICATION_WAS_RECEIVED",
"context": "Authorization",
"data": {
"holder": {
"document": {
"value": "12345678900"
}
},
"card": {
"proxy": "1234567890"
},
"channel": {
"name": "3DS",
"directoryServerTransactionID": "abc-123-def",
"amount": {
"value": 150.00,
"currency": {
"code": 986
}
},
"merchant": {
"name": "Loja X",
"stateOrCountryCode": "BRA"
}
},
"riskAnalysisResult": "APPROVED"
}
}Compatibilidade
Esta alteração é compatível com versões anteriores do contrato. O objeto data.error é novo, todos os seus campos são opcionais e nullable, e não substitui nenhum campo existente — portanto não há quebra de contrato para integrações existentes.
Histórico de alterações
| Data | Eventos impactados | Descrição |
|---|---|---|
| [Adicionar data] | PRE_AUTHENTICATION_WAS_RECEIVED, PRE_AUTHENTICATION_CHALLENGE_WAS_REQUESTED | Inclusão do objeto data.error (campos code, component, description, detail, messageType) para expor informações de erro e falhas ocorridas durante o fluxo de autenticação 3DS. |
Dados dos eventos
PRE_AUTHENTICATION_WAS_RECEIVED
Esse evento sinaliza que, após receber uma solicitação de pré-autenticação 3DS, o Bankly realizou uma análise antifraude para identificar a necessidade de criação de um desafio por parte do parceiro.
Descrição do objeto data do evento
O objeto data traz detalhes específicos do contexto em que o evento ocorre. Neste caso, o objeto trará os campos de acordo com a tabela:
| Nome | Tipo | Descrição |
|---|---|---|
transactionTimeStamp | string | Data e hora em que ocorreu a transação, no formato ISO 8601 - UTC. |
riskAnalysisResult | string | Resultado da análise antifraude, sugerido pelo Bankly. |
data.error.code | string | Código que indica o tipo de problema identificado na mensagem 3DS. |
data.error.component | string | Código do componente 3DS que identificou o erro (S=3DS Server, C=DS, A=ACS). |
data.error.description | string | Texto descritivo do problema identificado. |
data.error.detail | string | Detalhe adicional referente ao problema. |
data.error.messageType | string | Tipo de mensagem identificada como errônea (AReq, CReq, RReq). |
holder | object | Objeto que contém informações sobre o titular da conta. |
holder.document | object | Objeto que contém informações sobre o documento do titular. |
holder.value | string | Número do documento. |
holder.type | string | Tipo do documento, que pode ser "CPF" ou "CNPJ". |
holder.account | object | Objeto que contém informações sobre a conta do titular. |
holder.account.branch | string | Número da agência. |
holder.account.number | string | Número da conta. |
holder.account.bank | object | Objeto que contém informações sobre o banco ao qual a conta pertence. |
holder.account.bank.ispb | string | ISPB (Identificador de Sistema de Pagamentos Brasileiro) do banco. |
holder.account.bank.code | string | Código do banco. |
holder.account.bank.name | string | Nome do banco. |
card | object | Objeto que contém informações sobre o cartão utilizado na transação. |
card.proxy | string | Código identificador do cartão. |
channel | object | Objeto que contém informações sobre o canal no qual o fluxo de autenticação 3DS se inicia. |
channel.name | string | Nome do canal, que sempre será "3DS". |
channel.directoryServerTransactionID | string | Identificador da transação gerado pelo provedor externo do fluxo 3DS. |
channel.merchant | object | Objeto que contém informação sobre o e-commerce no qual a compra foi iniciada. |
channel.merchant.name | string | Nome do e-commerce. |
channel.merchant.stateOrCountryCode | string | Código do estado ou do país do merchant para identificar parte da sua localização. Este campo aceita valores alfanuméricos. |
channel.amount | object | Objeto que contém informações sobre o valor da transação. |
channel.amount.value | number | Valor total da transação. |
channel.amount.currency | string | Código da moeda com base na ISO - 4217. |
Payload do evento
O payload abaixo exemplifica a estrutura do evento que deverá ser recebido pelo parceiro. Clique na seta para expandi-lo:
Exemplo de payload
{
"entityId": "dcbf96e1-7595-4bbb-8692-48532c96f0b9",
"companyKey": "COMPANY_KEY",
"idempotencyKey": "dcbf96e1-7595-4bbb-8692-48532c96f0b9",
"context": "Authorization",
"name": "PRE_AUTHENTICATION_WAS_RECEIVED",
"timestamp": "2023-01-19T18:09:57.2303277Z",
"correlationId": "3ebd795e-2c4f-467d-b3e5-35099888445d",
"data": {
"transactionTimeStamp": "2023-01-19T18:09:57.2303514Z",
"riskAnalysisResult": "CHALLENGE",
"holder": {
"document": {
"value": "47742663023",
"type": "CPF"
},
"account": {
"branch": "0001",
"number": "15164",
"bank": {
"ispb": "13140088",
"code": "332",
"name": "Acesso Soluções De Pagamento S.A."
}
}
},
"card": {
"proxy": "2229041000032008041"
},
"channel": {
"name": "3DS",
"directoryServerTransactionID": "dcbf96e1-7595-4bbb-8692-48532c96f0b9",
"merchant": {
"name": "Editora Nísia Floresta",
"stateOrCountryCode": "196"
},
"amount": {
"value": 3,
"currency": "BRL"
}
}
}
}PRE_AUTHENTICATION_CHALLENGE_WAS_REQUESTED
Este evento sinaliza que um desafio foi requisitado. Após receber este evento, o parceiro deverá criar um desafio e enviá-lo a seu cliente para que ele possa confirmar a tentativa de compra.
Descrição do objeto data do evento
O objeto data traz detalhes específicos do contexto em que o evento ocorre. Neste caso, o objeto trará os campos de acordo com a tabela:
| Nome | Tipo | Descrição |
|---|---|---|
challengeId | string | Identificador da transação gerado para identificar o desafio que o parceiro irá criar. |
transactionTimeStamp | string | Data e hora em que ocorreu a transação, no formato ISO 8601 - UTC. |
expirationTimeStamp | string | Data e hora da expiração do desafio, no formato ISO 8601 - UTC. |
data.error.code | string | Código que indica o tipo de problema identificado na mensagem 3DS. |
data.error.component | string | Código do componente 3DS que identificou o erro (S=3DS Server, C=DS, A=ACS). |
data.error.description | string | Texto descritivo do problema identificado. |
data.error.detail | string | Detalhe adicional referente ao problema. |
data.error.messageType | string | Tipo de mensagem identificada como errônea (AReq, CReq, RReq). |
holder | object | Objeto que contém informações sobre o titular da conta. |
holder.document | object | Objeto que contém informações sobre o documento do titular. |
holder.value | string | Número do documento. |
holder.type | string | Tipo do documento, que pode ser "CPF" ou "CNPJ". |
holder.account | object | Objeto que contém informações sobre a conta do titular. |
holder.account.branch | string | Número da agência. |
holder.account.number | string | Número da conta. |
holder.account.bank | object | Objeto que contém informações sobre o banco ao qual a conta pertence. |
holder.account.bank.ispb | string | ISPB (Identificador de Sistema de Pagamentos Brasileiro) do banco. |
holder.account.bank.code | string | Código do banco. |
holder.account.bank.name | string | Nome do banco. |
card | object | Objeto que contém informações sobre o cartão utilizado na transação. |
card.proxy | string | Código identificador do cartão. |
channel | object | Objeto que contém informações sobre o canal no qual o fluxo de autenticação 3DS se inicia. |
channel.name | string | Nome do canal, que sempre será "3DS". |
channel.directoryServerTransactionID | string | Identificador da transação gerado pelo provedor externo do fluxo 3DS. |
channel.merchant | object | Objeto que contém informação sobre o e-commerce no qual a compra foi iniciada. |
channel.merchant.name | string | Nome do e-commerce. |
channel.merchant.stateOrCountryCode | string | Código do estado ou do país do merchant para identificar parte da sua localização. Este campo aceita valores alfanuméricos. |
channel.amount | object | Objeto que contém informações sobre o valor da transação. |
channel.amount.value | number | Valor total da transação. |
channel.amount.currency | string | Código da moeda com base na ISO - 4217. |
Payload do evento
O payload abaixo exemplifica a estrutura do evento que deverá ser recebido pelo parceiro. Clique na seta para expandi-lo:
Exemplo de payload
{
"entityId": "812ghb1-9jkb-4fda-94e1-06d49defdf67d",
"companyKey": "COMPANY_KEY",
"idempotencyKey": "902ghj8-9fdb-4fga-94e1-06d49ghbe67d",
"context": "Authorization",
"name": "PRE_AUTHENTICATION_CHALLENGE_WAS_REQUESTED",
"timestamp": "2022-07-12T12:50:05.046+00:00",
"correlationId": "f50d7f8-3iyt-4eac-83e9-c02e430b7836",
"data": {
"challengeId": "806tag8-9fdb-4wrf-94e1-06d49dhjk67d",
"transactionTimeStamp": "2022-07-12T12:50:05.046+00:00",
"expirationTimeStamp": "2022-07-12T13:00:05.08+00:00",
"holder": {
"document": {
"value": "47742663023",
"type": "CPF"
},
"account": {
"branch": "0001",
"number": "15164",
"bank": {
"ispb": "13140088",
"code": "332",
"name": "Acesso Soluções De Pagamento S.A."
}
}
},
"card": {
"proxy": "1234567765432123"
},
"channel": {
"name": "3DS",
"directoryServerTransactionID": "812fab8-6fdb-4fda-94e1-06d49dfbe67d",
"merchant": {
"name": "Editora Nísia Floresta",
"stateOrCountryCode": "196"
},
"amount": {
"value": 3,
"currency": "BRL"
}
}
}
}
ImportanteO objeto
accounté retornado apenas para cartões vinculados a uma conta. Para cartões de crédito puro pós-pago, esse objeto não é exibido.
Possíveis resultados da análise antifraude
| Resultado | Descrição |
|---|---|
| APPROVED | Pré-autenticação aprovada sem a necessidade de aprovação do titular do cartão. |
| CHALLENGE | Um desafio deverá ser enviado ao titular do cartão para a aprovação ou não da transação. |
| DENIED | Pré-autenticação negada sem a necessidade de aprovação do titular do cartão. |
Updated 23 days ago
