Skip to content

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.


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.


const {
startBuyFlow,
resumeBuyFlowAfterLogin,
getProductAccessLink,
subscriptionPopupState,
proceedToCheckoutFromPopup
} = useBuyFlow()

startBuyFlow(type: string, products: Product[], fatherCategory?: string)

Se llama desde botones de “Comprar”. Internamente:

  1. No logueado: Guarda { type, products, fatherCategory } en localStorage → redirige a /iniciar-sesion
  2. 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:

  1. ¿El usuario ya tiene el producto? → Redirige al contenido (link de acceso)
  2. ¿El producto es candidato a suscripción? → Muestra AESubscriptionPopupContent
  3. Caso normal → Crea sesión Stripe y redirige al checkout

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 reactivo
subscriptionPopupState.data // datos para el popup
subscriptionPopupState.checkout // función de checkout guardada

Controla la visibilidad del popup de upsell de suscripción que aparece tras login.


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