Getnet DocsGetnet Docs

Crear un pago autenticado con 3DS

Este documento aplica a los siguientes países:

BrasilChileMéxicoEspañaUruguay

En el Web Checkout de Getnet, 3D Secure (3DS) es un protocolo adicional de autenticación, usado en pagos online con tarjeta para verificar la identidad del titular de la tarjeta con el banco emisor durante el proceso de checkout. Cuando una transacción se envía a través de Web Checkout, el banco emisor puede requerir que el cliente complete un paso de autenticación, como una contraseña de un solo uso (OTP), verificación biométrica o confirmación en la aplicación bancaria.

Según la evaluación de riesgo, la autenticación puede ocurrir mediante un flujo frictionless (sin interacción del cliente) o un flujo de challenge (que requiere verificación del usuario). Este mecanismo ayuda a reducir el fraude y aumenta la seguridad de las transacciones sin tarjeta presente.

Para comprender las reglas de cada país, consulta el documento 3DS Authentication.

Requisitos

Antes de seguir los pasos, necesitas:

  • Configurar tu Web Checkout mediante Portal o mediante API (dependiendo de tu ubicación).
  • Generar tu token siguiendo el documento de Authentication.

Payment intent con 3DS

El flujo consiste en la validación de la tarjeta, la tokenización de datos sensibles y el almacenamiento seguro.

Una vez completado este proceso, se envía un webhook que contiene el card_id. Este identificador representa la referencia tokenizada de la tarjeta almacenada. Utilizando este identificador, el Merchant puede realizar nuevas transacciones a través del endpoint de autorización de la Regional API, proporcionando únicamente el card_id en la solicitud, sin necesidad de enviar de nuevo todos los datos de la tarjeta.

3DS actúa como una importante capa de seguridad y, por este motivo, no se recomienda desactivarlo para todos los pagos.

Para pasar por la autenticación 3DS, estos parámetros deben enviarse en el payment intent.

Endpoint
POST /payment-intent

Campos obligatorios

AtributoTipoDescripciónEjemplo
configurationsObjectConjunto de opciones de pago.—
preauthorizationBooleanIndica si es un pago de tipo preautorizado.false
card_verificationBooleanIndica si es un pago de tipo verificación de tarjeta.false
3dsBooleanIndica si es un pago de tipo 3DS.true

El siguiente bloque de código muestra los campos que deben enviarse en el payment intent endpoint.

"configurations": {
        "preauthorization": false,
        "card_verification": false,
        "3ds": true
    }

Argentina: card_verification y preauthorization no están disponibles para Argentina.

Comprender el proceso de autenticación 3DS

El emisor de la tarjeta determina dinámicamente el flujo de autenticación según la evaluación de riesgo, la marca de tarjeta y las capacidades del emisor. Después de iniciar el enrollment, la API devuelve un campo status que indica tu próxima acción.

Gestiona los tres escenarios posibles:

  1. Autenticación directa: el emisor autentica al titular de la tarjeta de inmediato (estado: Authenticated o Attempt).
  2. Challenge requerido: el emisor requiere verificación interactiva del titular de la tarjeta (estado: Pending Challenge). Elige entre renderizar una plantilla HTML o realizar un POST manual usando los datos de ACS Direct Form.
  3. Pending Enrollment Continue: el emisor requiere procesamiento adicional antes de llegar a un estado final (estado: Pending Enrollment Continue). Este paso puede finalizar en autenticación o en un challenge.

Referencia rápida: flujo de decisión

Sigue esta lógica de decisión según el status devuelto por la API:

Después del Paso 2 (Iniciar Enrollment):


Pasos de implementación

Paso 1: Obtener Access Token y tokenizar la tarjeta

  1. Solicita un access token usando tus credenciales de API.
  2. Tokeniza la información de la tarjeta usando el token endpoint.

Paso 2: Iniciar Enrollment

Llama al endpoint 3DS - Init Authentication. Incluye el objeto extra_fields con la dirección de facturación, la dirección de envío, los detalles del navegador y la información del cliente, para respaldar una evaluación de riesgo precisa.

curl --request POST \
  --url https://api-sbx.globalgetnet.com/dpm/security-gwproxy/v2/enrolments-initial \
  --header 'authorization: Bearer ' \
  --header 'content-type: application/json' \
  --data '{
  "currency": "CLP",
  "md": "NmQyZTQzODAtZDhhMy00Y2NiLTkxMzgtYzI4OTE4MjgxOGE0",
  "term_url": "123",
  "amount": 1,
  "payment_method": {
    "expiration_month": "05",
    "expiration_year": "25",
    "security_code": "282",
    "number_token": "4292b573ea94b257dcb132afe242b4a15c9866d16e2d4d64d8e571c877af0540c3946b8bddaf37c2c75a1810863fc6b0fe0e841ebbc752c1d23ccfb5fdaac3d1"
  },
  "description": "TEST",
  "operation": "CREDIT",
  "extra_fields": {
    "billing_address": {
      "street": "Av. Brasil",
      "number": "1000",
      "complement": "Sala 1",
      "district": "São Geraldo",
      "city": "Porto Alegre",
      "state": "RS",
      "country": "BR",
      "postal_code": "90230060",
      "reference": "Near the hospital"
    },
    "shipping_address": {
      "street": "Av. Brasil",
      "number": "1000",
      "complement": "Sala 1",
      "district": "São Geraldo",
      "city": "Porto Alegre",
      "state": "RS",
      "country": "BR",
      "postal_code": "90230060",
      "reference": "Near the hospital"
    }
  }
}'

Ejemplo de respuesta (Pending Challenge):

{
  "transaction_id": "84c05897-fbf1-4a91-90e8-d292a0fda1c8",
  "status": "Pending Challenge",
  "protocol": "3DS2.3.1",
  "redirect_html_template": "<html>...</html>",
  "acs_redirect_form": {
    "action_url": "https://3ds-acs.test.modirum.com/mdpayacs/creq;token=368800071.1773147207.lksz3Q5MLGPuP5RsNmoU_8831PDCBLY_ABFB5xq0wtc",
    "method": "POST",
    "creq": "ewogICAgImFjc1RyYW5zSUQiOiAiNjVhMWUxN2MtZWVmYS00NGU1LTgyMDEtMDI4MjM5ZTVmOTA3IiwKICAgICJjaGFsbGVuZ2VXaW5kb3dTaXplIjogIjAzIiwKICAgICJtZXNzYWdlVHlwZSI6ICJDUmVxIiwKICAgICJtZXNzYWdlVmVyc2lvbiI6ICIyLjMuMSIsCiAgICAidGhyZWVEU1NlcnZlclRyYW5zSUQiOiAiZjI0ZmZhMWItMWY5MC01ZjMxLTgwMDAtMDAwMDAyYmY4Yjc3Igp9",
    "threeDSSessionData": "NmQyZTQzODAtZDhhMy00Y2NiLTkxMzgtYzI4OTE4MjgxOGE0"
  }
}

Paso 3: Comprobar el estado y seguir el escenario correspondiente

Status: Authenticated o Attempt

Extrae los datos de autenticación (xid, eci, cavv, ds_trans_id) y continúa con Paso 4: Crear el pago.

Status: Pending Challenge

Redirige al cliente a su banco para la autenticación. Elige uno de los siguientes métodos de redirección:

Opción A: plantilla HTML

Extrae y renderiza el redirect_html_template directamente en tu aplicación. La plantilla contiene un formulario autoenviable que redirige automáticamente al cliente a la página de autenticación de su banco.

Ejemplo — renderizar la plantilla HTML del lado del cliente:

<!-- In your frontend application -->
<div id="challenge-container"></div>
<script>
// Receive the redirect_html_template from your backend
const redirectHtmlTemplate = response.redirect_html_template;
// Inject the HTML into your page
document.getElementById('challenge-container').innerHTML = redirectHtmlTemplate;
// The template contains a form that will automatically submit and redirect
// the customer to their bank's authentication page
</script>

Ejemplo — renderizar la plantilla HTML del lado del servidor:

// Node.js/Express example
app.post('/initiate-3ds', async (req, res) => {
  const enrollmentResponse = await fetch('https://api-sbx.globalgetnet.com/dpm/security-gwproxy/v2/enrolments-initial', {
    // ... request configuration
  });
  const data = await enrollmentResponse.json();
  if (data.status === 'Pending Challenge') {
    // Send the HTML template directly to the browser
    res.send(data.redirect_html_template);
  }
});

Opción B: ACS Direct Form

