---
title: "Diferenças entre Versões de 3DS (legado)"
url: "https://devcenter.stone.com.br/legacy-migracao-3ds-versoes"
image: "https://devcenter.stone.com.br/_og/d/c_Ocean.takumi,title_~RGlmZXJlbsOnYXMgZW50cmUgVmVyc8O1ZXMgZGUgM0RTIChsZWdhZG8p,props_eyJ0aGVtZSI6eyJtb2RlIjoibGlnaHQiLCJjb2xvcnMiOnsicHJpbWFyeSI6IiMzMEE2NkQifX19,p_Ii9sZWdhY3ktbWlncmFjYW8tM2RzLXZlcnNvZXMi,s_iQmIBvUX074SpepQ.png"
---

# Diferenças entre Versões de 3DS

Saiba como migrar sua integração 3DS para a versão mais atual.

Documentação legada do Pagar.me v5

Esta página descreve um conceito da **Pagar.me v5** (versão clássica). Para projetos novos, explore o **[API Catalog](https://devcenter.stone.com.br/catalog)**.

Saiba como migrar sua integração 3DS para a versão mais atual.

## [Índice](#índice)

1.  [Visão Geral](#vis%C3%A3o-geral)
2.  [Alteração de URL para GET Token](#altera%C3%A7%C3%A3o-de-url-para-get-token)
3.  [Troca de URLs da Biblioteca](#troca-de-urls-da-biblioteca)
4.  [Mudança nos Elementos de Exibição do Challenge e Execução do TDSMethod](#mudan%C3%A7a-nos-elementos-de-exibi%C3%A7%C3%A3o-do-challenge-e-execu%C3%A7%C3%A3o-do-tdsmethod)
5.  [Mudança na Estrutura da Função init](#mudan%C3%A7a-na-estrutura-da-fun%C3%A7%C3%A3o-init)
6.  [Envio do Objeto Order Diretamente na Função](#envio-do-objeto-order-diretamente-na-fun%C3%A7%C3%A3o)
7.  [Mudança no Retorno da Função init](#mudan%C3%A7a-no-retorno-da-fun%C3%A7%C3%A3o-init)
8.  [Exemplo Completo](#exemplo-completo)

## [Visão Geral](#visão-geral)

Este documento é destinado a **clientes que já possuem integração com o 3DS** e desejam migrar para a nova versão da solução. Aqui você encontrará um resumo objetivo e detalhado das principais mudanças que precisam ser aplicadas para garantir compatibilidade com a nova implementação.  
O objetivo é facilitar o processo de atualização, reduzindo retrabalho e evitando comportamentos inesperados durante a migração.  
Este documento fornece uma visão clara e organizada das mudanças necessárias ao migrar de uma versão anterior para a nova integração 3DS.

## [Alteração de URL para GET Token](#alteração-de-url-para-get-token)

As URLs base usadas para obter o token foram alteradas.

| Ambiente | URL Base                        |
| :------- | :------------------------------ |
| Sandbox  | https://3ds-sdx.stone.com.br/v2 |
| Produção | https://3ds.stone.com.br/v2     |

## [Troca de URLs da Biblioteca](#troca-de-urls-da-biblioteca)

As URLs da biblioteca 3DS também foram atualizadas.

| Ambiente | URL da Biblioteca                                  |
| :------- | :------------------------------------------------- |
| Sandbox  | https://3ds-nx-js.stone.com.br/test/v2/3ds2.min.js |
| Produção | https://3ds-nx-js.stone.com.br/live/v2/3ds2.min.js |

## [Mudança nos Elementos de Exibição do Challenge e Execução do TDSMethod](#mudança-nos-elementos-de-exibição-do-challenge-e-execução-do-tdsmethod)

Agora a integração requer dois containers específicos no HTML:

```html
<!-- Container invisível para o 3DS Method -->
<div id="tdsMethodContainer" style="display: none;"></div>
<!-- Container para o Challenge -->
<div id="challengeContainer"></div>
```

Isso quer dizer que além da adição desses novos containers, a tag do iframe para visualização do challenge pode ser removida.

```diff
- <iframe
-  id="challengeIframe"
-  name="challengeIframe"
-  data-pagarmecheckout-element="challengeIframe">
- </iframe>
```

## [Mudança na Estrutura da Função `init`](#mudança-na-estrutura-da-função-init)

A função `init` mudou um pouco a estrutura, e na nova versão recebemos os parâmetros da seguinte forma

```javascript
window.TDS.init(
  {
    token: token, // Token gerado
    tds_method_container_element: tdsMethodContainer, // Referência do tdsMethodContainer anteriormente adicionado
    challenge_container_element: challengeContainer, // Referência do challengeContainer anteriormente adicionado
    use_default_challenge_iframe_style: true, // Opção true ou false para style referente ao challenge gerado
    challenge_window_size: '03', // Tamanho da janela do challenge
  },
  orderData, // Informações do order passadas diretamente
); 
```

## [Envio do Objeto Order Diretamente na Função](#envio-do-objeto-order-diretamente-na-função)

Como comentado no item anterior, agora os dados dos pedidos devem ser enviados diretamente via `orderData` dentro da chamada `window.TDS.init()`.

A nova versão não captura mais valores via _data-_ attributes.

Isso significa que, atributos como `data-pagarmecheckout-form` e `data-pagarmecheckout-element` antes usados para coleta de informações do pedido diretamente do formulário, agora **podem ser removidos**.

Essa mudança tem como intuito que o tratamento e organização dos dados fiquem sob responsabilidade do cliente, oferecendo mais flexibilidade para adaptar a implementação ao próprio fluxo e regras de negócio, de acordo com a tecnologia utilizada na integração.

### [Exemplo de Objeto Order](#exemplo-de-objeto-order)

```javascript
const orderData = {
  "payments": [
    {
      "payment_method": "credit_card",
      "credit_card": {
        "card": {
          "number": "3000100811112072", // Cartão de teste que gera challenge manual
          "holder_name": "JOAO SILVA",
          "exp_month": 12,
          "exp_year": 2028,
          "billing_address": {
            "country": "BR",
            "state": "SP",
            "city": "São Paulo",
            "zip_code": "01234567",
            "line_1": "123, Rua das Flores, Centro",
            "line_2": "Apartamento 45"
          }
        },
      },
      "amount": 20000
    }
  ],
  "customer": {
    "name": "João Silva",
    "email": "joao.silva@email.com",
    "code": "CUST-001",
    "document": "12345678901",
    "phones": {
      "home_phone": {
        "country_code": "55",
        "area_code": "11",
        "number": "987654321"
      },
      "mobile_phone": {
        "country_code": "55",
        "area_code": "11",
        "number": "123456789"
      }
    }
  },
  "items": [
    {
      "description": "Smartphone Samsung Galaxy",
      "code": "ITEM-001"
    },
    {
      "description": "Capa Protetora",
      "code": "ITEM-002"
    }
  ],
  "shipping": {
    "recipient_name": "João Silva",
    "address": {
      "country": "BR",
      "state": "SP",
      "city": "São Paulo",
      "zip_code": "01234567",
      "line_1": "123, Rua das Flores, Centro",
      "line_2": "Apartamento 45"
    }
   },
  "requestor_url": "https://suaempresa.com.br"
};
```

Para mais informações sobre a estrutura do orderData, acesse a [página de integração 3DS](https://devcenter.stone.com.br/Manual%20de%20Integra%C3%A7%C3%A3o%203DS.md#objeto-order).

## [Mudança no Retorno da Função `init`](#mudança-no-retorno-da-função-init)

Com as alterações feitas na função init, deixamos de utilizar o padrão baseado em callback e passamos a retornar o resultado por meio de uma Promise. Além disso, o tipo de retorno também mudou: em vez de um único objeto, agora a função passa a retornar um array de objetos.  
Por isso, é necessário ajustar a forma como essas informações são recebidas e tratadas no código.

## [Exemplo Completo](#exemplo-completo)

```diff
- <script src="https://3ds2-sdx.pagar.me/v1/3ds2.min.js"></script>
+ <script src="https://3ds-nx-js.stone.com.br/test/v2/3ds2.min.js"></script>

+ <div id="tdsMethodContainer" style="display:none;"></div>
+ <div id="challengeContainer"></div>

- <iframe
-  id="challengeIframe"
-  name="challengeIframe"
-  data-pagarmecheckout-element="challengeIframe">
- </iframe>

<script>
-  function callback(data) {
-    return true;
-  };   
-  tdsData = { ... }
-  init3ds(tdsToken, tdsData, callback, challengeWindowSize)

+  window.TDS.init(
+    {
+      token: 'SEU_TOKEN_AQUI',
+      tds_method_container_element:
+      document.getElementById('tdsMethodContainer'),
+      challenge_container_element:
+      document.getElementById('challengeContainer'),
+      use_default_challenge_iframe_style: true,
+      challenge_window_size: '03',
+    },
+    orderData,
+  )
+  .then((results) => {
+    // results é um array de objetos com os resultados da autenticação
+    results.forEach((result) => {
+      console.log('ID da transação:', result.tds_server_trans_id);
+      console.log('Status:', result.trans_status);
+      console.log('Cartão autenticado:', result.authenticated_card);
+      console.log('Challenge cancelado:', result.challenge_canceled);
+    });
+  })
+  .catch((error) => {
+    console.error('Erro na autenticação 3DS:', error);
+  });
</script>
```

Para mais informações sobre a nova versão do 3DS, sua integração e testes, acesse o [Manual de Integração 3DS](https://devcenter.stone.com.br/legacy-manual-integracao-3ds)

---

**Jornada: [3DS e tokenização](https://devcenter.stone.com.br/legacy-3ds)**  
Etapa 4 de 6

[**Etapa anterior**3DS via HUB](https://devcenter.stone.com.br/legacy-integracao-3ds-hub)[**Próxima etapa**tokenizecard.js](https://devcenter.stone.com.br/legacy-tokenizecard)

Siga a Stone nas redes sociais

[](https://www.facebook.com/stonepagamentos/)[](https://x.com/sejastone/)[](https://www.instagram.com/stone/)[](https://br.linkedin.com/company/stone-co)[](https://www.youtube.com/channel/UCk4L4JykgoDkN8YeuxkNqIQ)

© Stone Instituição de Pagamento S.A. CNPJ 16.501.555/0001-57

Av. Rebouças, 2880, 4º andar, Pinheiros, CEP 05.402-500 – São Paulo/SP

Instituição de pagamento autorizada pelo Banco Central do Brasil, nas modalidades de credenciadora e emissora de moeda eletrônica.