Visión general
Laravel Cashier (Stripe) es el paquete oficial para gestionar las funciones de facturación de Stripe desde Laravel. Puedes implementar con una API unificada la creación, consulta de estado y cancelación de suscripciones, los pagos únicos, la descarga de facturas y el procesamiento de webhooks.
Instalación y configuración
Primero, instala Cashier y crea las tablas necesarias.
Después, añade el trait Billable al modelo facturable, como App\Models\User.
Configura las claves de Stripe en .env.
Gestión de clientes
Cuando no puedes asegurar si el cliente de Stripe ya existe, usa createOrGetStripeCustomer().
Si quieres crearlo explícitamente, usa createAsStripeCustomer().
Suscripciones
Nueva creación
Comienza una suscripción con newSubscription() y create().
En $paymentMethodId pasa el Payment Method ID obtenido con Stripe.js o similar.
price_monthly es un ejemplo. Al implementarlo indica el Price ID real que hayas creado en el dashboard de Stripe.
Comprobación de estado
Con subscribed() puedes comprobar si la suscripción está activa.
Cancelación y reanudación
Pago único (Charge)
Con charge() puedes cobrar una única vez. Pasa el importe en la unidad mínima de la moneda (por ejemplo, en USD 100 es $1.00).
Aquí también en $paymentMethodId se usa el Payment Method ID creado en Stripe.
Si el cobro falla, charge() lanza una excepción.
Payment Element
Con el Payment Element de Stripe puedes manejar de forma unificada varios métodos de pago: tarjeta, Apple Pay, Google Pay, iDEAL, etc.
Uso en suscripciones
Crea un Setup Intent y pásaselo a la vista.
Monta el Payment Element en la vista Blade y pásale el client_secret del Setup Intent.
La URL de redirección de Stripe recibe el parámetro setup_intent. Úsalo para obtener el Payment Method ID y crear la suscripción.
Uso en pago único
Para un pago único crea un Payment Intent con pay(). El modelo Order debe tener las columnas user_id, amount, status y stripe_payment_intent_id.
Monta el Payment Element y confirma el pago.
Tras la redirección busca el pedido por el parámetro payment_intent, comprueba que el Payment Intent pertenece al usuario autenticado y está en estado succeeded, y confirma el pedido.
Facturas
Obtén la lista de facturas con invoices().
Para descargarlas en PDF, instala dompdf/dompdf y usa downloadInvoice(). En $invoiceId pasa el ID de una factura obtenido con invoices().
Configuración de webhooks
Cashier registra automáticamente la ruta del webhook de Stripe, que por defecto usa /stripe/webhook. Configura esta URL en el dashboard de Stripe.
Puedes crear el webhook con cashier:webhook.
Excluye stripe/* de la protección CSRF.
Si configuras STRIPE_WEBHOOK_SECRET en .env, el middleware de verificación de firmas de Cashier validará las solicitudes de webhook.Última modificación el 13 de julio de 2026