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

  1. El cliente selecciona un plan - El usuario elige un nivel de suscripción
  2. Se procesa el pago - El proveedor se encarga del cobro
  3. Se recibe el webhook - Su aplicación recibe la confirmación
  4. Se activa la suscripción - El usuario obtiene acceso a las funcionalidades
  5. Facturación recurrente - Renovación automática en cada período
  6. 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.