> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fintoc.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Página de redirección

> >-

Cuando tus clientes eligen pagar con Fintoc, el proceso funciona de la siguiente manera:

1. **Creación de la Checkout Session:** tu backend llama a nuestra API para crear una Checkout Session. Debes incluir un `success_url` y un `cancel_url` en tu solicitud.
2. **Recepción del Redirect URL:** nuestra API responde con una sesión que contiene un `redirect_url`. Esta URL se usa para enviar a tu cliente a nuestra página de pago segura.
3. **Flujo de pago del cliente:** tu cliente es redirigido a nuestra página de pago, donde completa su pago en el Widget de Fintoc.
4. **Flujo de retorno:** después del pago, tu cliente es enviado automáticamente de vuelta a tu sitio a través del `success_url` o `cancel_url` proporcionado.

***

## Crear una Checkout Session

Usando tu Secret Key, crea una `Checkout Session` en tu servidor con el `success_url` y `cancel_url`:

```curl theme={null}
curl --request POST \
     --url https://api.fintoc.com/v1/checkout_sessions \
     --header 'Authorization: YOUR_TEST_SECRET_API_KEY' \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data-raw 
'{
  "amount": 1000,
  "currency": "CLP",
  "cancel_url": "https://merchant.com/987654321",
  "success_url": "https://merchant.com/success",
  "customer_email": "customer@example.com",
  "metadata": {
      "order": "987654321"
    }
}'
```

```node Node theme={null}
// Primero debes instalar el SDK de Node de Fintoc: https://docs.fintoc.com/docs/accept-a-payment-copy#optional-install-our-backend-sdk

const checkoutSession = await fintoc.checkoutSessions.create({
	amount: 1000,
  currency: 'clp',
  customer_email: 'name@example.com',
  cancel_url: 'https://merchant.com/987654321',
  success_url: 'https://merchant.com/success',
  metadata: {
    order: '987654321'
  }
});
```

```python Python theme={null}
# Primero debes instalar el SDK de Python de Fintoc: https://docs.fintoc.com/docs/accept-a-payment-copy#optional-install-our-backend-sdk

checkout_session = client.checkout_sessions.create(
    amount=1000,
    currency='clp',
    customer_email='name@example.com',
    cancel_url='https://merchant.com/987654321',
    success_url='https://merchant.com/success',
    metadata={
        order: '987654321'
    }
)
```

| Parámetro        | Ejemplo                          | Explicación                                                                                                                                                                                                                                                                                       |
| ---------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `amount`         | `2476`                           | Monto de dinero que debe ser pagado. Se representa **como un entero sin decimales** en la unidad más pequeña posible de la moneda que estés usando.<br /><br />Un monto de MXN 24.76 se representa como 2476.<br /><br />Para pagos en efectivo, el monto máximo permitido es 500000 (5,000 MXN). |
| `currency`       | `MXN`                            | Moneda que se está usando para el pago. Actualmente solo soportamos MXN para pagos en efectivo.                                                                                                                                                                                                   |
| `success_url`    | `https://merchant.com/success`   | URL para redirigir al usuario en caso de pago exitoso.                                                                                                                                                                                                                                            |
| `cancel_url`     | `https://merchant.com/987654321` | URL para redirigir al usuario en caso de que decida cancelar el pago y volver a tu sitio web.                                                                                                                                                                                                     |
| `customer_email` | `customer@example.com`           | Correo de cliente opcional vinculado a una Checkout Session. Se usa para notificar al usuario en caso de un reembolso.                                                                                                                                                                            |
| `metadata`       | `{"order": "987654321"}`         | Conjunto opcional de pares clave-valor que puedes adjuntar a un objeto. Esto puede ser útil para almacenar información adicional sobre el objeto en un formato estructurado.                                                                                                                      |

### Manejo de la respuesta de la API

Después de crear la checkout session, recibirás una respuesta que incluye un `redirect_url` junto con otros parámetros importantes. Por ejemplo:

```json theme={null}
{
  "id": "cs_li5531onlFDi235",
  "created_at": "2025-02-06T18:42:51Z",
  "object": "checkout_session",
  "currency":"CLP",
  "amount": "1000",
  "customer_email":"customer@example.com",
  "expires_at": "2025-02-06T18:52:51Z",
  "mode": "live",
  "status":"created",
  "session_token": "cs_li5531onlFDi235_sec_a4xK32BanKWYn",
  "cancel_url": "https://merchant.com/987654321",
  "success_url": "https://merchant.com/success",
  "metadata": {
      "order": "987654321"
    },
  "business_profile": {},
  "redirect_url": "https://pay.fintoc.com/payment?checkout_sesion=cs_li5531onlFDi235"
}
```

### **Manejo de eventos post-pago**

Fintoc envía un evento `checkout_session.completed` cuando el pago está completo. Usa la [**guía de webhooks**](/es/docs/resources/webhooks-walkthrough) para recibir estos eventos y ejecutar acciones, como enviar un correo de confirmación de orden a tu cliente, registrar la venta en una base de datos o iniciar un flujo de envío.

Escucha estos eventos en lugar de esperar un callback del cliente. Desde el lado del cliente, el cliente podría cerrar la ventana del navegador o salir de la app antes de que se ejecute el callback, y los clientes maliciosos podrían manipular la respuesta.

Recomendamos manejar los siguientes eventos:

| **Evento**                      | **Descripción**                                                                                                              | **Acción**                                                                                                     |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| **`checkout_session.finished`** | Se envía cuando un cliente ha completado un pago. El webhook contiene información sobre el pago, incluyendo su estado final. | Dependiendo del estado final del pago relacionado, confirma la orden al cliente u ofrécele reintentar el pago. |
| **`checkout_session.expired`**  | Se dispara cuando un cliente abandona el flujo de pago antes de terminar.                                                    | Ofrece al cliente otro intento de pagar.                                                                       |

<Info>
  **Aprende más sobre webhooks**

  Para aprender más sobre cómo crear tu propio endpoint de webhook, probar tu endpoint de webhook y las mejores prácticas de seguridad, lee nuestra [**guía de Webhooks**](/es/docs/resources/webhooks-walkthrough).
</Info>
