Descripción general de la facturación
Aprenda a gestionar las suscripciones y la facturación en su aplicación.
Nota: Este es contenido de ejemplo/marcador de posición con fines de demostración.
El sistema de facturación admite precios basados en suscripciones con múltiples niveles y proveedores de pago.
Proveedores compatibles
Stripe
Procesamiento de pagos estándar del sector con funcionalidades completas:
- Pagos con tarjeta de crédito
- Gestión de suscripciones
- Generación de facturas
- Cálculo de impuestos
- Portal de clientes
Paddle
Solución de comerciante registrado (merchant of record) que se encarga de:
- Cumplimiento fiscal global
- Procesamiento de pagos
- Facturación de suscripciones
- Recuperación de ingresos
Niveles de suscripción
Defina sus niveles de suscripción en la configuración de facturación:
export const plans = [
{
id: 'free',
name: 'Free',
price: 0,
features: ['Feature 1', 'Feature 2'],
},
{
id: 'pro',
name: 'Professional',
price: 29,
interval: 'month',
features: ['All Free features', 'Feature 3', 'Feature 4'],
},
{
id: 'enterprise',
name: 'Enterprise',
price: 99,
interval: 'month',
features: ['All Pro features', 'Feature 5', 'Priority support'],
},
];
Ciclo de vida de la suscripción
- El cliente selecciona un plan - El usuario elige un nivel de suscripción
- Se procesa el pago - El proveedor se encarga del cobro
- Se recibe el webhook - Su aplicación recibe la confirmación
- Se activa la suscripción - El usuario obtiene acceso a las funcionalidades
- Facturación recurrente - Renovación automática en cada período
- Cancelación - El usuario puede cancelar en cualquier momento
Gestión de suscripciones
Crear una suscripción
import { createCheckoutSession } from '~/lib/billing/checkout';
const session = await createCheckoutSession({
accountId: user.accountId,
planId: 'pro',
returnUrl: '/dashboard',
});
// Redirigir al usuario a la página de pago
redirect(session.url);
Comprobar el estado de la suscripción
import { getSubscription } from '~/lib/billing/subscription';
const subscription = await getSubscription(accountId);
if (subscription.status === 'active') {
// El usuario tiene una suscripción activa
}
Cancelar una suscripción
import { cancelSubscription } from '~/lib/billing/subscription';
await cancelSubscription(subscriptionId);
Gestión de webhooks
Los webhooks notifican a su aplicación los eventos de facturación:
export async function POST(request: Request) {
const signature = request.headers.get('stripe-signature');
const payload = await request.text();
const event = stripe.webhooks.constructEvent(
payload,
signature,
process.env.STRIPE_WEBHOOK_SECRET
);
switch (event.type) {
case 'customer.subscription.created':
await handleSubscriptionCreated(event.data.object);
break;
case 'customer.subscription.updated':
await handleSubscriptionUpdated(event.data.object);
break;
case 'customer.subscription.deleted':
await handleSubscriptionCanceled(event.data.object);
break;
}
return new Response('OK');
}
Pruebas
Utilice credenciales del modo de prueba durante el desarrollo:
- Tarjeta de prueba: 4242 4242 4242 4242
- Cualquier fecha de caducidad futura
- Cualquier CVC
Todas las transacciones de prueba aparecerán en el panel de pruebas de su proveedor.