# Tu primer cobro

> Crea una llave de prueba, genera un link de pago y págalo en sandbox. El camino más corto para ver la API funcionando de punta a punta.

Cinco pasos hasta ver un cobro aprobado. Todo en sandbox, sin plata real.

## 1. Activa tu comercio de prueba

En el panel, entra a **Configuración → Comercio y sandbox** y registra tu comercio. Sin este paso la API responde, pero el link de pago no se puede crear: no hay a nombre de quién cobrar.

## 2. Crea una llave secreta

En **Desarrolladores → Llaves de API**, crea una llave `sk_test_…`. Se muestra una sola vez: guárdala apenas la veas. Si la pierdes, revócala y crea otra.

## 3. Crea el cobro

Un link de pago es la forma más corta de probar: no necesita carrito ni página de retorno. El monto va en centavos, así que `11900000` son $ 119.000 COP.

**Crear el link**

_cURL_

```bash
curl -X POST https://gxxazsplhgyezwxghrnn.supabase.co/functions/v1/blink-api/v1/payment_links \
  -H "Authorization: Bearer sk_test_…" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 11900000,
    "currency": "COP",
    "description": "Pedido #4821"
  }'
```

_Node_

```js
const res = await fetch("https://gxxazsplhgyezwxghrnn.supabase.co/functions/v1/blink-api/v1/payment_links", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.LANE_SECRET_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    amount: 11_900_000,        // $ 119.000 COP
    currency: "COP",
    description: "Pedido #4821",
  }),
});

const session = await res.json();
console.log(session.checkout_url);
```

_Python_

```python
import os, requests

res = requests.post(
    "https://gxxazsplhgyezwxghrnn.supabase.co/functions/v1/blink-api/v1/payment_links",
    headers={"Authorization": f"Bearer {os.environ['LANE_SECRET_KEY']}"},
    json={
        "amount": 11_900_000,   # $ 119.000 COP
        "currency": "COP",
        "description": "Pedido #4821",
    },
)

print(res.json()["checkout_url"])
```

_PHP_

```php
<?php
$ch = curl_init("https://gxxazsplhgyezwxghrnn.supabase.co/functions/v1/blink-api/v1/payment_links");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("LANE_SECRET_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "amount" => 11900000,   // $ 119.000 COP
        "currency" => "COP",
        "description" => "Pedido #4821",
    ]),
]);

$session = json_decode(curl_exec($ch), true);
echo $session["checkout_url"];
```

_Respuesta 201_

```json
{
  "id": "3f0c8a1e-…",
  "object": "checkout.session",
  "environment": "test",
  "amount": 11900000,
  "currency": "COP",
  "status": "pending",
  "checkout_url": "https://lane.money/l/a7Kd2",
  "payment": { "id": "9b41d0c7-…", "status": "pending" }
}
```

## 4. Pagalo

Abre el `checkout_url` en el navegador y paga con una tarjeta de prueba. En sandbox no se mueve plata.

| Para qué | Número | Vence | CVV |
| --- | --- | --- | --- |
| Aprobar un cobro (débito) | `4111111111111111` | 12/30 | 123 |
| Consultar un BIN de crédito | `518617` · `541333` | — | — |

> **Cuidado: La tarjeta de prueba es débito.** Sirve para aprobar un cobro, pero no para probar cuotas: el emisor puede aprobar con una sola cuota aunque pidas tres. Para [cuotas](https://lane.money/docs/guias/cuotas) necesitas una tarjeta de crédito. Y no hay tarjetas de rechazo con un número fijo: pídele a soporte los datos que fuerzan un rechazo en tu entorno.

## 5. Verificá el resultado

Consulta el cobro con el `id` que te devolvió `payment.id`. Debería estar en `succeeded`.

**Consultar el cobro**

```bash
curl "https://gxxazsplhgyezwxghrnn.supabase.co/functions/v1/blink-api/v1/payments/9b41d0c7-…" \
  -H "Authorization: Bearer sk_test_…"
```

_Respuesta 200_

```json
{
  "object": "payment",
  "id": "9b41d0c7-…",
  "amount": 11900000,
  "currency": "COP",
  "status": "succeeded",
  "payment_method": "CARD",
  "processed_at": "2026-09-06T18:22:41.000Z"
}
```

Eso es todo el ciclo. De acá en adelante, lo que cambia es cómo llega el comprador a la pantalla de pago y cómo te enterás del resultado sin preguntar.

## El siguiente paso

- [Dejá de preguntar](https://lane.money/docs/webhooks): Configura un webhook y entérate del cambio de estado en el momento.
- [Mételo en tu tienda](https://lane.money/docs/guias/checkout): El checkout devuelve al comprador a tu sitio cuando termina.
