Stripe-Abonnements mit Back-End-Diensten zum Laufen zu bringen, kann schwierig sein und führt oft zu dem, was Entwickler als die gefürchtete „Gehirnspaltung“ bezeichnen – die synchrone Verwaltung der Stripe-Logik und Ihrer eigenen Backend-Daten.
Bei Vratix haben wir dieses Problem direkt angegangen, als wir unser Open-Source-API-Modul für Stripe-Abonnements entwickelt haben. So gehen wir an die Abrechnung von Stripe-Abonnements in Node.js heran, um die Dinge einfach, skalierbar und entwicklerfreundlich zu halten.
Der Schlüssel besteht darin, so viel von der Logik auf Stripe zu verlagern und gleichzeitig Ihre Datenbank minimal zu halten. Wir speichern nur:
Auf diese Weise vermeiden wir:
Mit diesem Ansatz verfügen Sie immer noch über ein voll funktionsfähiges Abonnement-Abrechnungssystem und können sich gleichzeitig auf Stripe als Single Source of Truth verlassen.
Am Ende dieses Leitfadens verfügen Sie über eine abonnementbasierte App, die Folgendes unterstützt:
Wir beginnen mit dem Entwurf einer sauberen, minimalen Datenbanktabelle:
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) );
Wichtige Punkte:
Wir verwenden eine Factory-Funktion, um die Geschäftslogik modular und testbar zu halten. Hier ist ein Ausschnitt aus unserem Stripe-Abonnement-Controller:
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 }, }; }); }
Wichtige Highlights:
Unsere Funktion „createCheckout“ richtet eine Abonnement-Checkout-Sitzung ein:
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! };
Wir haben alles in ein gebrauchsfertiges Open-Source-Modul gepackt. In weniger als 30 Sekunden können Sie Folgendes einrichten:
Führen Sie Folgendes aus:
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) );
Weitere Informationen finden Sie in unseren Dokumenten zum Stripe-Abonnementmodul.
Der vollständige Code ist in unserem GitHub-Repo verfügbar.
Sehen Sie sich hier ein Demovideo an, wie Sie das alles mit einer funktionierenden Benutzeroberfläche machen können.
Ich würde gerne Ihre Meinung hören – erleichtert dies die Erstellung von Abonnement-APIs? Teilen Sie uns mit, welche Funktionen Sie als Nächstes sehen möchten!
Das obige ist der detaillierte Inhalt vonStripe-Abonnement-Integration in Node.js [ltimate Guide]. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!