useBuyFlow — Flujo de Compra
useBuyFlow maneja el ciclo de vida completo de una compra — incluyendo el caso de usuarios no logueados que deben autenticarse primero.
Por qué existe
Section titled “Por qué existe”Comprar un producto no es simplemente redirigir a Stripe. El flujo real incluye:
- ¿El usuario está logueado? Si no, guardar intención y redirigir a login
- ¿Ya tiene el producto? Si sí, redirigir al contenido
- ¿Es candidato a suscripción? Si sí, mostrar popup de suscripción
- Enviar tracking a Zoho CRM
- Crear sesión de Stripe con metadatos correctos
- Manejar el retorno post-login para continuar la compra
Todo eso lo encapsula useBuyFlow.
API principal
Section titled “API principal”const { startBuyFlow, resumeBuyFlowAfterLogin, getProductAccessLink, subscriptionPopupState, proceedToCheckoutFromPopup} = useBuyFlow()startBuyFlow — Iniciar compra
Section titled “startBuyFlow — Iniciar compra”startBuyFlow(type: string, products: Product[], fatherCategory?: string)Se llama desde botones de “Comprar”. Internamente:
- No logueado: Guarda
{ type, products, fatherCategory }enlocalStorage→ redirige a/iniciar-sesion - Logueado: Procede al checkout directo
resumeBuyFlowAfterLogin — Continuar tras login
Section titled “resumeBuyFlowAfterLogin — Continuar tras login”resumeBuyFlowAfterLogin(email: string)Se llama automáticamente después de un login exitoso. Lee el estado guardado en localStorage y:
- ¿El usuario ya tiene el producto? → Redirige al contenido (link de acceso)
- ¿El producto es candidato a suscripción? → Muestra
AESubscriptionPopupContent - Caso normal → Crea sesión Stripe y redirige al checkout
getProductAccessLink — Acceso a productos comprados
Section titled “getProductAccessLink — Acceso a productos comprados”const link = await getProductAccessLink(SKU: string, onValidations?: Function)Obtiene la URL de acceso a un producto ya comprado. Valida:
- Que el contrato/suscripción esté vigente
- Que la fecha de acceso no haya expirado
- Que el pago esté confirmado
Si algo falla, invoca onValidations con el tipo de error.
subscriptionPopupState — Estado del popup
Section titled “subscriptionPopupState — Estado del popup”subscriptionPopupState.show // boolean reactivosubscriptionPopupState.data // datos para el popupsubscriptionPopupState.checkout // función de checkout guardadaControla la visibilidad del popup de upsell de suscripción que aparece tras login.
Diagrama del flujo completo
Section titled “Diagrama del flujo completo”Click "Comprar" │ ├── ¿Logueado? │ NO → localStorage.set(buyFlowState) → redirect /login │ │ │ └── Login exitoso → resumeBuyFlowAfterLogin(email) │ │ │ ├── ¿Ya lo tiene? → getProductAccessLink → redirect al contenido │ ├── ¿Candidato suscripción? → popup AESubscriptionPopupContent │ │ └── Click en popup → proceedToCheckoutFromPopup() → Stripe │ └── Normal → Stripe checkout │ └── SÍ → ¿Ya lo tiene? ├── SÍ → redirect al contenido └── NO → crear sesión Stripe → redirect checkout URL └── Post-pago → /gracias + Zoho webhook