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.
Kuncinya ialah menukar seberapa banyak logik kepada Stripe sambil memastikan pangkalan data anda minimum. Kami hanya menyimpan:
Dengan cara ini, kita mengelakkan:
Dengan pendekatan ini, anda masih mempunyai sistem pengebilan langganan berfungsi sepenuhnya sambil bergantung pada Stripe sebagai sumber tunggal kebenaran.
Menjelang penghujung panduan ini, anda akan mempunyai apl berasaskan langganan yang menyokong:
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:
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:
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! };
Kami telah membungkus segala-galanya ke dalam modul Sumber Terbuka sedia untuk digunakan. Dalam masa kurang daripada 30 saat, anda boleh menyediakan:
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!