Usa el objeto acs_redirect_form para realizar una solicitud POST manual desde el navegador del cliente. Este método es preferible porque evita scripts de terceros y te permite mostrar una interfaz de carga personalizada durante la redirección.

Detalles requeridos del POST:

  • URL: usa el valor action_url de la respuesta.
  • Método: POST
  • Content-Type: application/x-www-form-urlencoded
  • Body: incluye creq y threeDSSessionData.

Ejemplo — redirección manual con POST:

<div id="loader">Redirecting to secure bank authentication...</div>

<form id="acs-direct-form" method="POST" action="https://3ds-acs.test.modirum.com/mdpayacs/creq;token=368800071.1773147207.lksz3Q5MLGPuP5RsNmoU_8831PDCBLY_ABFB5xq0wtc">
  <input type="hidden" name="creq" value="ewogICAgImFjc1RyYW5zSUQiOiAiNjVhMWUxN2MtZWVmYS00NGU1LTgyMDEtMDI4MjM5ZTVmOTA3IiwKICAgICJjaGFsbGVuZ2VXaW5kb3dTaXplIjogIjAzIiwKICAgICJtZXNzYWdlVHlwZSI6ICJDUmVxIiwKICAgICJtZXNzYWdlVmVyc2lvbiI6ICIyLjMuMSIsCiAgICAidGhyZWVEU1NlcnZlclRyYW5zSUQiOiAiZjI0ZmZhMWItMWY5MC01ZjMxLTgwMDAtMDAwMDAyYmY4Yjc3Igp9" />
  <input type="hidden" name="threeDSSessionData" value="NmQyZTQzODAtZDhhMy00Y2NiLTkxMzgtYzI4OTE4MjgxOGE0" />
</form>

<script>
  // Programmatically submit the form
  document.getElementById('acs-direct-form').submit();
</script>

Status: Pending Enrollment Continue

Continúa con Paso 3C: Continuar enrollment antes de gestionar cualquier estado posterior.

Paso 3B: Validar autenticación

Después de que el cliente complete el challenge y el navegador redirija de vuelta a tu sitio, captura el token CRES del callback y llama al endpoint 3DS - Validate Authentication. Envía el token junto con el transaction_id y el xid de la respuesta del enrollment.

Ejemplo de solicitud:

curl --request POST \
  --url https://api-sbx.globalgetnet.com/dpm/security-gwproxy/v2/validations \
  --header 'authorization: Bearer <your-token>' \
  --header 'content-type: application/json' \
  --data '{
  "transaction_id": "502040201060404060506040",
  "xid": "VDdnR0kyU1g4ZXlxMkhWTlp0VnA=",
  "token": "<cres-token-from-challenge-callback>"
}'

Paso 3C: Continuar enrollment

Si el enrollment inicial devuelve Pending Enrollment Continue, llama al endpoint 3DS - Continue Enrollment con el transaction_id del Paso 2. La respuesta sigue la misma lógica de estado que el enrollment inicial y puede devolver Pending Challenge o Authenticated.

Si la respuesta devuelve Pending Challenge, redirige al cliente usando la Opción A o la Opción B, luego llama a Paso 3B: Validar autenticación.

Ejemplo de respuesta (estado Pending Challenge):

{
  "transaction_id": "84c05897-fbf1-4a91-90e8-d292a0fda1c8",
  "status": "Pending Challenge",
  "protocol": "3DS2.3.1",
  "acs_redirect_form": {
    "action_url": "https://3ds-acs.test.modirum.com/mdpayacs/creq;token=368800071.1773147207.lksz3Q5MLGPuP5RsNmoU_8831PDCBLY_ABFB5xq0wtc",
    "method": "POST",
    "creq": "ewogICAgImFjc1RyYW5zSUQiOiAiNjVhMWUxN2MtZWVmYS00NGU1LTgyMDEtMDI4MjM5ZTVmOTA3IiwKICAgICJjaGFsbGVuZ2VXaW5kb3dTaXplIjogIjAzIiwKICAgICJtZXNzYWdlVHlwZSI6ICJDUmVxIiwKICAgICJtZXNzYWdlVmVyc2lvbiI6ICIyLjMuMSIsCiAgICAidGhyZWVEU1NlcnZlclRyYW5zSUQiOiAiZjI0ZmZhMWItMWY5MC01ZjMxLTgwMDAtMDAwMDAyYmY4Yjc3Igp9",
    "threeDSSessionData": "NmQyZTQzODAtZDhhMy00Y2NiLTkxMzgtYzI4OTE4MjgxOGE0"
  }
}

