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:
- Crear un precio (price_id) con el modelo de pricing deseado.
- Definir los rangos de unidades y sus costos en el panel de precios de Stripe.
- 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);
}
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.