- Added Stripe environment variables to docker-compose.yml for secret key, webhook secret, and base URL. - Created PAYMENTS.md to document the setup and usage of the Stripe payment system. - Updated webhook signature handling in stripe.js to use a new secret key. Signed-off-by: Omar Sánchez Pizarro <omar.sanchez@pistacero.net>
7.2 KiB
Sistema de Pagos con Stripe
Este documento explica cómo configurar y usar el sistema de pagos integrado con Stripe en Wallabicher.
Configuración
1. Crear cuenta de Stripe
- Visita https://stripe.com y crea una cuenta
- Accede al Dashboard de Stripe
- Obtén tus claves API desde: Developers → API keys
2. Configurar variables de entorno
Crea un archivo .env en /web/backend/ con las siguientes variables:
# Stripe Configuration
STRIPE_SECRET_KEY=sk_test_xxxxx # Tu clave secreta de Stripe
STRIPE_WEBHOOK_SECRET=whsec_xxxxx # Secret del webhook (ver paso 3)
BASE_URL=http://localhost # URL base de tu aplicación
3. Configurar Webhooks de Stripe
Los webhooks son necesarios para que Stripe notifique a tu aplicación sobre eventos de pago:
- Ve a Developers → Webhooks en el Dashboard de Stripe
- Haz clic en "Add endpoint"
- URL del endpoint:
https://tu-dominio.com/api/payments/webhook - Selecciona los siguientes eventos:
checkout.session.completedcustomer.subscription.updatedcustomer.subscription.deletedinvoice.payment_succeededinvoice.payment_failed
- Copia el "Signing secret" (whsec_xxxxx) y agrégalo a
STRIPE_WEBHOOK_SECRET
4. Configurar productos y precios en Stripe (Opcional)
El sistema crea automáticamente los productos y precios en Stripe si no existen, pero puedes crearlos manualmente:
Productos:
- Wallabicher Básico
- Wallabicher Pro
- Wallabicher Enterprise
Precios:
- Cada producto debe tener precios mensual y anual
- Los
lookup_keydeben seguir el formato:{planId}_{billingPeriod}(ej:basic_monthly,pro_yearly)
5. Actualizar Docker Compose
Descomenta las variables de Stripe en docker-compose.yml:
environment:
- STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY}
- STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET}
- BASE_URL=${BASE_URL:-http://localhost}
Luego crea un archivo .env en la raíz del proyecto:
STRIPE_SECRET_KEY=sk_test_xxxxx
STRIPE_WEBHOOK_SECRET=whsec_xxxxx
BASE_URL=https://tu-dominio.com
Flujo de registro y pago
1. Registro de usuario
Los usuarios pueden registrarse desde la landing page o directamente en /dashboard/register:
- Usuario selecciona un plan
- Completa el formulario de registro (usuario, email, contraseña)
- Si es plan gratuito:
- Se crea la cuenta inmediatamente
- Redirige al dashboard
- Si es plan de pago:
- Se crea la cuenta
- Se inicia sesión automáticamente
- Redirige a Stripe Checkout
2. Checkout de Stripe
En Stripe Checkout el usuario:
- Ingresa información de tarjeta
- Confirma el pago
- Es redirigido de vuelta al dashboard
3. Gestión de suscripción
Desde /dashboard/subscription el usuario puede:
- Ver su plan actual y límites
- Ver uso de búsquedas
- Cambiar de plan
- Cancelar suscripción
- Reactivar suscripción cancelada
- Gestionar método de pago (portal de Stripe)
Endpoints API
Pagos
POST /api/payments/create-checkout-session- Crear sesión de checkoutPOST /api/payments/create-portal-session- Abrir portal de clientePOST /api/payments/cancel-subscription- Cancelar suscripciónPOST /api/payments/reactivate-subscription- Reactivar suscripciónPOST /api/payments/webhook- Webhook de Stripe (sin autenticación)
Usuarios
POST /api/users/register- Registro públicoPOST /api/users/login- Iniciar sesiónPOST /api/users/logout- Cerrar sesiónGET /api/users/me- Información del usuario actual
Suscripciones
GET /api/subscription/plans- Obtener planes disponiblesGET /api/subscription/me- Obtener suscripción actualPUT /api/subscription/me- Actualizar suscripción
Límites de planes
Los límites se aplican automáticamente mediante middleware:
Plan Gratuito
- 2 búsquedas simultáneas
- Solo Wallapop
- 50 notificaciones/día
Plan Básico (€9.99/mes)
- 5 búsquedas simultáneas
- Wallapop + Vinted
- 200 notificaciones/día
Plan Pro (€19.99/mes)
- 15 búsquedas simultáneas
- Todas las plataformas
- 1000 notificaciones/día
Plan Enterprise (€49.99/mes)
- Búsquedas ilimitadas
- Todas las plataformas
- Notificaciones ilimitadas
Modo de prueba vs Producción
Modo de prueba (Desarrollo)
Usa claves de prueba (sk_test_xxxxx):
- No se procesan pagos reales
- Usa tarjetas de prueba:
4242 4242 4242 4242 - Los webhooks requieren Stripe CLI o túnel (ngrok)
Para probar webhooks localmente:
stripe listen --forward-to localhost:3001/api/payments/webhook
Modo producción
1. Obtener claves LIVE de Stripe
- Ve a https://dashboard.stripe.com/apikeys (modo LIVE)
- Copia la clave secreta
sk_live_... - ¡IMPORTANTE! Nunca hagas commit de esta clave a git
2. Configurar webhook en Stripe Dashboard
-
Ve a https://dashboard.stripe.com/webhooks (modo LIVE)
-
Click en "Add endpoint"
-
Endpoint URL: Tu dominio + la ruta del webhook
https://tudominio.com/api/payments/webhookEjemplos:
https://wallabag.midominio.com/api/payments/webhookhttps://api.miapp.com/api/payments/webhook
-
Selecciona estos eventos:
checkout.session.completedcustomer.subscription.updatedcustomer.subscription.deletedinvoice.payment_succeededinvoice.payment_failed
-
Guarda y copia el Webhook signing secret (
whsec_...)
3. Variables de entorno en tu servidor
Docker Compose (VPS/servidor propio):
# En tu servidor, edita .env
STRIPE_SECRET_KEY=sk_live_TU_CLAVE_REAL
STRIPE_WEBHOOK_SECRET=whsec_SECRET_DEL_WEBHOOK
BASE_URL=https://tudominio.com
# Reinicia los contenedores
docker-compose restart backend
Heroku:
heroku config:set STRIPE_SECRET_KEY=sk_live_...
heroku config:set STRIPE_WEBHOOK_SECRET=whsec_...
heroku config:set BASE_URL=https://tu-app.herokuapp.com
Railway/Render/Vercel: Añade las variables en el panel de configuración del servicio.
4. ⚠️ Requisitos obligatorios
- HTTPS habilitado (Stripe requiere HTTPS en producción)
- Certificado SSL válido
- Dominio accesible públicamente
Seguridad
- Las claves de Stripe NUNCA deben exponerse en el frontend
- Los webhooks verifican la firma automáticamente
- Las rutas de pago requieren autenticación (excepto webhook)
- Los administradores pueden gestionar suscripciones de todos los usuarios
Troubleshooting
Los webhooks no funcionan
- Verifica que
STRIPE_WEBHOOK_SECRETesté configurado - Verifica que la URL del webhook en Stripe sea correcta
- En desarrollo, usa
stripe listenpara reenviar webhooks - Revisa los logs en Stripe Dashboard → Developers → Webhooks
Los pagos no se reflejan
- Verifica que el webhook esté recibiendo eventos
- Verifica logs del backend para errores
- Verifica que los metadatos (userId, planId) se estén enviando correctamente
Error "Stripe no está configurado"
- Verifica que
STRIPE_SECRET_KEYesté en variables de entorno - Reinicia el servidor backend después de configurar