# Probar tu integración de plataforma

> El recorrido de una plataforma en modo de prueba en Lane: comercio de prueba, cobro, pago con los datos que el entorno aprueba, aviso por webhook y la lista para salir a cobros reales.

Todo el recorrido se prueba con una llave `sk_test_`, sin mover plata. Para salir a real cambias la llave.

## Antes de empezar

1. **Tu empresa ya es plataforma.** Si las rutas responden `403` con `not_a_platform`, falta ese paso: escríbenos.
2. **Una llave `sk_test_`** de tu empresa, creada en **Desarrolladores → Llaves de API**.
3. **Un endpoint de webhook en modo Prueba,** en **Desarrolladores → Webhooks**. Guarda su secreto `whsec_…`.
4. **Una segunda cuenta de Lane, con otro correo,** para hacer de comercio. El comercio de tu propia empresa no se conecta a tu plataforma: ese ya cobra con tus llaves.

## El recorrido

### 1. Conecta un comercio de prueba

Crea un enlace de registro y ábrelo con la segunda cuenta. Acepta la conexión, activa el comercio y espera `merchant.connected` en tu endpoint. Trae el `id` del comercio.

**Comprobar que quedó conectado**

```bash
curl https://api.lane.money/v1/platform/merchants \
  -H "Authorization: Bearer sk_test_…"
```

_Respuesta 200_

```json
{
  "object": "list",
  "has_more": false,
  "data": [
    {
      "object": "connected_merchant",
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "name": "Tienda de Ana",
      "reference": "vendedor-77",
      "status": "active",
      "can_charge": true,
      "connected_at": "2026-10-10T15:02:11.000Z",
      "disconnected_at": null
    }
  ]
}
```

### 2. Crea un cobro y págalo

Crea el cobro como en [Crear cobros](https://lane.money/docs/plataformas/cobros), abre `checkout_url` y paga. En modo de prueba no todos los datos aprueban. Estos son los que medimos:

| Medio | Con qué aprueba en pruebas | Cuánto tarda |
| --- | --- | --- |
| Bre-B | Un total de exactamente $ 15.000 COP (`1500000`). | Se aprueba solo, entre 15 segundos y 2 minutos. |
| Daviplata | El celular `+573333012306` y el código `123456`. Probado con $ 20.000 COP. | Al confirmar el código. |
| Tarjeta | La `4242 4242 4242 4242`, con cualquier fecha futura y cualquier código de tres dígitos. Probado con $ 189.900 COP. Las demás, con sus rechazos, están en [Sandbox](https://lane.money/docs/sandbox). | Al confirmar el código de seguridad te llega `payment.succeeded`. La captura llegó al día siguiente, y con ella se anotó tu parte. |

> **Nota: Lo que no hemos recorrido.** Bre-B, Daviplata y tarjeta se recorrieron completos en la página de pago, en modo de prueba, el 10 de octubre de 2026. PSE y Nequi no: dependen del simulador de cada red. Si alguno te falla en pruebas, escríbenos antes de darlo por un error tuyo.

### 3. Recibe el aviso

Verifica la firma, busca el pedido por `checkout_session_id` y márcalo pagado. El aviso sale poco después del pago: las entregas se despachan cada minuto. Si no llega, mira los intentos en **Desarrolladores → Webhooks**.

### 4. Prueba lo que sale mal

| Prueba | Qué debe pasar |
| --- | --- |
| La misma petición dos veces con la misma `Idempotency-Key` | El mismo cobro, con la cabecera `Idempotent-Replayed: true`. |
| La misma clave con otro cuerpo | `422` con `idempotency_key_reused`. |
| Un `Lane-On-Behalf-Of` que no es de un comercio tuyo | `404` con `merchant_not_connected`. |
| Un medio que el comercio no tiene | `422` con `payment_method_unavailable`. |
| Un cobro con `extra_items`, sumando uno al pagar | El aviso trae el total mayor y `extra_items`. |
| El mismo aviso entregado dos veces | Tu sistema entrega el pedido una sola vez. |

## Antes de salir a cobros reales

- **Tus condiciones están puestas.** Míralas en **Plataforma**: si tu parte está en cero, los cobros que crees no te dejan nada.
- **Tienes un endpoint de webhook en modo Real.** Los de prueba no reciben los avisos de cobros reales.
- **Cambiaste la llave por una `sk_live_`.** Nada más cambia en tu código.
- **El comercio está aprobado.** Espera `merchant.approved`, o revisa que `can_charge` sea `true` con la llave real.
- **Guardas el `id` de cada cobro** y reconoces el pedido por `checkout_session_id`.
- **Lees el total y los extras del aviso,** no los que mandaste.
- **Mandas `Idempotency-Key`** en cada cobro y en cada enlace.
- **Ninguna `sk_` quedó en un repositorio** ni en el código que corre en el navegador o en el teléfono.
