Stripe サブスクリプションをバックエンド サービスと連携させるのは難しい場合があり、多くの場合、Stripe のロジックと独自のバックエンド データの両方を同期して管理する、開発者が言う恐ろしい「頭脳の分裂」につながります。
Vratix では、オープンソースの Stripe サブスクリプション API モジュールを構築する際に、この問題に正面から取り組んできました。ここでは、シンプルでスケーラブルで開発者にとって使いやすいものにするために、Node.js で Stripe サブスクリプションの請求にどのようにアプローチするかを説明します。
重要なのは、データベースを最小限に抑えながら、可能な限り多くのロジックを Stripe に移行することです。私たちが保管するのは以下のみです:
このようにして、次のことを回避します。
このアプローチでは、Stripeを唯一の信頼できる情報源として利用しながら、完全に機能するサブスクリプション請求システムを維持できます。
このガイドを終えると、以下をサポートするサブスクリプションベースのアプリが完成します。
クリーンで最小限のデータベース テーブルを設計することから始めます。
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) );
重要なポイント:
ビジネス ロジックをモジュール化してテスト可能に保つために、ファクトリ関数を使用します。以下は、Stripe サブスクリプション コントローラーのスニペットです:
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 }, }; }); }
主なハイライト:
createCheckout 関数は、サブスクリプション チェックアウト セッションをセットアップします。
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! };
私たちはすべてをすぐに使えるオープンソース モジュールにパッケージ化しました。 30 秒以内で、以下をセットアップできます。
これを実行します:
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) );
詳細については、Stripe サブスクリプション モジュールのドキュメントをご覧ください。
完全なコードは GitHub リポジトリで入手できます。
動作する UI でこれらすべてを実行する方法のデモ ビデオをここでご覧ください。
ぜひご意見をお聞かせください - これによりサブスクリプション API の構築が容易になりますか?次にご希望の機能をお知らせください。
以上がNode.js での Stripe サブスクリプションの統合 [最終ガイド]の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。