Hosted Checkout

Inicio rápido

De cero a un pago de prueba: crea la sesión, redirige al cliente y confirma el resultado.

Hosted Checkout es la forma más rápida de cobrar: Tonder aloja la página de pago, así que nunca tocas los datos de la tarjeta. Este inicio rápido te lleva de cero a un pago de prueba verificado en cuatro pasos.

Lo que construirás: un servidor que crea una sesión de pago, redirige al cliente a Tonder y confirma el estado final cuando regresa.

Usa tus llaves API de prueba para esta guía —todos los ejemplos usan URLs del entorno de prueba. Nunca uses llaves de producción para pruebas.

Antes de empezar

  • Una cuenta de Tonder — inicia sesión en dashboard-stage.tonder.io (Sandbox).
  • Tu llave API de prueba desde Developers → API Keys.

Flujo de integración

El diagrama muestra el intercambio completo entre tu cliente, tu aplicación y Tonder. Cada paso de abajo corresponde al diagrama.

Paso 1: Crear una sesión de pago

Desde tu servidor, llama al endpoint de creación de sesión. Registra el pago con Tonder y devuelve una URL segura a la que redirigir al cliente.

CampoDescripciónEjemplo
customerDatos del cliente: nombre, apellido, email{ first_name, last_name, email }
amount_totalMonto total a cobrar, en formato decimal150.00 (para $150.00)
currencyCódigo de moneda ISO"MXN"
line_itemsProductos del carritoArreglo de { name, quantity, unit_price, product_id }
return_urlA dónde enviar al cliente tras el pago (o success_url)"https://tu-tienda.com/checkout/complete"
external_id(Opcional) Tu ID de pedido interno"ORD-001"
curl -X POST 'https://api-stage.tonder.io/checkout/v1/sessions' \
  -H 'Authorization: Token YOUR_TEST_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "customer": {
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "jane.doe@example.com"
    },
    "amount_total": 150.00,
    "currency": "MXN",
    "line_items": [
      { "name": "Producto de prueba", "quantity": 1, "unit_price": 150.00, "product_id": "your internal product id" }
    ],
    "return_url": "https://tu-tienda.com/checkout/complete",
    "external_id": "ORD-001"
  }'
curl -X POST 'https://api.tonder.io/checkout/v1/sessions' \
  -H 'Authorization: Token YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "customer": {
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "jane.doe@example.com"
    },
    "amount_total": 150.00,
    "currency": "MXN",
    "line_items": [
      { "name": "Producto de prueba", "quantity": 1, "unit_price": 150.00, "product_id": "your internal product id" }
    ],
    "return_url": "https://tu-tienda.com/checkout/complete",
    "external_id": "ORD-001"
  }'

Tonder responde con un objeto de sesión. Guarda el id (para verificar después) y la url (para redirigir):

{
  "id": "cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d",
  "url": "https://stage-payflow.tonder.io/checkout/cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d",
  "status": "pending",
  "payment_id": 41521,
  "amount_total": 150.00,
  "currency": "MXN",
  "external_id": "ORD-001",
  "transaction_status": "Pending",
  "created_at": 1751478543567
}

Paso 2: Redirigir al cliente a Tonder

Envía al cliente a la url de la respuesta —normalmente con un redirect HTTP 302:

res.redirect(data.url);

Paso 3: Completar el pago de prueba

En la página de Tonder el cliente ingresa sus datos. Tonder gestiona la verificación con el banco adquirente y 3DS automáticamente; si un pago es rechazado, el cliente puede reintentar con otra tarjeta en la misma página. Para completar un pago de prueba:

Llena el formulario con un número de tarjeta de prueba de la página de Tarjetas de prueba.

Por ejemplo, 12/30.

Por ejemplo, 123.

Tras enviarlo, Tonder procesa el pago, lo verifica con el proveedor y redirige al cliente a tu return_url (o success_url).

Paso 4: Verificar el estado del pago

Cuando el cliente regresa a tu return_url, la URL incluye el ID de la sesión:

https://tu-tienda.com/checkout/success?session_id=cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d

Usa ese session_id para llamar a Get a Session desde tu servidor. Es más fiable que asumir que el redirect significa éxito:

curl -X GET 'https://api-stage.tonder.io/checkout/v1/sessions/cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d' \
  -H 'Authorization: Token YOUR_TEST_API_KEY'
curl -X GET 'https://api.tonder.io/checkout/v1/sessions/cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d' \
  -H 'Authorization: Token YOUR_API_KEY'

Un pago completado devuelve status: "completed" con el payment_id:

{
  "id": "cs_97_41521_d11ba771527b4056c7f85786cfbb980bc105efaf42af113d",
  "status": "completed",
  "payment_id": 41521,
  "amount_total": 150.00,
  "currency": "MXN",
  "external_id": "ORD-001",
  "transaction_status": "Success",
  "paid_at": 1751478550234
}

Los webhooks son la forma más fiable de confirmar el resultado. Concilia por metadata.external_id y responde 200. Consulta Escuchar webhooks.

Siguientes pasos

¿Te resultó útil esta página?

En esta página