Files
proyecto-final/docs/views/create_checkout_session.md
T

1.9 KiB

create_checkout_session

Archivo: tienda/views.py
URL: /tienda/crear-sesion-pago/
Tipo: Vista privada (requiere autenticación)
Método HTTP: Solo POST
Decoradores: @login_required, @csrf_exempt

Descripción

Crea una sesión de pago en Stripe Checkout y devuelve el ID de sesión al frontend. Es llamada por JavaScript para iniciar el flujo de pago con tarjeta.

El proceso es:

  1. Obtiene y valida la dirección de envío seleccionada.
  2. Verifica que el carrito no esté vacío y que no haya problemas de stock.
  3. Crea una reserva de stock atómica para bloquear el inventario.
  4. Construye los line_items con precios IVA incluido.
  5. Crea la sesión en Stripe con URLs de retorno y cancelación.
  6. Guarda el ID de sesión, la dirección y la reserva en la sesión HTTP.

Firma

def create_checkout_session(request: HttpRequest):

Parámetros

Nombre Tipo Descripción
request HttpRequest Petición HTTP de Django.

Cuerpo de la petición (JSON o form-data)

Campo Descripción
shipping_address_id ID de la dirección de envío seleccionada.

Respuesta exitosa

{ "sessionId": "cs_live_..." }

Respuestas de error

Código Descripción
400 Carrito vacío, stock insuficiente, sin dirección.
405 Método no permitido.
500 Error interno al crear la sesión en Stripe.

Important

La reserva de stock creada expira en STOCK_RESERVATION_MINUTES minutos. Si el usuario no completa el pago en ese tiempo, el stock queda liberado automáticamente.