Paso 4: Crear el pago

Una vez que se complete la autenticación (Authenticated o Attempt), llama al endpoint Create - Authorize. Incluye los datos de autenticación (xid, eci, cavv, ds_trans_id) en el objeto payment.

Requisitos específicos por país: algunos mercados pueden requerir campos obligatorios adicionales. En Uruguay debes incluir un array rates con la clave iva. Envía regional_regulation_code solo cuando la transacción califique para una regulación regional o un beneficio fiscal. Cada entrada tiene un code (17934 o 19210) y un invoice opcional de hasta 9 caracteres alfanuméricos. Cuando omites el invoice, Getnet lo obtiene de tu order_id. Consulta la referencia Taxes and Regulations para más información.

Ejemplo de solicitud:

curl --request POST \
  --url https://api-sbx.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
  --header 'authorization: Bearer '\
  --header 'content-type: application/json' \
  --header 'x-seller-id: 54f88e68-7764-4e87-8830-756b1e2c02f8' \
  --data '{
    "order_id": "123order",
    "data": {
      "amount": 118708,
      "currency": "CLP",
      "payment": {
        "payment_method": "CREDIT_AUTHORIZATION",
        "xid": "VDdnR0kyU1g4ZXlxMkhWTlp0VnA=",
        "eci": "24",
        "ds_trans_id": "f7e5f76e-6388-43e6-b8cd-49b251a1f89c",
        "card": { ... }
      }
    }
  }'

Integración con Europa

El flujo 3DS para el tenant santander con country: ES sigue el mismo ciclo de vida que el flujo genérico, pero con comportamientos específicos en cada etapa. Esta sección documenta el flujo lineal completo.

Identificadores clave

CampoValor
Tenantsantander
PaísES
MonedaEUR
Protocolo 3DS2.1.0
Proveedor ACSRedsys (sis-d.redsys.es)

Encabezados requeridos

Todas las solicitudes del flujo de España requieren los siguientes encabezados adicionales:

EncabezadoValor
x-seller-idTu UUID de seller
tenantsantander
countryES
x-operation-typecard

Paso 1: Iniciar Enrollment

Llama a POST /v2/enrolments-initial con los encabezados específicos de España. Incluye el objeto extra_fields con los detalles del cliente, la dirección de facturación, la dirección de envío y el navegador.

curl --request POST \
  --url https://api-sbx.globalgetnet.com/dpm/security-gwproxy/v2/enrolments-initial \
  --header 'accept: application/json' \
  --header 'authorization: Bearer <your-token>' \
  --header 'x-seller-id: <your-seller-id>' \
  --header 'tenant: santander' \
  --header 'country: ES' \
  --header 'content-type: application/json' \
  --header 'x-operation-type: card' \
  --data '{
    "currency": "EUR",
    "amount": 400,
    "term_url": "https://your-domain.com/3ds/callback",
    "payment_method": {
      "number": "4548814479727229",
      "security_code": "123",
      "expiration_month": "12",
      "expiration_year": "49",
      "payment_method": "CREDIT",
      "credentials_on_file_type": "ONE_CLICK"
    },
    "description": "3ds unified",
    "extra_fields": {
      "customer": {
        "email": "[email protected]",
        "document_number": "12345678Z",
        "document_type": "dni",
        "name": "Sra. Carmen López",
        "phone_number": "34612345678"
      },
      "billing_address": {
        "street": "Calle Gran Vía",
        "number": "28",
        "complement": "Piso 3, Puerta A",
        "district": "Centro",
        "city": "Madrid",
        "state": "Madrid",
        "country": "ES",
        "postal_code": "28013",
        "reference": "Near Callao metro station"
      },
      "shipping_address": {
        "street": "Calle Gran Vía",
        "number": "28",
        "complement": "Piso 3, Puerta A",
        "district": "Centro",
        "city": "Madrid",
        "state": "Madrid",
        "country": "ES",
        "postal_code": "28013",
        "reference": "Near Callao metro station"
      },
      "browser_details": {
        "ip": "1.1.1.1",
        "accept_header": "application/json,application/x-www-form-urlencoded",
        "java_enabled": "false",
        "java_script_enabled": "true",
        "language": "es",
        "color_depth": "24",
        "screen_height": "600",
        "screen_width": "800",
        "time_zone": "52",
        "user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
      }
    }
  }'

