サブスクリプションの実装を構築する
サブスクリプションを作成して、継続支払いを受け付けるように管理します。




サーバーを設定する
Stripe をセットアップする
任意の Stripe クライアントをインストールします。
商品と価格を作成する
ダッシュボードまたは Stripe CLI で商品とその価格を作成します。
この例では、「基本」と「プレミアム」という 2 つのサービスレベルオプションがある固定価格のサービスを使用しています。サービスレベルオプションごとに、1 つの商品と 1 つの継続価格を作成する必要があります (初期費用のような 1 回限りの支払いを追加する場合は、1 回限りの価格で 3 つ目の商品を作成します。わかりやすくするために、この例には 1 回限りの支払いを含めていません)。
この例では、各商品が 1 カ月間隔で請求されます。基本商品の価格は 5 USD で、プレミアム商品の価格は 15 USD です。
複数の請求期間を提供している場合は、決済を使用して、請求期間の長い顧客をアップセルし、より多くの収入を前払いで徴収します。
その他の料金体系モデルについては、請求書例 を参照してください。
Checkout Session を作成
Checkout Session を作成するサーバー上にエンドポイントを追加します。
Checkout Sessionを作成する際に、次のパラメーターを渡します。
- 組み込み決済フォームを使用するには、ui_modeを
embedded
に設定します。 - 顧客の購入時にサブスクリプションを作成するには、mode を
subscription
に設定します。 - 決済を完了または試行した際に顧客が戻るページを定義するには、return_url を指定します。URL に
{CHECKOUT_
のテンプレート変数を含めます。Checkout はこの変数を Checkout Session ID に置き換えてから、顧客をリダイレクトします。Web サイトに戻り先ページを作成してホストしてください。SESSION_ ID} - サブスクリプションとキャンセルの規約、および顧客がサブスクリプションを更新またはキャンセルできるリンクを含めるには、オプションで カスタムテキスト を使用します。サブスクリプション登録者には メールリマインダーと通知 を設定することをお勧めします。
Checkout をマウントするには、レスポンスで返される Checkout Session の client_
を使用します。
サブスクリプションページを構築するクライアント
Checkout をマウントする
戻りページを表示する
顧客は決済を試行した後、お客様のサイトにホストされている戻り先ページにリダイレクトされます。戻り先ページは、Checkout Session の作成時に return_url パラメーターで指定した URL です。
注
決済の進行中、決済手段によっては、銀行認証ページなどの中間ページに顧客がリダイレクトされる場合があります。そのページでの操作を完了した顧客は、Stripe によって戻り先ページにリダイレクトされます。
エンドポイントを作成して Checkout Session を取得する
エンドポイントを追加し、URL で Checkout Session の ID を指定して Checkout Session のステータスを取得します。
Checkout Session を取得する
Checkout Session の詳細を使用するには、戻り先ページが読み込まれたらすぐに URL の Checkout Session ID を使用して、Checkout Session のステータスを取得 するリクエストをサーバー上のエンドポイントに行います。
セッションを処理する
セッションステータスに基づく結果の処理:
complete
: 決済が成功しました。Checkout Session の情報を使用して成功ページを表示します。open
: 決済が失敗またはキャンセルされました。顧客がやり直せるように Checkout を再度マウントします。
// Retrieve a Checkout Session // Use the session ID initialize(); async function initialize() { const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); const sessionId = urlParams.get('session_id'); const response = await fetch(`/session-status?session_id=${sessionId}`); const session = await response.json(); // Handle the session according to its status if (session.status == 'open') { // Remount embedded Checkout window.location.replace('http://localhost:4242/checkout.html') } else if (session.status == 'complete') { document.getElementById('success').classList.remove('hidden'); document.getElementById('customer-email').textContent = session.customer_email; // Show success page // Optionally use session.payment_status or session.customer_email // to customize the success page } }
// Add an endpoint to fetch the Checkout Session status app.get('/session_status', async (req, res) => { const session = await stripe.checkout.sessions.retrieve(req.query.session_id); const customer = await stripe.customers.retrieve(session.customer); res.send({ status: session.status, payment_status: session.payment_status, customer_email: customer.email }); });
オプションカスタマーポータルを設定する
カスタマーポータル を設定すると、顧客が各自の既存のサブスクリプションと請求書を直接管理できるようになります。
ポータルはダッシュボードで設定できます。解約を減らすには、決済が失敗した場合に、顧客が決済手段を各自で更新できるようにポータルを設定してください。
顧客がサブスクリプションを各自で管理できるよう、カスタマーポータルにリダイレクトするボタンをウェブサイト上の見つけやすい位置に追加します。このボタンをクリックすると、顧客は Stripe がホストするカスタマーポータルページにリダイレクトされます。
カスタマーポータル とその他の顧客管理オプションの詳細をご確認ください。
ポータルセッションを作成する
カスタマーポータルを追加するには、フロントエンドが呼び出す カスタマーポータルセッションを作成 するエンドポイントを定義します。CUSTOMER_
は、Checkout Session で作成されたものであり、checkout.
Webhook の処理中に保存した顧客 ID です。ダッシュボードで、ポータルのデフォルトのリダイレクトリンクを設定することもできます。
サイトのページを示す return_
値をオプションで渡して、サブスクリプションの管理を終えた顧客をこのページにリダイレクトします。
顧客をカスタマーポータルに移動させる
フロントエンドで、カスタマーポータルへのリンクを提供するボタンを success_
のページに追加します。
<html> <head> <title>Manage Billing</title> </head> <body> <form action="/customer-portal" method="POST"> <!-- Note: If using PHP set the action to /customer-portal.php --> <button type="submit">Manage Billing</button> </form> </body> </html>
顧客がカスタマーポータルから退出すると、return_
に指定された Web サイトに戻ります。引き続き イベントを監視 することで、顧客のサブスクリプションのステータスを追跡することができます。
サブスクリプションのキャンセルなどのアクションを許可するようにカスタマーポータルを設定する場合は、必ず追加イベント を監視してください。
アクセスを提供
サブスクリプションが有効になったら、ユーザーにサービスへのアクセスを許可します。これを行うには、customer.
、customer.
、customer.
の各イベントをリッスンします。これらのイベントは Subscription
オブジェクトを渡します。このオブジェクトには、サブスクリプションが有効か、期日経過か、キャンセルされたかを示す ステータス
フィールドが含まれます。ステータスの一覧については、サブスクリプションライフサイクル を参照してください。製品の機能へのアクセスを管理するには、エンタイトルメントの統合 を参照してください。
Webhook ハンドラーで、以下を実行します。
- サブスクリプションのステータスを確認します。
active
の場合、ユーザーは商品の決済を実行しています。 - 顧客が登録している商品を確認し、サービスへのアクセス権を付与します。価格ではなく商品を確認することにより、料金体系や請求期間の変更が必要になった場合に、柔軟に対応できます。
product.
、id subscription.
およびid subscription.
を、すでに保存されているstatus customer.
とともにデータベースに保存します。アプリケーションでユーザーに対して有効にする機能を決定する際に、このレコードを確認します。id
サブスクリプションのステータスは、申し込みから直接 Stripe に呼び出しを行わなくても、そのライフサイクルのどの時点でも変更される可能性があります。たとえばクレジットカードの有効期限切れで更新ができなかった場合、サブスクリプションは期日経過のステータスになります。または、カスタマーポータル を実装している場合、ユーザーは、申し込みに直接アクセスせずにサブスクリプションをキャンセルする可能性があります。ハンドラーを正しく実装することで、申し込みのステータスを Stripe と同期した状態に維持することができます。
導入をテストする
支払い方法をテストする
次の表を使用して、さまざまな支払い方法とシナリオをテストします。
決済手段 | シナリオ | テスト方法 |
---|---|---|
BECS ダイレクトデビット | 顧客が BECS ダイレクトデビットによる支払いに成功します。 | アカウント番号900123456 と BSB000000 を使用して、フォームに入力します。確定された PaymentIntent のステータスは、まずprocessing に移行し、3 分後にsucceeded ステータスに移行します。 |
BECS ダイレクトデビット | 顧客の支払いが account_ エラーコードで失敗します。 | アカウント番号 111111113 と BSB 000000 を使用して、フォームに入力します。 |
クレジットカード | カード支払いは成功し、認証は必要とされません。 | クレジットカード番号 4242 4242 4242 4242 と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 |
クレジットカード | カード決済で認証が要求されます。 | クレジットカード番号 4000 0025 0000 3155 と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 |
クレジットカード | カードが insufficient_ などの拒否コードで支払い拒否されます。 | クレジットカード番号 4000 0000 0000 9995 と、任意の有効期限、セキュリティコード、郵便番号を使用してクレジットカードフォームに入力します。 |
SEPA ダイレクトデビット | 顧客が SEPA ダイレクトデビットによる支払いに成功します。 | 口座番号 AT321904300235473204 を使用して、フォームに入力します。確定された PaymentIntent のステータスはまず、processing に移行し、3 分後に succeeded ステータスに移行します。 |
SEPA ダイレクトデビット | 顧客の PaymentIntent ステータスが processing から requires_ に移行します。 | 口座番号 AT861904300235473202 を使用して、フォームに入力します。 |
イベントを監視する
Webhook を設定して、アップグレードやキャンセルなどのサブスクリプション変更イベントをリッスンします。サブスクリプション Webhook イベント は、ダッシュボードまたは Stripe CLI で表示できます。
Billing 導入テスト の詳細を参照してください。