Domina Cursor, el editor de código con IA que multiplica tu productividad como desarrollador.

0 de 35 lecciones completas (0%)

PROYECTO: TIENDA DE LIBROS ELECTRÓNICOS FULL STACK

Integración de Pagos con Stripe

Introducción

En esta lección implementaremos la integración de pagos que permite a los usuarios comprar libros utilizando Stripe como pasarela de pago. Aprenderemos a configurar Stripe, crear transacciones y manejar el flujo completo de pagos.

1. Configuración de Cuenta Stripe

Creación y Configuración Inicial

  1. Crear cuenta en Stripe: Visitar stripe.com y registrarse
  2. Acceder al dashboard después del login
  3. Nota importante: La interfaz puede cambiar con el tiempo

Modos de Operación

  • Modo Test: Para desarrollo y pruebas (usaremos este)
  • Modo Live: Para transacciones reales
    • Requiere verificaciones adicionales
    • Solo activar cuando esté listo para producción

2. Comprensión del Flujo de Pago

Análisis del Sistema

Antes de implementar, es importante entender:

  • Usuario quiere comprar un Libro
  • Modelos involucrados: User, Book, Transaction
  • Proceso: Inicializar → Confirmar → Completar

Flujo Básico de Transacción

  1. Usuario selecciona libro para comprar
  2. Sistema crea intención de pago en Stripe
  3. Cliente recibe secreto para procesar pago
  4. Usuario completa pago en el frontend
  5. Sistema confirma transacción

3. Implementación del Controlador

Preparación del Proyecto

Primero, identificamos los archivos necesarios:

  • Modelo Transaction: Define estructura de transacciones
  • Modelo User: Información del comprador
  • Modelo Book: Detalles del producto a comprar

Generación con IA

prompt// Prompt para el asistente IA
Implementa el controlador de transacciones basado en:
- Modelo Transaction
- Modelo User  
- Modelo Book
- Usar NPM package de Stripe
- Crear endpoints para inicializar y confirmar pagos

4. Estructura del Controlador de Transacciones

Endpoints Principales

El controlador debe incluir:

  1. Inicializar Transacción (POST /transactions/initiate)
    • Crea payment intent en Stripe
    • Guarda transacción en base de datos
    • Retorna client_secret
  2. Confirmar Transacción (POST /transactions/confirm)
    • Verifica pago con Stripe
    • Actualiza estado de transacción
    • Procesa entrega del producto
  3. Obtener Transacciones del Usuario (GET /transactions/user)
    • Lista transacciones del usuario autenticado
  4. Obtener Transacción Específica (GET /transactions/:id)
    • Detalles de una transacción particular

5. Configuración de Variables de Entorno

Obtener Clave Secreta de Stripe

  1. Ir al dashboard de Stripe
  2. Hacer clic en «Developers»
  3. Seleccionar «API Keys»
  4. Copiar «Secret key» (empieza con sk_test_...)

Configurar .env

envSTRIPE_SECRET_KEY=sk_test_tu_clave_secreta_aqui

Importante: Reiniciar el servidor después de agregar variables de entorno.

6. Configuración de Rutas

Agregar Rutas al Servidor

Asegurar que las rutas estén registradas en server.js:

javascript// server.js
app.use('/api/transactions', transactionRoutes);

Archivo de Documentación

Crear transaction-endpoints.md con la documentación completa:

markdown## Endpoints de Transacciones

### Inicializar Transacción
- **URL**: `POST /api/transactions/initiate`
- **Body**: `{ "bookId": "id_del_libro" }`
- **Headers**: `Authorization: Bearer token`

### Confirmar Transacción  
- **URL**: `POST /api/transactions/confirm`
- **Body**: `{ "transactionId": "id_transaccion" }`

7. Pruebas con Postman

Configuración de Colección

  1. Crear nueva colección: «Transacciones»
  2. Agregar carpeta: «Payment Integration»

Prueba de Inicialización

  1. Crear petición: «Inicializar Transacción»
  2. Método: POST
  3. URL: http://localhost:3000/api/transactions/initiate
  4. Headers: Authorization: Bearer tu_token_jwt Content-Type: application/json
  5. Body: json{ "bookId": "id_del_libro_a_comprar" }

8. Solución de Problemas Comunes

Error: «Cannot find auth modules»

Causa: Problema en las rutas de autenticación Solución: Verificar importaciones en transactionRoutes.js

Error: «Token is not valid»

Causa: Token JWT inválido o expirado Solución: Generar nuevo token con login

Error: «Payment method is required»

Causa: Configuración incorrecta del payment intent Solución: Revisar parámetros enviados a Stripe

Debugging con Logs

javascript// Agregar en el controlador para debug
console.log('Payment Intent:', paymentIntent);
console.log('Transaction data:', transactionData);

9. Respuesta Exitosa

Estructura de Respuesta

Una inicialización exitosa retorna:

json{
  "success": true,
  "clientSecret": "pi_xxx_secret_xxx",
  "transactionId": "64f2a1b5c8d4e5f6a7b8c9d0",
  "amount": 999,
  "currency": "usd"
}

Uso del Client Secret

  • Frontend utiliza clientSecret para procesar pago
  • Stripe Elements requiere este valor
  • No almacenar en el frontend por seguridad

10. Estados de Transacción

Flujo de Estados

  1. pending: Transacción creada, esperando pago
  2. processing: Pago en proceso
  3. completed: Pago exitoso
  4. failed: Pago falló
  5. cancelled: Transacción cancelada

Manejo en Base de Datos

javascript// Ejemplo de actualización de estado
await Transaction.findByIdAndUpdate(transactionId, {
  status: 'completed',
  paidAt: new Date(),
  stripePaymentIntentId: paymentIntent.id
});

11. Seguridad y Mejores Prácticas

Validaciones Importantes

  • Verificar autenticación del usuario
  • Validar existencia del libro
  • Verificar disponibilidad del producto
  • Confirmar montos antes de procesar

Manejo de Errores

javascripttry {
  const paymentIntent = await stripe.paymentIntents.create({
    amount: book.price * 100, // Stripe usa centavos
    currency: 'usd',
    metadata: { bookId: book._id }
  });
} catch (error) {
  return res.status(500).json({
    error: 'Error al procesar pago',
    details: error.message
  });
}

12. Próximos Pasos

Frontend Integration

Con el backend completado:

  • Usar client_secret en React/Vue/Angular
  • Implementar Stripe Elements para formulario de pago
  • Manejar confirmación de pagos
  • Mostrar estado de transacciones

Testing

  • Usar tarjetas de prueba de Stripe
  • Probar diferentes escenarios (éxito, fallo, etc.)
  • Validar webhooks en producción

Conclusión

Hemos implementado exitosamente:

  • Configuración completa de Stripe
  • Controlador de transacciones funcional
  • Endpoints para inicializar y confirmar pagos
  • Manejo de errores y validaciones
  • Sistema de estados de transacción

La integración de pagos está lista para conectarse con el frontend y procesar transacciones reales. El sistema es seguro, escalable y sigue las mejores prácticas de Stripe.

Resumen de privacidad
Logo JeroCuevas.com

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies de terceros

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.