組織内のアカウント間で顧客と決済手段を共有する公開プレビュー
複数のアカウントで、既存の顧客の顧客情報と決済手段情報を再収集することは避けましょう。
成長中の企業の多くは、事業部門ごとに財務を分離しているか、または複数地域で事業を異なる法人で運営しているため、複数の Stripe アカウントを有しています。複数の法人を持つビジネスは、組織内のアカウント間で顧客と決済手段を共有することで、以下の問題を回避できます。
- 同じ顧客から決済手段や連絡先情報を複数回にわたって再収集している
- アカウント間で顧客の連絡先と支払い情報に不整合が生じる
- 重複レコードが維持され更新される
アクセス
顧客と決済手段の共有は、現在公開プレビュー版でご利用いただけますが、次の制限があります。
- 顧客数が 1 億人未満である。
- プラットフォームの連結アカウント間で共有を行う必要はありません。
- Stripe Apps を使用していません。
制限事項
顧客と決済手段の共有は、現在公開プレビュー版でご利用いただけますが、次の制限があります。
- この機能を有効にした後で、共有からアカウントを削除することはできません。
- 顧客と決済手段は、複数のスタンドアロンアカウントまたはプラットフォームアカウントを持つ組織でのみ全体共有されます。連結アカウント間で顧客や決済手段を共有することはできません。
- アカウント間で決済手段を共有できるのは、タイプが
card
の場合のみです。他の再利用可能な決済手段はアカウントに保存できますが、他のアカウントと共有することはできません。 - ウォレットから発生したカード決済手段は共有できません。
- 個々の顧客や決済手段を選抜して共有することはできません。アカウントを有効にすると、すべての顧客と決済手段が共有されます。
はじめに
- 複数のスタンドアロンアカウント間で作業可能な組織を作成します。
- 組織とそのアカウント用のサンドボックス環境を作成すると、本番環境への移行前にシステムをテストできます。
組織内のアカウントの共有を有効にする
組織内の特定のアカウントグループまたはすべてのアカウントに対して共有を有効にできます。
- ダッシュボードの組織の設定で、顧客と決済手段の共有をクリックして設定を開始します。
- 共有を有効にするアカウントを選択し、共有をクリックします。アカウントは、少なくとも 2 つ選択する必要があります。
- Name your sharing group. Accounts can only belong to one group.
- 組織内のアカウント間で連絡先と決済手段の情報を共有することについて、顧客から同意を得たこと場合はチェックボックスをオンにします。
- 有効化をクリックします。
共有されていないアカウントの共有はいつでも有効にできますが、有効にしたアカウントの共有を元に戻すことはできません。共有を無効にする場合は、Stripe に連絡する必要があります。
共有の仕組み
共有グループ内の 1 つのアカウントが顧客を作成すると、Stripe は、グループ内の他のすべてのアカウントにその顧客を自動的に作成します。共有グループ内の各アカウントは、共有顧客の独自のインスタンスを保持しますが、インスタンスの顧客 ID は共通のものが使用されます。
共有グループ内のすべてのアカウントは、ダッシュボードまたは API を使用して顧客を更新できます。Customer
オブジェクトの次のフィールドを更新すると、共有グループ内のすべてのアカウントインスタンス間で同期されます。
アカウント内の他のフィールドを更新すると、更新を行ったアカウントの Customer
インスタンスに保存されますが、共有グループ内の他のアカウントには同期されません。同じ顧客が、異なるアカウントインスタンス間で同じ非共有フィールドに異なる値を持つことは可能です。これにより、顧客データ (専有データ、機密データ、または 1 つのアカウントにのみ関連するデータ) の完全性が保護されます。
決済手段
Customer インスタンスとは異なり、Stripe は元のアカウントにのみ決済手段を作成します。ただし、共有グループ内のすべてのアカウントは、この 1 つの決済手段インスタンスに対して請求、更新、削除を行うことができます。共有決済手段の更新 (削除を含む) は、共有グループ内のアカウントに関連付けられているすべての顧客に影響します。ただし、次のアクティビティは元のアカウントにのみ適用されます。
- Stripe は、元のアカウントに対してのみ
payment_
イベントを生成します。method. <action> - Stripe は、自動カード更新機能 (CAU) の利用手数料のみ元のアカウントに請求します。
イベントの動作
アカウントが顧客の共有フィールドを更新すると、Stripe は共有グループ内のアカウントごとに個別の customer.
イベントを生成します。アカウントが顧客の非共有フィールドを更新すると、Stripe はそのアカウントにのみ customer.
イベントを送信します。
アカウントが顧客に決済手段を関連付けると、Stripe は元のアカウントに対してのみ単一の payment_
イベントを生成します。
共有グループのすべてのアカウントで組織用の Webhook を使用してイベントをリッスンし、共有決済手段のアクティビティを把握しておくことをお勧めします。
実装のユースケース例Server-side
以下のセクションでは、組織の共有グループ内のアカウントが共有データを取得して使用する方法を示すコードサンプルを掲載しています。これらの例は、次の設定の組織を反映しています。
決済フロー中に Customer を作成する
顧客が共有グループ (Rocket Rides) のアカウントの 1 つに支払いを行います。CheckoutSession は customer_
と payment_
を有効にします。
const stripe = require('stripe')('{{SECRET_KEY_ROCKET_RIDES}}'); const session = await stripe.checkout.sessions.create({ customer_creation: 'always', line_items: [ { price_data: { currency: 'usd', product_data: { name: 'ride_service', }, unit_amount: 2000, }, quantity: 1, }, ], mode: 'payment', ui_mode: 'embedded', return_url: 'https://checkout.rocket-rides.com/checkout/return?session_id={CHECKOUT_SESSION_ID}', saved_payment_method_options: { payment_method_save: 'enabled', }, });
支払いが完了すると、Stripe は新しい顧客と決済手段を共有グループ内の他のアカウントと共有します。Stripe は以下のイベントをトリガーします。
customer.
(アカウントの顧客インスタンス)created payment_
イベント (元のアカウントのみ)method. attached
別のアカウントから共有された顧客データを更新する
Rocket Deliveries は、Rocket Rides で最初に保存された共有顧客を更新します。
const stripe = require('stripe')('{{SECRET_KEY_ROCKET_DELIVERIES}}'); const customer = await stripe.customers.update(
, { email: 'jenny@example.com', metadata: { door: "front" }, } );'{{CUSTOMER_ID}}'
Stripe は、共有グループ内の各アカウントに対して customer.
イベントをトリガーします。
- アカウントの顧客インスタンスは、
email
の更新を取得します。 metadata_
は共有フィールドではないため、Rocket Delivery のアカウントのみが更新されます。door
顧客の共有決済手段を取得する
共有グループ内のすべてのアカウントは、顧客の保存済みのカードタイプの決済手段を一覧表示し、それらを使用または更新できます。
顧客が共有グループ内の複数のアカウントにまたがって決済手段を保存している場合、Stripe はパフォーマンスを優先するために取得アカウントを制限します。決済手段は、リクエストしたアカウントと、決済手段が最後に関連付けられた 4 つのアカウントからのみ取得されます。
const stripe = require('stripe')('{{SECRET_KEY_ROCKET_REPAIRS}}'); const paymentMethods = await stripe.customers.listPaymentMethods(
);'{{CUSTOMER_ID}}'
顧客の共有決済手段を更新する
共有決済手段の更新 (削除を含む) は、共有グループ内のすべてのアカウントに同期され、payment_
または payment_
イベントがトリガーされます。
const stripe = require('stripe')('{{SECRET_KEY_ROCKET_REPAIRS}}'); const paymentMethod = await stripe.paymentMethods.update(
, { "billing_details": { "address": { "city": "South San Francisco", "country": "us", "line1": "354 Oyster Point Boulevard", "line2": null, "postal_code": "94080", "state": "CA" }, }, } );'{{PAYMENT_METHOD_ID}}'
継続支払いを検討する
決済手段を変更すると、その決済手段が使用されている既存のサブスクリプションに影響する可能性があるため、注意してください。
共有決済手段を使用して支払いを受け付けるServer-side
共有グループ内の別のアカウント (Rocket Repairs など) によって作成された支払いを、特定のアカウント (Rocket Rides など) に保存されている決済手段に請求できます。
const stripe = require('stripe')('{{SECRET_KEY_ROCKET_REPAIRS}}'); const session = await stripe.checkout.sessions.create({ customer:
, line_items: [ { price_data: { currency: 'usd', product_data: { name: 'tow_service', }, unit_amount: 5000, }, quantity: 1, }, ], mode: 'payment', ui_mode: 'embedded', return_url: 'https://checkout.rocket-repairs.com/checkout/return?session_id={CHECKOUT_SESSION_ID}', saved_payment_method_options: { payment_method_save: 'enabled', }, });'{{CUSTOMER_ID}}'
支払いは、対応するアカウントと組織の取引ページに表示されます。共有グループに属していても、各アカウントは互いの支払いを確認することはできません。
共有決済手段を使用してサブスクリプションを作成するServer-side
また、共有グループ内の別のアカウントによって最初に保存された顧客のサブスクリプションを作成することもできます。
const stripe = require('stripe')('{{SECRET_KEY_ROCKET_REPAIRS}}'); const session = await stripe.checkout.sessions.create({ customer:
, line_items: [ { price_data: { currency: 'usd', product_data: { name: 'basic-roadside-service', }, unit_amount: 2500, }, quantity: 1, }, ], mode: 'subscription', ui_mode: 'embedded', return_url: 'https://checkout.rocket-repairs.com/checkout/return?session_id={CHECKOUT_SESSION_ID}', saved_payment_method_options: { payment_method_save: 'enabled', }, });'{{CUSTOMER_ID}}'