# 組織内のアカウント間で顧客と決済手段を共有する 複数のアカウントで、既存の顧客の顧客情報と決済手段情報を再収集することは避けましょう。 成長中の企業の多くは、事業部門ごとに財務を分離しているか、または複数地域で事業を異なる法人で運営しているため、複数の Stripe アカウントを有しています。複数の法人を持つビジネスは、組織内のアカウント間で顧客と決済手段を共有することで、以下の問題を回避できます。 - 同じ顧客から決済手段や連絡先情報を複数回にわたって再収集している - アカウント間で顧客の連絡先と支払い情報に不整合が生じる - 重複レコードが維持され更新される ## 制限事項 顧客と支払い方法の共有は現在 [パブリックプレビュー](https://docs.stripe.com/release-phases.md) 段階ですが、次の制限があります: - 決済手段 ([pm_](https://docs.stripe.com/api/payment_methods/object.md)) を共有できるのは、タイプが`カード`の場合のみです。これには、Apple Pay、Google Pay、Link などの[ウォレット](https://docs.stripe.com/payments/wallets.md)から発行されたカードが含まれます。 - レガシーソース ([src_](https://docs.stripe.com/api/sources/object.md)) またはカード ([card_](https://docs.stripe.com/api/cards/object.md)) を共有することはできません。 - 他の支払い方法 (ACH や Klarna など) を 1 つのアカウントの共有顧客に関連付けることはできますが、組織内の他のアカウントと共有されることはありません。 - 機能を有効にした後で共有を無効にすることはできません。 - 連結アカウントが直接組織に属していない限り、連結アカウント間で顧客や支払い方法を共有することはできません。 - 個人顧客や支払い方法を選択して共有することはできません。共有を有効にすると、すべての顧客と支払い方法が共有されます。 - インドで発行された共有カードはオフセッションでは請求できません。 ## Before you begin 1. [複数のスタンドアロンアカウント](https://docs.stripe.com/get-started/account/orgs/build.md#create-org)間で作業可能な[組織を作成](https://docs.stripe.com/get-started/account/orgs/setup.md#standalone-accounts)します。 1. 組織とそのアカウント用の[サンドボックス環境を作成する](https://docs.stripe.com/get-started/account/orgs/build.md#create-organization-sandboxes)と、本番環境への移行前にシステムをテストできます。 > #### 顧客の同意の取得 > > 貴社アカウントおよび法人間での共有を有効にする前に、顧客から顧客データと決済手段の共有に関する同意を得る必要があります。同意の回収は Stripe ではなく、加盟店の責任となります。 ## 組織内のアカウントの共有を有効にする 組織内の特定のアカウントグループまたはすべてのアカウントに対して共有を有効にできます。 1. ダッシュボードの[組織の設定](https://dashboard.stripe.com/org/settings)で、**顧客と決済手段の共有**をクリックして設定を開始します。 1. 共有を有効にするアカウントを選択し、**共有**をクリックします。アカウントは、少なくとも 2 つ選択する必要があります。 1. 共有グループに名前を付けます。アカウントが属することができるグループは 1 つのみです。 1. 組織内のアカウント間で連絡先と決済手段の情報を共有することについて、顧客から同意を得たこと場合はチェックボックスをオンにします。 1. **有効化**をクリックします。 > #### 共有は取り消しできません > > 共有されていないアカウントの共有はいつでも有効にできますが、有効にしたアカウントの共有を元に戻すことはできません。共有を無効にする場合は、Stripe に連絡する必要があります。 ## 共有の仕組み 共有グループ内の 1 つのアカウントが顧客を作成すると、Stripe は、グループ内の他のすべてのアカウントにその顧客を自動的に作成します。共有グループ内の各アカウントは、共有顧客の独自のインスタンスを保持しますが、インスタンスの顧客 ID は共通のものが使用されます。 共有グループ内のすべてのアカウントは、ダッシュボードまたは API を使用して顧客を更新できます。`Customer` オブジェクトの次のフィールドを更新すると、共有グループ内のすべてのアカウントインスタンス間で同期されます。 - [名前](https://docs.stripe.com/api/customers/object.md#customer_object-name) - [電子メール](https://docs.stripe.com/api/customers/object.md#customer_object-email) - [住所](https://docs.stripe.com/api/customers/object.md#customer_object-address) - [電話](https://docs.stripe.com/api/customers/object.md#customer_object-phone) - [description](https://docs.stripe.com/api/customers/object.md#customer_object-description) - [tax_id](https://docs.stripe.com/api/customers/object.md#customer_object-tax-ids) - [preferred_locales](https://docs.stripe.com/api/customers/object.md#customer_object-preferred_locales) - [metadata](https://docs.stripe.com/api/customers/object.md#customer_object-metadata) - [shipping](https://docs.stripe.com/api/customers/object.md#customer_object-shipping) - [business_name](https://docs.stripe.com/api/customers/object.md#customer_object-business_name) - [tax_exempt](https://docs.stripe.com/api/customers/object.md#customer_object-tax_exempt) - [invoice_prefix](https://docs.stripe.com/api/customers/object.md#customer_object-invoice_prefix) アカウント内の他のフィールドを更新すると、更新を行ったアカウントの `Customer` インスタンスに保存されますが、共有グループ内の他のアカウントには同期されません。同じ顧客が、異なるアカウントインスタンス間で同じ非共有フィールドに異なる値を持つことは可能です。これにより、顧客データ (専有データ、機密データ、または 1 つのアカウントにのみ関連するデータ) の完全性が保護されます。 ### 決済手段 Customer インスタンスとは異なり、Stripe は元のアカウントにのみ決済手段を作成します。ただし、共有グループ内のすべてのアカウントは、この 1 つの決済手段インスタンスに対して請求、更新、削除を行うことができます。共有決済手段の更新 (削除を含む) は、共有グループ内のアカウントに関連付けられているすべての顧客に影響します。ただし、次のアクティビティは元のアカウントにのみ適用されます。 - Stripe は、元のアカウントに対してのみ `payment_method.` イベントを生成します。 - Stripe は、[自動カード更新機能 (CAU)](https://docs.stripe.com/get-started/data-migrations/payment-method-imports.md#cau) 手数料を元のアカウントにのみ請求します。 ### イベントの動作 アカウントが顧客の共有フィールドを更新すると、Stripe は共有グループ内のアカウントごとに個別の `customer.updated` イベントを生成します。アカウントが顧客の非共有フィールドを更新すると、Stripe はそのアカウントにのみ `customer.updated` イベントを送信します。 アカウントが顧客に決済手段を関連付けると、Stripe は元のアカウントに対してのみ単一の `payment_method.attached` イベントを生成します。 共有グループのすべてのアカウントで[組織用の Webhook](https://docs.stripe.com/webhooks.md#webhook-endpoint-def) を使用してイベントをリッスンし、共有決済手段のアクティビティを把握しておくことをお勧めします。 ## 実装のユースケース例(Server-side) 以下のセクションでは、組織の共有グループ内のアカウントが共有データを取得して使用する方法を示すコードサンプルを掲載しています。これらの例は、次の設定の組織を反映しています。 3 つのスタンドアロンアカウントを持つ標準の組織設定。 (See full diagram at https://docs.stripe.com/get-started/account/orgs/sharing/customers-payment-methods) ### 決済フロー中に Customer を作成する 顧客が共有グループ (Rocket Rides) のアカウントの 1 つに支払いを行います。[CheckoutSession](https://docs.stripe.com/api/checkout/sessions/create.md) は `customer_creation` と `payment_method_save` を有効にします。 ```javascript 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_page', 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 で最初に保存された共有顧客を更新します。 ```javascript const stripe = require('stripe')('{{SECRET_KEY_ROCKET_DELIVERIES}}'); const customer = await stripe.customers.update( {{CUSTOMER_ID}}, { email: 'jenny@example.com', metadata: { door: "front" }, } ); ``` Stripe は、共有グループ内の各アカウントに対して `customer.updated` イベントをトリガーします。顧客情報のうち共有される項目であるため、各アカウントにある customer オブジェクトには `email` と `metadata` の更新が反映されます。 ### 顧客の共有決済手段を取得する 共有グループ内のすべてのアカウントは、顧客の保存済みのカードタイプの決済手段を一覧表示し、それらを使用または更新できます。 顧客が共有グループ内の複数のアカウントにまたがって決済手段を保存している場合、Stripe はパフォーマンスを優先するために取得アカウントを制限します。決済手段は、リクエストしたアカウントと、決済手段が最後に関連付けられた 4 つのアカウントからのみ取得されます。 ```javascript const stripe = require('stripe')('{{SECRET_KEY_ROCKET_REPAIRS}}'); const paymentMethods = await stripe.customers.listPaymentMethods({{CUSTOMER_ID}}); ``` ### 顧客の共有決済手段を更新する 共有決済手段の更新 (削除を含む) は、共有グループ内のすべてのアカウントに同期され、`payment_method.updated` または `payment_method.detached` イベントがトリガーされます。 ```javascript const stripe = require('stripe')('{{SECRET_KEY_ROCKET_REPAIRS}}'); const paymentMethod = await stripe.paymentMethods.update( {{PAYMENT_METHOD_ID}}, { "billing_details": { "address": { "city": "South San Francisco", "country": "us", "line1": "354 Oyster Point Boulevard", "line2": null, "postal_code": "94080", "state": "CA" } }, } ); ``` > #### 継続支払いを検討する > > 決済手段を変更すると、その決済手段が使用されている既存のサブスクリプションに影響する可能性があるため、注意してください。 ### 共有決済手段を使用して支払いを受け付ける(Server-side) 共有グループ内の別のアカウント (Rocket Repairs など) によって作成された支払いを、特定のアカウント (Rocket Rides など) に保存されている決済手段に請求できます。 ```javascript const stripe = require('stripe')('{{SECRET_KEY_ROCKET_REPAIRS}}'); const session = await stripe.checkout.sessions.create({ customer: {{CUSTOMER_ID}}, line_items: [ { price_data: { currency: 'usd', product_data: { name: 'tow_service', }, unit_amount: 5000, }, quantity: 1, }, ], mode: 'payment', ui_mode: 'embedded_page', return_url: 'https://checkout.rocket-repairs.com/checkout/return?session_id={CHECKOUT_SESSION_ID}', saved_payment_method_options: { payment_method_save: 'enabled', }, }); ``` 支払いは、対応するアカウントと組織の**取引**ページに表示されます。共有グループに属していても、各アカウントは互いの支払いを確認することはできません。 ### 共有決済手段を使用してサブスクリプションを作成する(Server-side) また、共有グループ内の別のアカウントによって最初に保存された顧客のサブスクリプションを作成することもできます。 ```javascript const stripe = require('stripe')('{{SECRET_KEY_ROCKET_REPAIRS}}'); const session = await stripe.checkout.sessions.create({ customer: {{CUSTOMER_ID}}, line_items: [ { price_data: { currency: 'usd', product_data: { name: 'basic-roadside-service', }, unit_amount: 2500, }, quantity: 1, }, ], mode: 'subscription', ui_mode: 'embedded_page', return_url: 'https://checkout.rocket-repairs.com/checkout/return?session_id={CHECKOUT_SESSION_ID}', saved_payment_method_options: { payment_method_save: 'enabled', }, }); ```