メタデータ
メタデータを使用して追加情報を保存する方法をご紹介します。
Metadata (メタデータ) は、特定の Stripe オブジェクトの属性であり、キーと値のペアの形式で構造化された多くの情報をオブジェクトに格納して、自社で使用したり、参照したりすることができます。たとえば、お客様のシステムにおけるユーザーの一意の識別子を、Stripe の Customer (顧客) オブジェクトに保存できます。
設定
データ
以下のデータ制限内で合計 50 件のキーと値のペアを追加できます。
- キー: 上限 40 文字。角括弧 (
[
]
) はキーに含めることができません。 - 値: 上限 500 文字。
システムでこれ以上の領域が必要な場合は、データを外部データベースに保存し、キーと値のペアを使用して外部オブジェクトの ID
を metadata
に保存します。
Radar でメタデータを使用する場合を除き、 Stripe は支払いのオーソリや拒否などにはメタデータを使用しません。また、表示することを希望しない限り、メタデータは顧客に表示されません。
セキュリティのヒント
銀行口座情報やクレジットカードの詳細などの機密情報は、メタデータに保存しないでください。
リクエスト
Stripeは、リクエストでシークレットキーを使用した場合にのみメタデータを返します。Stripe.js やモバイル SDK のクライアント側のリクエストなど、公開可能なキーのリクエストに応じてオブジェクトからのメタデータを非表示にします。
メタデータを追加および更新する
API を使用して、メタデータにキーと値のペアを追加し、メタデータの値を更新し、キーを置き換えます。さまざまなアクションを 1 つのリクエストに組み合わせて、複数のメタデータの追加、更新、削除を同時に実行できます。
キーと値のペアを追加する
オブジェクトを作成するときにメタデータにキーと値のペアを追加するには、オブジェクト作成リクエストでキーと値を指定します。
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "cms_id": "6573" } ... }
既存のメタデータにキーと値のペアを追加する
既存のオブジェクトのメタデータにキーと値のペアを追加するには、更新リクエストでキーと値を指定します。
注
このパラメーターはマージメカニズムを使用するため、既存のメタデータに影響を与えることなく、更新コールで新しいキーと値のペアをオブジェクトに追加できます。たとえば、Customer オブジェクトに key1
と key2
がある場合、これを更新して key3
を追加すると、更新されたオブジェクトには 3 つすべてのキーが含まれます。
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "cms_id": "6573", } ... }
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "loyalty_program": "no", "cms_id": "6573", } ... }
メタデータ値を更新する
メタデータ内の既存のキーの値を更新するには、既存のキーを使用して新しい値を渡します。たとえば、既存のキーと値のペア "loyalty_
を "loyalty_
に更新して、Customer (顧客) オブジェクトを更新できます。
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "loyalty_program": "no" } ... }
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "loyalty_program": "yes", } ... }
メタデータキーを更新する
既存の値を持つキーを更新するには、キーを削除し、その値を新しいキーに渡します。たとえば、Customer (顧客) オブジェクトを更新して、その "loyalty_
キーを削除し、キーの値 "yes"
を新しい "rewards_
キーに渡すことができます。
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "loyalty_program": "yes" } ... }
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "rewards_program": "yes" } ... }
メタデータを削除する
API を使用して、1 つのキーまたはキーセット全体を削除します。
1 つのキーを削除する
メタデータからキーを削除するには、値として空の文字列をキーに渡します。
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "loyalty_program": "yes", "loyalty_member_id": "12345678" } ... }
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "loyalty_program": "yes", } ... }
すべてのキーを削除する
すべてのキーを同時に削除するには、metadata
属性の値として空のオブジェクトを渡します。
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": { "loyalty_program": "yes", "loyalty_member_id": "12345678" } ... }
{ "id": "cus_NffrFeUfNV2Hib", "object": "customer", ... "metadata": {} ... }
メタデータを別のオブジェクトにコピーする
オブジェクトのメタデータの関連するオブジェクトへのコピーは自動的には行われません。オブジェクトのメタデータを表示するには、そのオブジェクトを調べる必要があります。関連オブジェクトからメタデータを取得するには、カスタムロジックを構築して、関連オブジェクトを見つけて調べます。メタデータをあるオブジェクトから別のオブジェクトに明示的にコピーするには、自社でフローを構築する必要があります。
例外
一部のケースでは、後方互換性やその他の固有のシナリオのために、Stripe はオブジェクト間でメタデータをコピーします。
オブジェクトのマッピング | 説明 |
---|---|
PaymentIntent → Charge (支払い) | Payment Intent が Charge を作成すると、メタデータは 1 回限りのスナップショットで Charge にコピーされます。 Payment Intent のメタデータに対する更新は、Charge には適用されません。 |
Payment Link (決済用の URL リンク) → Checkout セッション | Payment Link で Checkout セッションを作成すると、メタデータが 1 回限りのスナップショットで Checkout Session にコピーされます。 Payment Link のメタデータに対する更新は、Checkout Session には適用されません。 |
Subscription (サブスクリプション) → Invoice (請求書) | Subscription によって Invoice が作成されると、メタデータは 1 回限りのスナップショットで Invoice オブジェクトの subscription_details.metadata 属性にコピーされます。サブスクリプションのメタデータの更新は、Invoice には適用されません。 |
Subscription (サブスクリプション) → Invoice Line Item (請求書のラインアイテム) | 請求書のラインアイテムの type が subscription に設定されると、サブスクリプションの現在のメタデータが表示されます。 |
メタデータを間接的に設定する
一部のエンドポイントは、別のパラメーター内にネストされた metadata
パラメーターを受け入れます。オブジェクトを作成する際にこれらのパラメーターを使用して、基になるオブジェクトにメタデータを設定できます。たとえば、Checkout セッションを作成する際に payment_
を使用して、セッションが作成する基になる支払いインテントにメタデータを提供し、設定することができます。
オブジェクトのマッピング | 説明 |
---|---|
Checkout セッション → PaymentIntent | payment_intent_data.metadata 属性で送信されたデータは、基礎となる PaymentIntent のメタデータに保存されます。 |
Checkout セッション → Subscription (サブスクリプション) | Data sent with the subscription_data.metadata attribute saves to the underlying Subscription’s metadata. |
Payment Link (決済用の URL リンク) → PaymentIntent | payment_intent_data.metadata 属性を指定して送信されたデータは、決済用の URL リンクで作成される各 PaymentIntent のメタデータに保存されます。 |
Payment Link (決済用の URL リンク) → Subscription (サブスクリプション) | subscription_data.metadata 属性を指定して送信されたデータは、決済用の URL リンクで作成される各サブスクリプションのメタデータに保存されます。 |
Price (価格) → Product (商品) | product_data.metadata 属性で送信されたデータは、関連付けられた商品のメタデータに保存されます。 |
Subscription Schedule (サブスクリプションスケジュール) → Subscription (サブスクリプション) | phases.metadata 属性を指定して送信されたデータは、フェーズの開始時に基になるサブスクリプションのメタデータに保存されます。 |
Quote (見積もり) → Subscription (サブスクリプション) | Data sent with the subscription_data.metadata attribute saves to the Subscription’s metadata when a Quote is accepted. |
イベントと Webhook エンドポイント
Stripe が Webhook エンドポイントに Event (イベント) を送信すると、対応するオブジェクトとオブジェクトに含まれるメタデータが格納されます。これにより、Webhook ハンドラは、Stripe オブジェクトに設定されたメタデータを受け取り、それを注文のフルフィルメントなどのダウンストリームのプロセスに渡すことができます。
たとえば、顧客が Checkout セッション を使用して購入したときにカート ID を含めるには、Checkout セッションの作成時にメタデータとして指定します。
顧客が決済プロセスを完了すると、Webhook エンドポイントに Checkout Session オブジェクトのメタデータが含まれた checkout.session.completed イベントが送信されます。そのイベントをリッスンするように Webhook を設定し、メタデータにアクセスしてデータを処理する際に使用できるようにする必要があります。
{ "id": "evt_1P8pqUAgEBCHsfP6JfNctbLv", "object": "event", "api_version": "2022-11-15", "created": 1713903702, "data": { "object": { "id": "cs_test_a1aDQuoXLoddIOV9iOvZRgKAtPoRIfFkYHBWxF9AQAPlGG3STB1ndqqaUw", "object": "checkout.session", ... "metadata": { "cart_id": "6943" },
メタデータを検索する
特定の書式を使用して、サポート対象のオブジェクトに既存のメタデータを検索できます。これには、メタデータフィールドに特定の値があるレコードの検索や、オブジェクトにメタデータキーが存在するかどうかの確認が含まれます。メタデータの検索で詳細をご確認ください。
メタデータと Radar を使用して不正利用を防止する
Radar でメタデータを使用して、不正利用の防止に役立つカスタムルールを作成します。詳しくは、Radar のメタデータ属性をご覧ください。