Skip to content

💳 Subscriptions Checkout

Proceso de Checkout

Este endpoint permite crear una sesión de checkout de Stripe para que los usuarios puedan suscribirse a un plan Premium. Se encarga de validar datos, sincronizar clientes y crear la sesión de pago.

Para iniciar el proceso de checkout, se debe hacer una petición POST al endpoint /create-checkout-subscription con los parámetros necesarios. Este endpoint es parte del controlador de checkout de Strapi y está diseñado para integrarse con Stripe. Es necesario antes de realizar esta petición, tener configurado un Product en Strapi con sus precios de suscripción (subscriptionPrices) y su respectivo stripeID.

Y además habilitar el uso del endpoint para public en la configuración de roles de Strapi.

Método: POST Path: /create-checkout-subscription

CampoTipoRequeridoDescripción
customer_emailstringEmail del cliente para la suscripción
payment_method_typesarrayMétodos de pago permitidos (card, paypal)
priceIDstringID del precio de Stripe del producto
productStripeIDstringID del producto de Stripe
verticalstringVertical del producto (Alebat, Inspiria)
originstringOrigen de la transacción (Alebat, Inspiria)
success_urlstringURL de redirección tras pago exitoso
cancel_urlstringURL de redirección si se cancela
{
"payment_method_types": ["card", "paypal"],
"customer_email": "yiyi.rodrigo@hotmail.com",
"priceID": "price_1S8lJDIi92H5oiSFYXZqSCZ5",
"productStripeID": "prod_T4v90U7jGs2PmQ",
"vertical": "Inspiria",
"origin": "Inspiria",
"success_url": "https://tusitio.com/success?session_id={CHECKOUT_SESSION_ID}",
"cancel_url": "https://tusitio.com/cancel"
}
// Valida estructura y campos requeridos
validateKeys(ctx.request.body, SUBSCRIPTION_CHECKOUT_VALIDATION_KEYS, FIELD_ROOT);
validateRequiredFields(ctx.request.body, SUBSCRIPTION_CHECKOUT_VALIDATION_KEYS);

El servicio ahora se llama createSubscriptionCheckoutSession y está ubicado en CHECKOUT_STRIPE_SERVICES. Este método crea una sesión de checkout de Stripe con las siguientes características:

🔧 Características del servicio

  • Modo suscripción: Configura el checkout específicamente para suscripciones - Metadatos personalizados: Incluye origin y originEvent para tracking - Campos personalizados: Captura DNI durante el checkout - Facturación automática: Calcula impuestos y dirección automáticamente - Códigos promocionales: Permite aplicar descuentos
async createSubscriptionCheckoutSession(
customer: Stripe.Customer, // Cliente sincronizado de Stripe
origin: StripeCrmName, // Origen (Alebat/Inspiria)
payment_method_types: Array, // Métodos de pago permitidos
priceID: string, // ID del precio de Stripe
success_url: string, // URL de éxito
cancel_url: string // URL de cancelación
)
return await stripe.checkout.sessions.create({
customer: customer.id,
mode: "subscription",
payment_method_types,
line_items: [{ price: priceID, quantity: 1 }],
success_url,
cancel_url,
subscription_data: {
metadata: {
origin,
originEvent: "subscription_checkout",
},
},
metadata: {
origin,
originEvent: "subscription_checkout",
},
custom_fields: [
{
key: "dni",
label: { custom: "DNI", type: "custom" },
type: "text",
},
],
automatic_tax: { enabled: true },
billing_address_collection: "required",
allow_promotion_codes: true,
customer_update: { name: "auto", address: "auto" },
});

1. Request

Cliente envía datos de checkout al endpoint

2. Validación

Sistema valida estructura y campos requeridos

3. Product Lookup

Busca Product por productStripeID y valida priceID

4. Price Validation

Verifica que el precio existe en subscriptionPrices

5. Customer Sync

Sincroniza cliente con Stripe según origin

6. Checkout Session

Crea sesión de checkout en Stripe

7. Response

Retorna URL de checkout al cliente

{
"id": "cs_test_1234567890",
"object": "checkout.session",
"url": "https://checkout.stripe.com/pay/cs_test_1234567890",
"payment_status": "unpaid",
"status": "open",
"customer": "cus_1234567890",
"metadata": {
"origin": "Alebat",
"originEvent": "subscription_checkout"
}
}

Causas: - El productStripeID no corresponde a ningún Product en Strapi

  • El Product no tiene configurados subscriptionPrices - El priceID no existe en los subscriptionPrices del producto Solución: Verificar que el productStripeID y priceID sean válidos y estén correctamente configurados

Multi-CRM por Origin

Selección automática de cuenta Stripe basada en el campo origin

Validación de Precios

Verifica que el priceID existe en subscriptionPrices del producto

Códigos promocionales

Permite uso de códigos de descuento en el checkout

Múltiples métodos de pago

Soporte para tarjetas y PayPal

Facturación automática

Cálculo automático de impuestos y dirección de facturación

Campos personalizados

Captura de DNI durante el proceso de checkout

Metadatos de tracking

Incluye origin y originEvent para seguimiento de transacciones

Actualización automática

Actualiza automáticamente nombre y dirección del cliente

Después del checkout

Una vez completado el pago en Stripe, se ejecuta un webhook que: 1. Recibe la confirmación de pago de Stripe 2. Identifica el origin y la vertical desde los metadatos 3. Crea el registro de Subscription en Strapi 4. Relaciona la suscripción con el usuario correspondiente 5. Actualiza el estado de la suscripción según el vertical