支払いの詳細を更新する
今後の請求書で使用される支払い方法を更新する方法をご紹介します。
以下のステップを使用して、顧客の支払いの詳細を収集して支払い方法を返す決済ページを作成します。次に、Stripe の REST API を使用して、以降の請求書で使用する支払い方法を更新します。
注
このガイドでは、Checkout を使用してサブスクリプションの支払い方法を更新します。この代わりに、Billing カスタマーポータルを実装して、Stripe がホストするダッシュボードを顧客に提供することもできます。顧客はそこでサブスクリプションと請求書の詳細を管理できます。
Checkout セッションを作成するサーバ側
設定モードのセッションを作成するには、セッション作成時に setup
の値を指定して mode
パラメータを使用します。セッションの作成に使用できる全パラメータの一覧については、Checkout Session API リファレンスを参照してください。
顧客が Checkout セッションを正常に完了した後でセッション ID にアクセスするための、success_
に {CHECKOUT_
テンプレート変数を追加します。
最後に、setup_intent_data.metadata ディクショナリを使用して、顧客の既存の Stripe subscription_
を Checkout セッションに渡します。このデータをお客様のサーバーに渡す方法は他にもありますが、このガイドではメタデータを使用します。
Checkout にリダイレクトするクライアント側
Checkout では、Stripe の基本的な JavaScript ライブラリである Stripe.js を利用して決済フローを作成します。
このコードは通常、顧客による支払いボタンのクリックなどの操作をきっかけにして、イベントハンドラにより起動されます。
Checkout セッションを取得するサーバ側
顧客が Checkout セッションを正常に完了した後に、お客様は Session オブジェクトを取得する必要があります。これは、以下の 2 つの方法で実行できます。
- 非同期: Session オブジェクトを含む
checkout.
Webhook を処理します。Webhook の設定の詳細をご覧ください。session. completed - 同期: ユーザーがサイトにリダイレクトされるときに
success_
からセッション ID を取得します。セッション ID を使用して、Session オブジェクトを取得します。url
顧客が支払いの成功後に必ず success_
に到達するとは限らないため、ドロップオフの許容度に応じて適切な判断をする必要があります。リダイレクトが発生する前に顧客がブラウザータブを閉じることもあります。Webhook を処理することで、システムがこのようなドロップオフの影響を受けずに済みます。
Session オブジェクトの取得後、Checkout セッションの際に作成された SetupIntent の ID である setup_
キーの値を入手します。SetupIntent は、今後の支払いに備えて顧客の銀行口座情報を設定するために使用されるオブジェクトです。
以下に checkout.
ペイロードの例を示します。
{ "id": "evt_1Ep24XHssDVaQm2PpwS19Yt0", "object": "event", "api_version": "2019-03-14", "created": 1561420781, "data": { "object": { "id": "cs_test_MlZAaTXUMHjWZ7DcXjusJnDU4MxPalbtL5eYrmS2GKxqscDtpJq8QM0k", "object": "checkout.session", "billing_address_collection": null, "client_reference_id": null, "customer": "cus_FOsk5sbh3ZQpAU", "customer_email": null, "display_items": [], "mode": "setup", "setup_intent": "seti_1EzVO3HssDVaQm2PJjXHmLlM", "submit_type": null, "subscription": null, "success_url": "https://example.com/success" } }, "livemode": false, "pending_webhooks": 1, "request": { "id": null, "idempotency_key": null }, "type": "checkout.session.completed" }
次のステップに備えて setup_
ID を書き留めておきます。
SetupIntent を取得するサーバ側
setup_
ID を使用して、/v1/setup_intents/:id エンドポイントで SetupIntent オブジェクトを取得します。
レスポンス例:
{ "id": "seti_1EzVO3HssDVaQm2PJjXHmLlM", "object": "setup_intent", "application": null, "cancellation_reason": null, "client_secret": null, "created": 1561420781, "customer": "cus_FOsk5sbh3ZQpAU", "description": null, "last_setup_error": null, "livemode": false, "metadata": { "subscription_id": "sub_8epEF0PuRhmltU" }, "next_action": null, "on_behalf_of": null, "payment_method": "pm_1F0c9v2eZvKYlo2CJDeTrB4n", "payment_method_types": [ "card" ], "status": "succeeded", "usage": "off_session" }
customer
ID、subscription_
および payment_
ID を次のステップのために書き留めておきます。
注
この情報を (Webhook の処理とは異なり) Stripe API から同期的にリクエストする場合は、/v1/checkout/session エンドポイントに対するリクエスト内の SetupIntent オブジェクトを拡張することで、前のステップとこのステップを結合できます。このようにすることで、新しく作成された PaymentMethod ID にアクセスするためのネットワークリクエストを二重に作成する必要がなくなります。
デフォルトの支払い方法を設定するサーバ側
支払い方法を以降の請求書で使用する方法は、2 つあります。
- 顧客の
invoice_
として設定するsettings. default_ payment_ method - サブスクリプションの
default_
として設定するpayment_ method
顧客に invoice_
を設定すると、その顧客のそれ以降のすべての請求書が、指定された支払い方法で支払われることになります。
サブスクリプションに default_
を設定すると、そのサブスクリプションのそれ以降の請求書はすべて、指定されたその支払い方法で支払われることになり、関連付けられた顧客に設定された invoice_
が上書されます。
顧客に invoice_settings.default_payment_method を設定する
取得した顧客 ID と PaymentMethod ID を使用して、/v1/customers/:id エンドポイントで、顧客に invoice_
を設定します。
この顧客の以降の請求書はすべて、設定モードの Checkout セッションで作成された新しい PaymentMethod で請求されます。
サブスクリプションに default_payment_method を設定する
取得したサブスクリプション ID と PaymentMethod ID を使用して、/v1/subscriptions/:id エンドポイントで、サブスクリプションに default_
を設定します。
このサブスクリプションの以降の請求書はすべて、セットアップモードの Checkout セッションで作成された新しい PaymentMethod で請求されます。関連付けられた顧客に設定された invoice_
はすべて上書されます。