Ejemplo de respuesta (Attempt):

{
  "transaction_id": "526618589740",
  "protocol": "2.1.0",
  "status": "Attempt",
  "eci": 0,
  "acs_redirect_form": {
    "method": "POST",
    "creq": "11cf1933-8798-4280-bd92-e8120fe1944e"
  }
}

Importante — estado Attempt en España: siempre continúa con el Paso 2 (Continue Enrollment) cuando recibas Attempt. No lo trates como una autenticación completa. El paso de continuación puede revelar un estado Pending Challenge o Authenticated. Guarda el transaction_id; lo necesitas para todos los pasos siguientes.

El valor acs_redirect_form.creq de esta respuesta es una referencia de transacción del servidor, usada internamente para continuar el flujo. No lo uses para redirigir al cliente — los datos reales de redirección del ACS se devuelven en la respuesta de Continue Enrollment.

La respuesta también puede devolver directamente Pending Enrollment Continue o Authenticated.

Paso 2: Continuar Enrollment

Envía el transaction_id del Paso 1 a POST /v2/enrolments-continue. Incluye los mismos encabezados específicos de España. La respuesta sigue la misma lógica de estado que el flujo genérico y puede devolver Pending Challenge o Authenticated.

curl --request POST \
  --url https://api-sbx.globalgetnet.com/dpm/security-gwproxy/v2/enrolments-continue \
  --header 'accept: application/json' \
  --header 'authorization: Bearer <your-token>' \
  --header 'x-seller-id: <your-seller-id>' \
  --header 'tenant: santander' \
  --header 'country: ES' \
  --header 'content-type: application/json' \
  --data '{
    "transaction_id": "526618589740"
  }'

Ejemplo de respuesta (Pending Challenge):

{
  "status": "Pending Challenge",
  "redirect_html_template": "<html lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\">...</html>",
  "eci": 0,
  "acs_redirect_form": {
    "action_url": "https://sis-d.redsys.es/sis-simulador-web/authenticationRequest.jsp",
    "method": "POST",
    "creq": "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjExY2YxOTMzLTg3OTgtNDI4MC1iZDkyLWU4MTIwZmUxOTQ0ZSIsImFjc1RyYW5zSUQiOiI1Zjg1YjVmZi04Y2Q5LTQwOWQtOWZlOS1iNjMwZDllMzYwMjYiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjA1In0"
  }
}

Redirige al cliente al ACS usando cualquiera de los dos métodos:

Opción A: plantilla HTML — inyecta el redirect_html_template en tu página. La plantilla es un formulario autoenviable que redirige automáticamente al cliente a la página de challenge de Redsys.

Opción B: ACS Direct Form — construye un formulario POST usando los datos de acs_redirect_form. El formulario requiere únicamente el campo creq — no incluyas threeDSSessionData.

<div id="loader">Redirecting to Redsys secure authentication...</div>

<form id="acs-direct-form" method="POST" action="https://sis-d.redsys.es/sis-simulador-web/authenticationRequest.jsp" enctype="application/x-www-form-urlencoded">
  <input type="hidden" name="creq" value="eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6IjExY2YxOTMzLTg3OTgtNDI4MC1iZDkyLWU4MTIwZmUxOTQ0ZSIsImFjc1RyYW5zSUQiOiI1Zjg1YjVmZi04Y2Q5LTQwOWQtOWZlOS1iNjMwZDllMzYwMjYiLCJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjA1In0" />
</form>

<script>
  document.getElementById('acs-direct-form').submit();
</script>

Diferencia clave respecto al flujo genérico: el formulario ACS requiere únicamente creq. El flujo genérico requiere tanto creq como threeDSSessionData.

Paso 3: Validar autenticación

Después de que el cliente complete el challenge, el ACS redirige de vuelta a tu term_url con un token CRES. Captura este token y llama a POST /v2/validations. Envía el CRES en el campo token.

