Rumah >hujung hadapan web >tutorial js >Integrasi Langganan Stripe dalam Node.js [Panduan akhir]

Integrasi Langganan Stripe dalam Node.js [Panduan akhir]

Barbara Streisand
Barbara Streisandasal
2024-11-22 15:57:37702semak imbas

Stripe Subscription Integration in Node.js [ltimate Guide]

Mendapatkan langganan Stripe yang berfungsi dengan perkhidmatan hujung belakang boleh menjadi rumit dan selalunya membawa kepada perkara yang dipanggil pembangun sebagai "pecah otak" yang digeruni - menguruskan kedua-dua logik Stripe dan data hujung belakang anda sendiri dalam penyegerakan.

Di Vratix, kami telah menangani masalah ini secara langsung semasa membina Modul API Langganan Jalur Sumber Terbuka kami. Begini cara kami mendekati pengebilan langganan Stripe dalam Node.js untuk memastikan perkara mudah, berskala dan mesra pembangun.

Prinsip Teras: Biarkan Belang Menjadi Sumber Kebenaran

Kuncinya ialah menukar seberapa banyak logik kepada Stripe sambil memastikan pangkalan data anda minimum. Kami hanya menyimpan:

  • ID Pelanggan
  • ID Langganan
  • Rancang

Dengan cara ini, kita mengelakkan:

  • Logik hujung belakang yang terlalu rumit
  • Pelaksanaan webhook yang terdedah kepada ralat untuk menyegerakkan perubahan papan pemuka
  • Lewahan data

Dengan pendekatan ini, anda masih mempunyai sistem pengebilan langganan berfungsi sepenuhnya sambil bergantung pada Stripe sebagai sumber tunggal kebenaran.

Ciri-ciri Pelaksanaan Kami

Menjelang penghujung panduan ini, anda akan mempunyai apl berasaskan langganan yang menyokong:

  • Pelan langganan pengguna
  • Sesi daftar keluar
  • Langganan meningkat laris
  • Penyenaraian pelan yang tersedia

Timbunan Teknologi

  • PostgreSQL
  • Node.js Express.js
  • Skrip Jenis

Langkah 1: Reka Bentuk Pangkalan Data

Kami mulakan dengan mereka bentuk jadual pangkalan data yang bersih dan minimum:

CREATE TABLE user_subscriptions (  
    "id" SERIAL PRIMARY KEY,  
    "plan" VARCHAR NOT NULL,  
    "user_id" INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,  
    "customer_id" VARCHAR,  
    "subscription_id" VARCHAR NOT NULL,  
    "is_owner" BOOLEAN NOT NULL DEFAULT TRUE,  
    "created_at" TIMESTAMP NOT NULL DEFAULT NOW(),  
    UNIQUE (user_id, subscription_id)  
);

Isi penting:

  • user_id: Merujuk jadual pengguna dalaman anda
  • pelan: Menjejaki pelan langganan
  • subscription_id: ID langganan Stripe
  • is_owner: Benderakan pemegang langganan utama

Langkah 2: Pengawal

Kami menggunakan fungsi kilang untuk memastikan logik perniagaan modular dan boleh diuji. Berikut ialah coretan daripada Pengawal Langganan Stripe kami:

async getSubscriptions() {  
  const stripePrices = await stripe.prices.list({  
    active: true,  
    type: "recurring",  
    expand: ["data.product"],  
  });  

  return stripePrices.data.map((price) => {  
    const product = price.product as Stripe.Product;  
    return {  
      plan: price.lookup_key || product.name.toLowerCase().replaceAll(" ", "_"),  
      name: product.name,  
      priceId: price.id,  
      interval: price.recurring!.interval,  
      price: { currency: price.currency, amount: price.unit_amount },  
    };  
  });  
}  

Sorotan utama:

  • Kunci langganan tersuai: Diperoleh daripada nama produk atau kunci_carian untuk semakan pelan bersih (user.plan === 'pro_plan').
  • Pendekatan mengutamakan jalur: Kami mengambil data langganan terus daripada Stripe, mengelakkan "pecah otak".

Langkah 3: Checkout Jalur Diperkemas

Fungsi createCheckout kami menyediakan sesi daftar keluar langganan:

const checkout = await stripe.checkout.sessions.create({  
  line_items: [  
    {  
      price: priceId,  
      adjustable_quantity: { enabled: true },  
      quantity: seats || 1,  
    },  
  ],  
  mode: "subscription",  
  subscription_data: { metadata: { userId } },  
  success_url: CHECKOUT_SUCCESS_URL,  
  cancel_url: CHECKOUT_CANCEL_URL,  
});  

return { url: checkout.url! };  

Ingin Melangkau Semua Ini?

Kami telah membungkus segala-galanya ke dalam modul Sumber Terbuka sedia untuk digunakan. Dalam masa kurang daripada 30 saat, anda boleh menyediakan:

  • Penyatuan jalur
  • Pengesahan
  • Konfigurasi pangkalan data
  • Laluan prabina dan pertanyaan SQL

Jalankan ini:

CREATE TABLE user_subscriptions (  
    "id" SERIAL PRIMARY KEY,  
    "plan" VARCHAR NOT NULL,  
    "user_id" INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,  
    "customer_id" VARCHAR,  
    "subscription_id" VARCHAR NOT NULL,  
    "is_owner" BOOLEAN NOT NULL DEFAULT TRUE,  
    "created_at" TIMESTAMP NOT NULL DEFAULT NOW(),  
    UNIQUE (user_id, subscription_id)  
);

Lihat Dokumen Modul Langganan Stripe kami untuk mendapatkan butiran lanjut.

Kod penuh tersedia pada repo GitHub kami.

Lihat video demo cara melakukan semua ini dengan UI yang berfungsi di sini.

Saya ingin mendengar pendapat anda - adakah ini memudahkan membina API langganan? Beritahu kami ciri yang anda ingin lihat seterusnya!

Atas ialah kandungan terperinci Integrasi Langganan Stripe dalam Node.js [Panduan akhir]. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn