Cómo configurar precios escalonados en Laravel con Stripe

Si necesitas cobrar a tus clientes según la cantidad de usuarios en tu plataforma usando Stripe y Laravel, este artículo te mostrará cómo configurar correctamente Stripe con "Usage-based", "Per tier" y "Volume" billing models.

13.02.2025 — Marc Bernet — 2 min read

Configuración en Stripe

Stripe permite configurar diferentes modelos de precios escalonados:

  • Usage-based: El precio final se basa en el último nivel alcanzado, por lo que requiere un evento de medición en Stripe.
  • Per tier: Cada nivel de uso tiene un precio fijo asociado.
  • Volume: Un precio único se aplica a todas las unidades consumidas dentro del rango.

En tu cuenta de Stripe, debes:

  1. Crear un precio (price_id) con el modelo de pricing deseado.
  2. Definir los rangos de unidades y sus costos en el panel de precios de Stripe.
  3. Crear un Meter Event y asociarlo al price_id.

 

Crear la suscripción en Laravel

Para iniciar una suscripción con precios escalonados en Laravel, puedes utilizar el siguiente código después de hacer la integración con Stripe Elements:

public function processSubscription(Request $request)
{
    $partner = auth('partner')->user();

    $paymentMethod = $request->input('payment_method');

    $partner->createOrGetStripeCustomer();
    $partner->addPaymentMethod($paymentMethod);

	$price_id = 'price_1...'; //Price ID
    $partner->newSubscription('default')
        ->meteredPrice($price_id)
        ->create($paymentMethod);

    return redirect()->route('subscription.form')->with('success', 'Subscription started!');
}

Reportar uso a Stripe con Laravel

Para que Stripe calcule correctamente las facturas en modelos “usage-based”, debes enviar periódicamente la información de uso (consumo). Esto se hace a través de usageRecords. En Laravel, puedes reportarlo con un Command que se ejecute según tu frecuencia deseada (por ejemplo, cada hora o al final del día).

$subscription = $user->subscriptions()->first();

if ($subscription && $subscription->items->first()) {
	$user->reportMeterEvent('meter_id', quantity: 10);
}

Es importante entender que Stripe va acumulando las cantidades que envíes en cada evento de uso (usage record). Esto significa que si estás cobrando según el número de usuarios, solo necesitas reportar los usuarios nuevos que se suman, en lugar de informar el total cada vez. Lo mismo se aplica si en lugar de “usuarios” quieres medir tokens, mensajes o cualquier otra métrica: basta con enviar los incrementos reales de uso y Stripe hará el recuento acumulado para la facturación.

Programa este comando en tu app/Console/Kernel.php o ejecútalo en tu flujo de trabajo, y Stripe se encargará de facturar el uso acumulado en cada ciclo de facturación.
 

Conclusión

Configurar precios escalonados en Stripe con Laravel es sencillo si defines correctamente los rangos en Stripe y reportas el uso de manera adecuada. Este enfoque permite facturar automáticamente según el número de usuarios sin tener que gestionar manualmente las suscripciones.

⚡️ Consigue la subvención del Kit Digital para digitalizar tu negocio. Saber más.