curl --request POST \
  --url https://api-sbx.globalgetnet.com/dpm/security-gwproxy/v2/validations \
  --header 'accept: application/json' \
  --header 'authorization: Bearer <your-token>' \
  --header 'x-seller-id: <your-seller-id>' \
  --header 'tenant: santander' \
  --header 'country: ES' \
  --header 'content-type: application/json' \
  --header 'x-operation-type: card' \
  --data '{
    "token": "eyJ0aHJlZURTU2VydmVyVHJhbnNJRCI6ImU5MGVhYzlmLWM2OWYtNDAyNS05MzE2LTQ4ZGI5YzcwNzY0MyIsImFjc1RyYW5zSUQiOiJlODY0NzNlYS1iMGRmLTRkNzktOTdmZi0xN2E1NmY1YWM1MDAiLCJtZXNzYWdlVHlwZSI6IkNSZXMiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMi4wIiwidHJhbnNTdGF0dXMiOiJZIn0="
  }'

Ejemplo de respuesta (Authenticated):

{
  "tx_id": "e86473ea-b0df-4d79-97ff-17a56f5ac500",
  "status": "Authenticated",
  "ds_trans_id": "e90eac9f-c69f-4025-9316-48db9c707643"
}

la respuesta de validación devuelve tx_id, status y ds_trans_id. No incluye todos los campos presentes en la respuesta genérica (como xid o cavv), pero los valores de estado siguen la misma convención.

Paso 4: Crear el pago

Una vez que el flujo 3DS llegue a Authenticated, llama a POST /v2/payments para cobrar la tarjeta.

Requisitos específicos de España:

  1. Establece order_id con el transaction_id devuelto por el proceso de enrollment 3DS, no con un ID de orden personalizado.
  2. Incluye el campo cres en el objeto payment. Para transacciones de ES, solo se requiere cres para la autorización 3DS; no incluyas xid, cavv ni eci.
curl --request POST \
  --url https://api-sbx.globalgetnet.com/dpm/payments-gwproxy/v2/payments \
  --header 'content-type: application/json' \
  --header 'authorization: Bearer <your-token>' \
  --header 'x-seller-id: <your-seller-id>' \
  --header 'country: ES' \
  --header 'tenant: santander' \
  --data '{
    "idempotency_key": "91d5f349-8256-4929-a468-7a2c97e68978",
    "request_id": "cf779372-082f-4d13-ad74-35ad0b93d9c5",
    "order_id": "526618589740",
    "data": {
      "amount": 400,
      "currency": "EUR",
      "customer_id": "913f3f9d-7060-4639-af6d-331b658668d4",
      "payment": {
        "payment_id": "6456ef10-55ce-415f-aa82-39336a5d572d",
        "payment_method": "CREDIT",
        "save_card_data": false,
        "transaction_type": "FULL",
        "number_installments": 1,
        "dynamic_mcc": "1234",
        "credentials_on_file_type": "ONE_CLICK",
        "cres": "<cres-token-from-redsys-callback>",
        "card": {
          "number": "4548810000000003",
          "expiration_month": "12",
          "expiration_year": "49",
          "cardholder_name": "Sra. Carmen López",
          "security_code": "123"
        }
      },
      "additional_data": {
        "order": {
          "items": [
            {
              "name": "Producto Electrónico",
              "quantity": 1,
              "sku": "SKU-ES-001",
              "price": 400.00
            }
          ]
        },
        "customer": {
          "email": "[email protected]",
          "document_number": "12345678Z",
          "document_type": "dni",
          "name": "Sra. Carmen López",
          "phone_number": "34612345678",
          "billing_address": {
            "street": "Calle Gran Vía",
            "number": "28",
            "complement": "Piso 3, Puerta A",
            "district": "Centro",
            "city": "Madrid",
            "state": "Madrid",
            "country": "ES",
            "postal_code": "28013",
            "reference": "Near Callao metro station"
          },
          "shippings": {
            "address": {
              "street": "Calle Gran Vía",
              "number": "28",
              "complement": "Piso 3, Puerta A",
              "district": "Centro",
              "city": "Madrid",
              "state": "Madrid",
              "country": "ES",
              "postal_code": "28013",
              "reference": "Near Callao metro station"
            },
            "name": "Sra. Carmen López",
            "phone_number": "34612345678"
          }
        }
      }
    }
  }'

Ver también

Puedes explorar más pagos de la API de Getnet Web Checkout: