3DS
Atualizado em · 7 min de leitura
Integração de Transações com Cartão de Crédito utilizando 3DS
Ao realizar transações com cartão de crédito com autenticação 3DS, é necessário enviar algumas informações essenciais do comprador. Estas informações são capturadas automaticamente pelo nosso SDK JavaScript, que também gera o token, bin e bandeira do cartão.
Para gerar esses dados, é muito simples! Você só precisará importar nossa biblioteca javascript de tokenização em seu front-end e utilizar uma das duas maneiras de implementação:
Importar a biblioteca SDK:
Para todas as formas de implementação, importe nossa biblioteca no front-end:
Ambiente de Produção: https://apiv3.dompagamentos.com.br/js/sdk-3ds-dompagamentos.min.js
Ambiente Sandbox: https://hml-apiv3.dompagamentos.com.br/js/sdk-3ds-dompagamentos.min.js
<script type="text/javascript" src="https://apiv3.dompagamentos.com.br/js/sdk-3ds-dompagamentos.min.js"></script>Opção 1: Implementar com Java Script:
Faça uma requisição ao método **getTokenCard() **para obter como resposta o token, bin e bandeira, exemplo:
Exemplo de uso:
<script type="text/javascript" src="https://apiv3.dompagamentos.com.br/js/sdk-3ds-dompagamentos.min.js"></script>
<form action="#" method="post">
<input type="hidden" id="deviceId" data-dompag="finger_print" />
<input type="hidden" name="token" id="token">
<input type="hidden" name="brand" id="brand">
<input type="hidden" name="bin" id="bin">
<input type="submit" value="Enviar" onclick="sendForm()">
</form>
<script>
function sendForm() {
//Sua chave pública:
let public_key = 'pk_6d05f363eb03512dd0960af902bacba18be7329dab32322d';
//Dados do cartão:
let data_card = {
name: 'João da Silva', //Nome do cartão
document: '11111111111', //CPF ou CNPJ
customer_id: '',//Id do consumidor caso queira gerar um token de carteira
number: '5147430374257642',//Número do cartão
cvv: '652', //Código de segurança
month: '01', //Mês que expira
year: '25', //Ano que expira
finger_print: document.getElementById('deviceId').value // A impressão digital do dispositivo do comprador
}
let installments = 1; //quantidade de parcelas
getTokenCard(public_key, data_card, installments, function (data) {
console.log('resposta: ', data);
if (data.token) {
document.getElementById('token').value = data.token;
document.getElementById('brand').value = data.brand;
document.getElementById('bin').value = data.bin;
// form.submit();
} else {
alert("ERRO: " + data.msgError);
}
});
}
</script>Opção 2 - Implementar através de atributos nos campos do seu formulário:
Inclua nos campos do seu formulário nossos atributos data-dompag com seus respectivos valores:
| Atributo | Campo no formulário | Exemplo de valor do campo |
|---|---|---|
| data-dompag="number" | Número do cartão de crédito | 4871 2689 6999 1111 |
| data-dompag="verification_value" | Código de segurança (CVV) | 124 |
| data-dompag="full_name" | Nome do titular do cartão | João da Silva |
| data-dompag="expiration" | Data de expiração do cartão | 12/30 |
| data-dompag="document" | Documento do titular (CPF) | 111111111-11 |
| data-dompag="birthdate" | Data de nascimento do titular | 01/01/2000 |
| data-dompag="installments" | Quantidade de parcelas da compra | 12 |
| data-dompag="token-card" | Token retornado pelo SDK | lMIS2rqea7p+AB6n0LNfWAMO4CccY1FKxygShPSWCfl |
| data-dompag="brand-card" | Bandeira do cartão retornada pelo SDK (pode ser nula) | Visa |
| data-dompag="bin-card" | 6 primeiros e 4 últimos digitos do cartão retornados pelo SDK | 487126******1111 |
| data-dompag="customer_id" | Id do consumidor se desejar criar um token da carteira | 04a26aa2-e781-472e-88d0-6e958ed972g3 |
| data-dompag="finger_print" | Impressão digital do dispositivo do comprador | armor.1a145e9ff849dab2e15dfe02a2... |
Exemplo de uso:
<form id="payment-form" action="#" method="POST">
<div>
<div>
<input placeholder="Número do Cartão" type="text" data-dompag="number" />
</div>
<div>
<input placeholder="CVV" type="text" data-dompag="verification_value" />
</div>
<div>
<input placeholder="Titular do Cartão" type="text" data-dompag="full_name" />
</div>
<div>
<input placeholder="Expiração (MM/AA)" type="text" value="12/30" data-dompag="expiration" />
</div>
<div>
<input placeholder="CPF" type="text" value="" data-dompag="document" />
</div>
<div>
<input placeholder="Nascimento (DD/MM/YYYY)" type="text" value="01/01/2000" />
</div>
<div>
<input placeholder="Celular" type="text" value="" data-dompag="phone"/>
</div>
<div>
<input placeholder="Parcelas" type="number" value="1" data-dompag="installments" />
</div>
<div>
<input type="hidden" id="deviceId" data-dompag="finger_print" />
</div>
</div>
<div class="token-area">
<label for="token">Token do Cartão de Crédito - Enviar para seu Servidor</label>
<input type="text" name="token" id="token" placeholder="Token" size="50" data-dompag="token-card" />
<input type="text" name="brand" id="brand" placeholder="Bandeira" data-dompag="brand-card" />
<input type="text" name="bin" id="bin" placeholder="Bin" size="30" data-dompag="bin-card" />
</div>
<div>
<input type="hidden" value="" data-dompag="customer_id" />
<button type="button" onclick="sendForm()">Salvar</button>
</div>
</form>
<script type="text/javascript" src="https://apiv3.dompagamentos.com.br/js/sdk-3ds-dompagamentos.min.js"></script>
<script>
function sendForm() {
let public_key = '{sua_chave_publica}';
initTokenCard(public_key, 'payment-form', function (data) {
if (data.token) {
document.getElementById('token').value = data.token;
document.getElementById('brand').value = data.brand;
document.getElementById('bin').value = data.bin;
document.getElementById('payment-form').submit();
} else {
alert("ERRO: " + data.msgError);
}
});
}
</script>Chave Pública
Para executar o script SDK, será necessário fornecer sua chave pública, ela fica disponível através do painel da conta, menu Segurança -> Token para checkout
🧾Etapa 2: Confirmação 3DS
Após a criação da transação com o token, o retorno da API poderá conter:
"three_ds": true – Transação utiliza autenticação 3DS.
"three_ds_challenge": true – O banco emissor exigirá um desafio (ex: confirmação via app ou SMS).
"three_ds_html" – HTML com o formulário do banco, que deve ser incorporado em um iframe.
Importante
Inclua em sua página de pagamento um script que atualize a interface após o desafio 3DS ser concluído.
window.addEventListener("message", (e) => {
if (e.data.status === "COMPLETE") {
window.open("congrats.html");
}
});🔄 Etapa 3: Verificação do status da transação
Após o desafio 3DS (quando houver), consulte o status da transação para confirmar se foi **aprovada **ou reprovada.
Veja abaixo a tabela com os possíveis status e suas respectivas descrições.
| Status | Status_detail | Descrição |
|---|---|---|
| approved | accredited | Transação aprovada sem autenticação |
| rejected | cc_rejected_3ds_mandatory | Transação rejeitada sem autenticação. Para conferir os motivos, consulte a lista padrão de status detail |
| pending | pending_challenge | Transação pendente de autenticação ou timeout do Challenge |
| rejected | cc_rejected_3ds_challenge | Transação rejeitada devido a falha no Challenge |
| cancelled | expired | Transação com Challenge cancelada após 24h no status pending |
Teste de integração
Para que seja possível validar pagamentos com 3DS, disponibilizamos um ambiente de testes do tipo sandbox que retorna resultados falsos apenas para simulação e validação da implementação.
Para realizar testes de pagamento em um ambiente sandbox, é necessário utilizar cartões específicos que permitem testar a implementação do Challenge com os fluxos de sucesso e falha. A tabela a seguir apresenta os detalhes desses cartões:
| Cartão | Fluxo | Número | CVV | Vencimento |
|---|---|---|---|---|
| Mastercard | Challenge com sucesso | 5483 9281 6457 4623 | 123 | 11/25 |
| Mastercard | Challenge não autorizado | 5361 9568 0611 7557 | 123 | 11/25 |