ed92991872
Agent-Logs-Url: https://github.com/dsaub/proyecto-final/sessions/49df17c8-213a-4e23-adfe-465a0104f6a3 Co-authored-by: dsaub <54474838+dsaub@users.noreply.github.com>
1.9 KiB
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:
- Obtiene y valida la dirección de envío seleccionada.
- Verifica que el carrito no esté vacío y que no haya problemas de stock.
- Crea una reserva de stock atómica para bloquear el inventario.
- Construye los
line_itemscon precios IVA incluido. - Crea la sesión en Stripe con URLs de retorno y cancelación.
- 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_MINUTESminutos. Si el usuario no completa el pago en ese tiempo, el stock queda liberado automáticamente.