sdk-java icon indicating copy to clipboard operation
sdk-java copied to clipboard

[Feature] Orders 3DS

Open aqudsilva opened this issue 1 month ago • 0 comments

🔐 Implementação de 3DS (3D Secure) em Orders

📋 Processo de Descoberta e Implementação

1. Monitoramento de Mudanças

  • Anúncio: Feature de 3DS (3D Secure) para Orders

2. Verificação no Fury Spec Hub

  • Versão: Stable
  • Exemplo identificado: "POST /v1/orders - Online with 3DS"

3. Análise da Especificação

Nós JSON identificados:

Request:

{
  "config": {
    "online": {
      "transaction_security": {
        "validation": "on_fraud_risk",
        "liability_shift": "required"
      }
    }
  }
}

Response:

{
  "payment_method": {
    "transaction_security": {
      "url": "",
      "validation": "on_fraud_risk", 
      "liability_shift": "required"
    }
  }
}

4. Mapeamento para Estrutura do SDK Java

Estrutura de pastas afetada:

src/main/java/com/mercadopago/
├── client/order/
│   ├── OrderOnlineConfig.java          [MODIFICADO]
│   └── OrderTransactionSecurity.java   [NOVO]
├── resources/order/
│   ├── OrderPaymentMethod.java         [MODIFICADO]
│   ├── OrderOnlineConfig.java          [NOVO]
│   ├── OrderTransactionSecurity.java   [NOVO]
│   └── OrderDifferentialPricing.java   [NOVO]
├── example/apis/order/
│   └── CreateOrderWith3DS.java         [NOVO]
└── test/java/com/mercadopago/client/order/
    └── OrderClientWith3DSTest.java     [NOVO]

🔧 Alterações Implementadas

Classes de Request (Client)

OrderTransactionSecurity.java

@Getter
@Builder
public class OrderTransactionSecurity {
    private String validation;      // "always", "on_fraud_risk", "never"
    private String liabilityShift;  // "required", "preferred"
}

Classes de Response (Resources)

OrderTransactionSecurity.java

@Getter
public class OrderTransactionSecurity {
    private String url;             // URL do Challenge 3DS
    private String validation;      // Validação utilizada
    private String liabilityShift;  // Configuração de liability shift
}

Integrações

  • OrderOnlineConfig (client): Adicionado campo transactionSecurity
  • OrderPaymentMethod (resources): Adicionado campo transactionSecurity

🎯 Como Funciona

1. Configuração no Request

OrderTransactionSecurity transactionSecurity = OrderTransactionSecurity.builder()
    .validation("on_fraud_risk")  // Recomendado: baseado em risco
    .liabilityShift("required")   // Transferência de responsabilidade
    .build();

OrderCreateRequest request = OrderCreateRequest.builder()
    .config(OrderConfigRequest.builder()
        .online(OrderOnlineConfig.builder()
            .transactionSecurity(transactionSecurity)
            .build())
        .build())
    // ... demais campos
    .build();

2. Processamento da Resposta

Order order = client.create(request);

// Verificar se Challenge é necessário
if ("action_required".equals(order.getStatus()) && 
    "pending_challenge".equals(order.getStatusDetail())) {
    
    String challengeUrl = order.getTransactions()
        .getPayments().get(0)
        .getPaymentMethod()
        .getTransactionSecurity()
        .getUrl();
    
    // Exibir URL em iframe para o usuário completar o challenge
    System.out.println("Challenge URL: " + challengeUrl);
}

3. Estados Possíveis

  • Sem Challenge: status = "processed" → Aprovado diretamente
  • Com Challenge: status = "action_required" + status_detail = "pending_challenge"
  • Challenge OK: Status atualiza para processed
  • Challenge Falha: Status atualiza para failed

Exemplos

Exemplo Completo

  • Arquivo: CreateOrderWith3DS.java
  • Funcionalidades:
    • Configuração completa de 3DS
    • Tratamento de diferentes cenários
    • Documentação inline detalhada

✅ Validações e Testes

Testes Realizados

  • [x] Construção de objetos com builders
  • [x] Serialização/deserialização JSON
  • [x] Integração com classes existentes
  • [x] Diferentes cenários de configuração
  • [x] Lint e formatação

Compatibilidade

  • [x] Retrocompatível: Não quebra implementações existentes
  • [x] Campos opcionais: 3DS é opcional por padrão
  • [x] API Compliant: Segue especificação do swagger

🚀 Impacto

Segurança

  • ✅ Autenticação 3D Secure para transações
  • ✅ Redução de chargebacks via liability shift
  • ✅ Conformidade com regulamentações PCI DSS

Desenvolvedores

  • ✅ API simples e intuitiva
  • ✅ Documentação completa com exemplos
  • ✅ Testes unitários abrangentes
  • ✅ Backward compatibility mantida

Performance

  • ✅ Campos opcionais sem overhead
  • ✅ Serialização eficiente com Lombok
  • ✅ Sem impacto em transações sem 3DS

📋 Checklist de Review

  • [x] Análise da spec do swagger
  • [x] Mapeamento correto JSON → Classes Java
  • [x] Implementação de classes request/response
  • [x] Atualização de classes existentes
  • [x] Exemplo prático funcional
  • [x] Testes unitários abrangentes
  • [x] Documentação atualizada
  • [x] Lint/formatação verificada
  • [x] Compatibilidade backward testada

aqudsilva avatar Nov 03 '25 18:11 aqudsilva