Pular para o conteúdo principal
Nesta página

Este guia aborda como integrar o Apple Pay diretamente com a API da DEUNA. A integração direta oferece controle total sobre o fluxo de pagamento, tornando-a ideal para comerciantes que precisam de implementações personalizadas ou possuem sistemas de pagamento existentes. Esta integração suporta pagamentos únicos.


Apple Pague com DEUNA#

A seguir está o processo padrão para uma compra do Apple Pay com DEUNA:

  1. Obtenha os métodos de pagamento
  2. Inicialize o Apple Pay Web SDK
  3. Compre com Apple Pay

1. Obtenha os métodos de pagamento#

Recupere o ID da credencial do Apple Pay e os parâmetros de configuração do SDK.

→ Consulte a referência da API Obter métodos de pagamento

Resposta

JSON
{
  "data": [
    {
      "allow_installments_plan": true,
      "credentials": {
        "external_merchant_id": "merchant.test.io.deuna.pay"
      },
      "enabled": true,
      "extra_params": {
        "allowed_auth_methods": [
          "supports3DS"
        ],
        "allowed_card_networks": [
          "visa",
          "masterCard",
          "amex"
        ],
        "merchant_name": "Test DEUNA"
      },
      "id": "ef2319fe-f88d-4d8d-b4d1-e4fa08f18651",
      "method_type": "card_wallet",
      "payment_provider": "apple_pay",
      "processor_name": "apple_pay"
    }
  ]

2. Inicialize o Apple Pay Web SDK#

Consulte o Documentação do Apple Pay Web SDK para a referência completa.

Importe o SDK JS do Apple Pay

Adicione o seguinte script à sua página:

HTML
<script src="https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js" crossorigin=""></script>
HTML
<script src="https://applepay.cdn-apple.com/jsapi/1.latest/apple-pay-sdk.js" crossorigin=""></script>

Exemplo completo de integração

JavaScript
// 1. Check availability
if (!window.ApplePaySession || !ApplePaySession.canMakePayments()) {
  // Apple Pay not available — hide the button or show a fallback
}

// 2. Initialize the session on button click (must be inside a user gesture)
// Use the values returned by the Get Payment Methods endpoint
const request = {
  countryCode: 'MX',
  currencyCode: 'MXN',
  supportedNetworks: ['visa', 'masterCard', 'amex', 'discover'], // from extra_params.allowed_card_networks
  merchantCapabilities: ['supports3DS'],                          // from extra_params.allowed_auth_methods
  total: { label: 'Your Store Name', amount: '1.00', type: 'final' },
};

const session = new ApplePaySession(3, request);

// 3. Validate the merchant
// The credential-id comes from the `id` field in the Get Payment Methods response
session.onvalidatemerchant = async (event) => {
  const response = await fetch(
    'https://api.{env}.deuna.io/wallet/credentials/{credential-id}/payment-session',
    {
      method: 'POST',
      headers: {
        'X-Merchant-Id': '{merchant-id}',
        'X-Store-Code': '{store-code}',
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        validation_url: event.validationURL,
        domain: '{your-domain}',
      }),
    }
  );

  const { data } = await response.json();
  session.completeMerchantValidation(data);
};

// 4. Handle payment authorization
// Once the customer authorizes the payment, send the token to DEUNA
// Use applePayToken in step 3 — Create Card or Purchase V2
session.onpaymentauthorized = (event) => {
  const applePayToken = event.payment;

  session.completePayment(ApplePaySession.STATUS_SUCCESS);
};

session.begin();

3. Compre com Apple Pay#

Assim que o cliente autorizar o pagamento em seu dispositivo Apple, o onpaymentauthorized evento é acionado e entrega um token de cartão criptografado via event.payment. Este token deve ser enviado tal como está, sem qualquer modificação, para a DEUNA.

3.1 Criar cartão

O token de event.payment é enviado para o endpoint Create Card, que retorna um card_id que pode ser reaproveitado na compra.

→ Consulte a referência da API Criar Cartão

JSON
{
  "apple_pay": {
    "paymentData": {
      "token": {
        "transactionIdentifier": "7a94479858348...",
        "paymentMethod": {
          "type": "debit",
          "displayName": "Visa 7553",
          "network": "Visa"
        },
        "paymentData": {
          "data": "EOeLQTsv8X7f...",
          "header": {
            "publicKeyHash": "MpXcCgm...",
            "ephemeralPublicKey": "MFkwEwYH...",
            "transactionId": "7a94479858348..."
          },
          "version": "EC_v1"
        }
      }
    }
  },
  "credential_source": "apple_pay"
}

3.2 Purchase with Card ID

Use esta opção quando o cartão já tiver sido tokenizado via Criar Cartão. Esta é uma solicitação de compra padrão V2 usando o card_id retornado pelo endpoint Create Card – nenhum token Apple Pay é necessário.

→ Consulte a referência da API de compra V2

JSON
{
  "order_token": "{order-token}",
  "order_type": "DEUNA_CHECKOUT",
  "payer_info": {
    "email": "customer@example.com",
    "card_holder_dni": "12345678"
  },
  "payment_source": {
    "method_type": "credit_card",
    "card_info": {
      "card_id": "{deuna-card-id}"
    }
  }
}

3.3 Compra Direta

Isto é para os casos em que o cartão não é tokenizado. O token de event.payment é enviado diretamente na solicitação de compra.

→ Consulte a referência da API de compra V2

JSON
{
    "order_token": "{{order-token}}",
    "order_type": "DEUNA_CHECKOUT",
    "payer_info": {
        "email": "{{random_user}}@testuser.com",
        "card_holder_dni": "12345678"
    },
    "payment_source": {
        "method_type": "credit_card",
        "card_info": {
            "credential_source": "apple_pay",
            "credential_source_config": {
                "type": "apple_pay",
                "values": {
                    "system": "EC_v1",
                    "merchant_transaction_id": "6bfbf33f787b7932d5d0....",
                    "encrypted_data": "Fk11fwjWL3uFZlBwAw83G0xRt8....",
                    "encryption_header": {
                        "signature": "MIAGCSqGSIb3DQEHAqCAMIACAQEx...",
                        "public_key_hash": "EB8/SypLvJCISa2d4sQzV/Zw...",
                        "ephemeral_public_key": "MFkwEwYHKoZIzj0CAQYIKoZIzj..."
                    }
                }
            }
        }
    },
    "anti_fraud_info": {
        "device": {
            "id": "eyJPUEVOUEFZIjoiIiwiTUVSQ0FET1BBzAzLTk2NjRkYzE3MWQzYiJ9..."
        }
    }
}

Resposta

JSON
{
  "order_type": "DEUNA_CHECKOUT",
  "order_token": "4598f493-de86-4fe0-b9fd-c4c6c9847e39",
  "order": {
    "order_id": "DEUNA_CHECKOUT_b6a5c0b6-3df9-4b3b-b778-7086c190062b",
    "currency": "MXN",
    "total_amount": 10000,
    "display_total_amount": "MXN 100,00",
    "status": "succeeded",
    "payment": {
      "data": {
        "status": "processed"
      }
    }
  }
}