Faturalandırmaya Genel Bakış

Uygulamanızda abonelikleri ve faturalandırmayı nasıl yöneteceğinizi öğrenin.

Not: Bu içerik, tanıtım amacıyla hazırlanmış örnek/yer tutucu bir içeriktir.

Faturalandırma sistemi, birden fazla kademe ve ödeme sağlayıcısıyla abonelik tabanlı fiyatlandırmayı destekler.

Desteklenen Sağlayıcılar

Stripe

Kapsamlı özelliklere sahip, sektör standardı ödeme işleme altyapısı:

  • Kredi kartıyla ödemeler
  • Abonelik yönetimi
  • Fatura oluşturma
  • Vergi hesaplama
  • Müşteri portalı

Paddle

Aşağıdakileri üstlenen bir "merchant of record" (kayıtlı satıcı) çözümü:

  • Küresel vergi uyumluluğu
  • Ödeme işleme
  • Abonelik faturalandırması
  • Gelir kurtarma

Abonelik Kademeleri

Abonelik kademelerinizi faturalandırma yapılandırmasında tanımlayı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'],
  },
];

Abonelik Yaşam Döngüsü

  1. Müşteri plan seçer - Kullanıcı bir abonelik kademesi seçer
  2. Ödeme işlenir - Sağlayıcı ödemenin tahsilatını yönetir
  3. Webhook alınır - Uygulamanız onayı alır
  4. Abonelik etkinleştirilir - Kullanıcı özelliklere erişim kazanır
  5. Yinelenen faturalandırma - Her dönem otomatik olarak yenilenir
  6. İptal - Kullanıcı istediği zaman iptal edebilir

Abonelikleri Yönetme

Abonelik Oluşturma

import { createCheckoutSession } from '~/lib/billing/checkout';

const session = await createCheckoutSession({
  accountId: user.accountId,
  planId: 'pro',
  returnUrl: '/dashboard',
});

// Kullanıcıyı ödeme sayfasına yönlendir
redirect(session.url);

Abonelik Durumunu Kontrol Etme

import { getSubscription } from '~/lib/billing/subscription';

const subscription = await getSubscription(accountId);

if (subscription.status === 'active') {
  // Kullanıcının etkin bir aboneliği var
}

Aboneliği İptal Etme

import { cancelSubscription } from '~/lib/billing/subscription';

await cancelSubscription(subscriptionId);

Webhook İşleme

Webhook'lar, uygulamanızı faturalandırma olaylarından haberdar eder:

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');
}

Test Etme

Geliştirme sırasında test modu kimlik bilgilerini kullanın:

  • Test kartı: 4242 4242 4242 4242
  • Gelecekteki herhangi bir son kullanma tarihi
  • Herhangi bir CVC

Tüm test işlemleri, sağlayıcınızın test panelinde görünür.