Integración Stripe
Integración completa con Stripe Connect para pagos Escrow seguros en Floutic.
Características
- ✅ Pagos Escrow seguros - El dinero se mantiene en depósito hasta la aprobación
- ✅ Stripe Connect - Transferencias automáticas a expertos
- ✅ PaymentIntent inicial - Se crea al seleccionar experto
- ✅ Sincronización automática - Estados
pending → held → released - ✅ Liberación en cascada - Payout automatizado al aprobar hito
- ✅ Gestión de comisiones - Comisiones automáticas para Floutic
- ✅ Onboarding Express - Configuración rápida de cuentas Connect
- ✅ Webhooks - Sincronización bidireccional con Stripe
Configuración
1. Crear Cuenta en Stripe
- Crear cuenta en Stripe
- Activar Stripe Connect
- Configurar cuenta Express para expertos
2. Obtener API Keys
Modo Test:
STRIPE_SECRET_KEY=sk_test_...STRIPE_PUBLISHABLE_KEY=pk_test_...STRIPE_WEBHOOK_SECRET=whsec_...
Modo Live:
STRIPE_SECRET_KEY=sk_live_...STRIPE_PUBLISHABLE_KEY=pk_live_...STRIPE_WEBHOOK_SECRET=whsec_...
3. Configurar Webhooks
- Ir a Stripe Dashboard → Webhooks
- Añadir endpoint:
https://api.haorp.es/api/payments/webhooks/stripe - Seleccionar eventos:
payment_intent.succeededpayment_intent.payment_failedpayment_intent.canceledcharge.succeededcharge.failed
- Copiar el
Signing Secret(whsec_...)
4. Variables de Entorno
# Stripe API Keys
STRIPE_SECRET_KEY=sk_test_...
STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
# Stripe Connect
STRIPE_CONNECT_RETURN_URL=https://app.floutic.com/dashboard/experto
STRIPE_CONNECT_REFRESH_URL=https://app.floutic.com/dashboard/experto?retryStripeOnboarding=true
STRIPE_CONNECT_ACCOUNT_COUNTRY=ES
# Frontend
VITE_STRIPE_PUBLISHABLE_KEY=pk_test_...
VITE_STRIPE_DASHBOARD_URL_BASE=https://dashboard.stripe.com/test/payments/
Flujo de Pagos
1. Selección de Experto
Cuando una empresa selecciona un experto:
- Se crea automáticamente el
PaymentIntentdel primer hito - Estado inicial:
requires_payment_method - El pago se muestra en la ficha del proyecto
2. Autorización del Pago
La empresa autoriza el pago:
- El frontend sincroniza el PaymentIntent (
/api/payments/sync-status) - Estado cambia a
requires_capture - El pago se marca como
helden Floutic - Se guarda
held_atystripe_charge_id - Notificación: Se envía notificación
payment_heldal experto confirmando que los fondos están seguros.
3. Aprobación de Hito
Cuando la empresa aprueba un hito:
- Se captura el pago retenido (
/api/payments/release-and-charge-next) - Se transfiere el neto al experto vía Stripe Connect
- Se genera automáticamente el PaymentIntent del siguiente hito
- Notificación: Se envía notificación
milestone_awaiting_paymental experto para el nuevo hito. - El ciclo continúa hasta completar todos los hitos
4. Estados del Pago
pending- PaymentIntent creado, esperando autorizaciónheld- Pago autorizado, en depósitoreleased- Pago capturado y transferido al expertorefunded- Pago reembolsado
Stripe Connect
Onboarding de Expertos
Los expertos deben completar el onboarding de Stripe Connect para recibir pagos:
- Verificar estado:
GET /api/stripe-connect/status - Generar enlace:
POST /api/stripe-connect/account-link - Completar onboarding en Stripe
- Verificar estado nuevamente
Actualización de Cuenta
Si la cuenta Connect necesita actualización:
- Generar enlace de actualización:
POST /api/stripe-connect/account-update-link - Completar actualización en Stripe
- Verificar estado nuevamente
Endpoints de API
Pagos
POST /api/payments/initiate- Crear PaymentIntentPOST /api/payments/sync-status- Sincronizar estado con StripePOST /api/payments/release- Liberar pago retenidoPOST /api/payments/release-and-charge-next- Liberar y crear siguientePOST /api/payments/refund- Crear reembolsoGET /api/payments/project/{project_id}- Pagos de proyectoGET /api/payments/history- Historial de pagos
Stripe Connect
GET /api/stripe-connect/status- Estado de cuenta ConnectPOST /api/stripe-connect/account-link- Generar enlace de onboardingPOST /api/stripe-connect/account-update-link- Generar enlace de actualización
Webhooks
Stripe envía webhooks a:
POST /api/payments/webhooks/stripe
Eventos procesados:
payment_intent.succeeded- Pago completadopayment_intent.payment_failed- Pago fallidopayment_intent.canceled- Pago canceladocharge.succeeded- Cargo exitosocharge.failed- Cargo fallido
Comisiones
Floutic cobra una comisión automática en cada transferencia:
- Configurable desde el panel de administración
- Se calcula automáticamente en cada payout
- Se resta del monto total antes de transferir al experto
Seguridad
- Validación de firmas - Todos los webhooks se validan con HMAC
- HTTPS obligatorio - Todas las comunicaciones son seguras
- Tokens seguros - Los PaymentIntents usan tokens únicos
- Validación de permisos - Solo empresa/admin pueden ver enlaces a Stripe
Troubleshooting
El pago no se sincroniza
- Verificar que el webhook esté configurado correctamente
- Revisar logs de Stripe Dashboard
- Verificar
STRIPE_WEBHOOK_SECRETen variables de entorno - Usar
POST /api/payments/sync-statuspara sincronización manual
El experto no recibe pagos
- Verificar que tenga cuenta Connect configurada
- Verificar estado con
GET /api/stripe-connect/status - Completar onboarding si es necesario
- Verificar que
charges_enabledypayouts_enabledseantrue
Error en el onboarding
- Verificar
STRIPE_CONNECT_RETURN_URLySTRIPE_CONNECT_REFRESH_URL - Verificar que las URLs sean HTTPS
- Regenerar enlace si es necesario
- Verificar que el país esté configurado (
STRIPE_CONNECT_ACCOUNT_COUNTRY)
Documentación Completa
Para documentación detallada, consulta:
- Stripe Implementation Review - Auditoría completa
- Stripe Setup - Guía de configuración paso a paso
- API Endpoints - Pagos - Documentación de endpoints