Abrufen von Abonnementinformationen mit Stripe-Metadaten

In diesem Thema erfahren Sie, wie Sie Abonnementinformationen, die mit benutzerdefinierten Stripe-Metadaten verknüpft sind, mithilfe der Stripe-API abrufen können.

Überblick

Brightcove fügt benutzerdefinierte Metadaten zu Stripe-Abonnements hinzu, mit denen Sie den beim Erstellen des Abonnements verwendeten Gerätetyp des Betrachters identifizieren können. Sie können die Stripe-API abfragen, um nach Abonnements zu suchen, die mit den benutzerdefinierten Metadaten verknüpft sind. Sie können auch Webhooks hinzufügen, um auf Stripe-Ereignisse zu warten.

In diesem Abschnitt erfahren Sie, wie Sie die folgenden Schritte durchführen:

  • Verwenden Sie die Stripe-API, um nach bestimmten Metadaten in jedem Abonnement/Kauf zu suchen und eine Liste zurückzugeben
  • Erstellen Sie einen Webhook, um auf Stripe-Ereignisse zu warten

Voraussetzungen

Um die Stripe-API wie in diesem Thema beschrieben zu verwenden, benötigen Sie Folgendes:

  • Stripe-Konto
  • Postman oder eine andere API-Plattform

    Sie können die API-Plattform Ihrer Wahl verwenden, um mit der Stripe-API zu interagieren, aber für diese Beispiele werden wir Postman verwenden.

Verstehen der Stripe-API

Basis-URL

Die Basis-URL für die Stripe-API lautet:

https://api.stripe.com

Authentifizierung

Anfragen werden mit Ihrem API-Schlüssel in der authentifiziert Authorization Header:

Authorization: Bearer {api_key}

API-Sammlung

Die Stripe-API-Sammlung wird innerhalb des öffentlichen Postman-Arbeitsbereichs von Stripe gehostet. So können Sie vom öffentlichen Arbeitsbereich in Ihren eigenen überwechseln.

Wenn Sie die Sammlung nicht aus dem öffentlichen Arbeitsbereich forken möchten, können Sie sie aus dem stripe-postman GitHub-Repository importieren.

Erstellen einer Postman-Umgebung

Sie können die API-Plattform Ihrer Wahl verwenden, um mit der Stripe-API zu interagieren, aber für diese Beispiele werden wir Postman verwenden.

  1. Melden Sie sich an oder erstellen Sie ein Konto bei Postman.
  2. Forken Sie entweder die Umgebungsvorlage im öffentlichen Arbeitsbereich von Postman Stripe, oder erstellen Sie eine neue Umgebung in Postman. Wir werden eine neue Umgebung schaffen.
  3. Klicken Sie in Ihrem Arbeitsbereich auf Neu.

    neu erstellen
  4. Wählen Sie im Dialogfeld die Option Umgebung.

    umgebung auswählen
  5. Fügen Sie Ihren geheimen Schlüssel als Umgebungsvariable hinzu und klicken Sie auf Speichern.

    variable für geheimen Schlüssel erstellen
  6. Klicken Sie auf Registerkarten-Symbol hinzufügen , um eine neue Registerkarte zu öffnen.
  7. Gehen Sie im Anforderungsdialog wie folgt vor:

    • Berechtigung auswählen
    • Wählen Sie als Typ Bearer Token
    • Geben Sie für Token ein {{secret_key}}

    Wenn Ihre Umgebung korrekt eingerichtet ist, sollten Sie Ihren geheimen Schlüsselwert sehen, wenn Sie mit der Maus über die secret_key Variable.

    maus über Taste variabel
  8. Klicken Sie auf Speichern.
  9. Gehen Sie in dem Dialogfenster wie folgt vor:
    • Name der Anfrage hinzufügen
    • Wählen oder erstellen Sie eine neue Sammlung
    • Klicken speichern
    anfrage speichern
  10. Sie können jetzt eine erstellen GET Anfrage an die Stripe-API.

    Umwelt geschaffen

Suche nach Abonnements mit Metadaten

In diesem Abschnitt werden Sie die Stripe-API verwenden, um nach Abonnements zu suchen, die benutzerdefinierte Metadaten haben.

Benutzerdefinierte Metadaten

Nennen Wert
device_type Werte:
  • androidtv
  • firetv
  • lgtv
  • nettv
  • operatv
  • panasonic
  • samsung

Schritte

  1. Kehren Sie zu der Postman-Umgebung zurück, die Sie im vorherigen Abschnitt erstellt haben.
  2. Für die GET Anfrage, fügen Sie Folgendes in die Anfrage-URL ein. Verwenden Sie den Wert des Gerätetyps Ihrer Wahl.

    https://api.stripe.com/v1/subscriptions/search?query=metadata["device_type"]:"samsung"

    Samsung-Abonnements erhalten
  3. Klicken Senden.
  4. Wenn Sie den folgenden Fehler mit Ihrer GET Anfrage,

    Stripe API-Versionsfehler

    stellen Sie sicher, dass Sie die aktuelle Version der Stripe-API verwenden. Sie können dies tun, indem Sie die folgende Kopfzeile hinzufügen:

    • KEY ist „Stripe-Version“
    • VALUE ist „2020-08-27" (oder neueste Version)
    Kopfzeile der Stripe-Version

Antwort

Die API-Antwort sollte Abonnements mit Metadaten für enthalten Samsung:yes.

Beachten Sie, dass die Antwort Folgendes enthält:

"metadata": {
    "Samsung": "yes"
},

API-Antwort

Ihre Antwort sollte ungefähr so aussehen:

{
  "object": "search_result",
  "data": [
      {
          "id": "sub_1L3jAgFzWFPFNFjqFpyUF8XY",
          "object": "subscription",
          "application": null,
          "application_fee_percent": null,
          "automatic_tax": {
              "enabled": false
          },
          "billing_cycle_anchor": 1653581061,
          "billing_thresholds": null,
          "cancel_at": null,
          "cancel_at_period_end": false,
          "canceled_at": null,
          "collection_method": "charge_automatically",
          "created": 1653581061,
          "current_period_end": 1656259461,
          "current_period_start": 1653581061,
          "customer": "cus_LlFcWXPXftQibf",
          "days_until_due": null,
          "default_payment_method": null,
          "default_source": null,
          "default_tax_rates": [],
          "description": null,
          "discount": null,
          "ended_at": null,
          "items": {
              "object": "list",
              "data": [
                  {
                      "id": "si_LlFgWbs9lqlwOF",
                      "object": "subscription_item",
                      "billing_thresholds": null,
                      "created": 1653581062,
                      "metadata": {},
                      "plan": {
                          "id": "price_1L3j69FzWFPFNFjqpEIV4RMb",
                          "object": "plan",
                          "active": true,
                          "aggregate_usage": null,
                          "amount": 100,
                          "amount_decimal": "100",
                          "billing_scheme": "per_unit",
                          "created": 1653580781,
                          "currency": "eur",
                          "interval": "month",
                          "interval_count": 1,
                          "livemode": false,
                          "metadata": {},
                          "nickname": null,
                          "product": "prod_LlFbyvOQ6dpLXF",
                          "tiers_mode": null,
                          "transform_usage": null,
                          "trial_period_days": null,
                          "usage_type": "licensed"
                      },
                      "price": {
                          "id": "price_1L3j69FzWFPFNFjqpEIV4RMb",
                          "object": "price",
                          "active": true,
                          "billing_scheme": "per_unit",
                          "created": 1653580781,
                          "currency": "eur",
                          "livemode": false,
                          "lookup_key": null,
                          "metadata": {},
                          "nickname": null,
                          "product": "prod_LlFbyvOQ6dpLXF",
                          "recurring": {
                              "aggregate_usage": null,
                              "interval": "month",
                              "interval_count": 1,
                              "trial_period_days": null,
                              "usage_type": "licensed"
                          },
                          "tax_behavior": "unspecified",
                          "tiers_mode": null,
                          "transform_quantity": null,
                          "type": "recurring",
                          "unit_amount": 100,
                          "unit_amount_decimal": "100"
                      },
                      "quantity": 1,
                      "subscription": "sub_1L3jAgFzWFPFNFjqFpyUF8XY",
                      "tax_rates": []
                  }
              ],
              "has_more": false,
              "total_count": 1,
              "url": "/v1/subscription_items?subscription=sub_1L3jAgFzWFPFNFjqFpyUF8XY"
          },
          "latest_invoice": "in_1L3jAgFzWFPFNFjq8YFoU6R3",
          "livemode": false,
          "metadata": {
              "Samsung": "yes"
          },
          "next_pending_invoice_item_invoice": null,
          "pause_collection": null,
          "payment_settings": {
              "payment_method_options": null,
              "payment_method_types": null,
              "save_default_payment_method": "off"
          },
          "pending_invoice_item_interval": null,
          "pending_setup_intent": null,
          "pending_update": null,
          "plan": {
              "id": "price_1L3j69FzWFPFNFjqpEIV4RMb",
              "object": "plan",
              "active": true,
              "aggregate_usage": null,
              "amount": 100,
              "amount_decimal": "100",
              "billing_scheme": "per_unit",
              "created": 1653580781,
              "currency": "eur",
              "interval": "month",
              "interval_count": 1,
              "livemode": false,
              "metadata": {},
              "nickname": null,
              "product": "prod_LlFbyvOQ6dpLXF",
              "tiers_mode": null,
              "transform_usage": null,
              "trial_period_days": null,
              "usage_type": "licensed"
          },
          "quantity": 1,
          "schedule": null,
          "start_date": 1653581061,
          "status": "active",
          "test_clock": null,
          "transfer_data": null,
          "trial_end": null,
          "trial_start": null
      }
  ],
  "has_more": false,
  "next_page": null,
  "url": "/v1/subscriptions/search"

Stripe Webhooks verwenden

Ihre Brightcove Beacon-App kann auf Ereignisse in Ihrem Stripe-Konto warten, und Sie können Webhooks verwenden, um Stripe zu ermöglichen, Echtzeitbenachrichtigungen an Ihre App zu senden, oder Sie können einen Webhook als Endpunkt verwenden.

Weitere Informationen finden Sie in der Stripe-Referenz für eingehende Webhooks .

Beachten Sie, dass jede Antwort Folgendes enthält:

"metadata": {
    "Samsung": "yes"
},

Veranstaltungen

Hier sind einige Ereignisse, auf die Sie achten können:

kunden.abonnement.erstellt

Ein Stripe-Webhook kann auf die lauschen customer.subscription.created Fall.

API-Antwort

Ihre Antwort sollte ungefähr so aussehen:

{
  "object": {
    "id": "sub_1L3jAgFzWFPFNFjqFpyUF8XY",
    "object": "subscription",
    "application": null,
    "application_fee_percent": null,
    "automatic_tax": {
      "enabled": false
    },
    "billing": "charge_automatically",
    "billing_cycle_anchor": 1653581061,
    "billing_thresholds": null,
    "cancel_at": null,
    "cancel_at_period_end": false,
    "canceled_at": null,
    "collection_method": "charge_automatically",
    "created": 1653581061,
    "current_period_end": 1656259461,
    "current_period_start": 1653581061,
    "customer": "cus_LlFcWXPXftQibf",
    "days_until_due": null,
    "default_payment_method": null,
    "default_source": null,
    "default_tax_rates": [
    ],
    "description": null,
    "discount": null,
    "ended_at": null,
    "invoice_customer_balance_settings": {
      "consume_applied_balance_on_void": true
    },
    "items": {
      "object": "list",
      "data": [
        {
          "id": "si_LlFgWbs9lqlwOF",
          "object": "subscription_item",
          "billing_thresholds": null,
          "created": 1653581062,
          "metadata": {
          },
          "plan": {
            "id": "price_1L3j69FzWFPFNFjqpEIV4RMb",
            "object": "plan",
            "active": true,
            "aggregate_usage": null,
            "amount": 100,
            "amount_decimal": "100",
            "billing_scheme": "per_unit",
            "created": 1653580781,
            "currency": "eur",
            "interval": "month",
            "interval_count": 1,
            "livemode": false,
            "metadata": {
            },
            "name": "Beacon Metadata",
            "nickname": null,
            "product": "prod_LlFbyvOQ6dpLXF",
            "statement_descriptor": null,
            "tiers": null,
            "tiers_mode": null,
            "transform_usage": null,
            "trial_period_days": null,
            "usage_type": "licensed"
          },
          "price": {
            "id": "price_1L3j69FzWFPFNFjqpEIV4RMb",
            "object": "price",
            "active": true,
            "billing_scheme": "per_unit",
            "created": 1653580781,
            "currency": "eur",
            "livemode": false,
            "lookup_key": null,
            "metadata": {
            },
            "nickname": null,
            "product": "prod_LlFbyvOQ6dpLXF",
            "recurring": {
              "aggregate_usage": null,
              "interval": "month",
              "interval_count": 1,
              "trial_period_days": null,
              "usage_type": "licensed"
            },
            "tax_behavior": "unspecified",
            "tiers_mode": null,
            "transform_quantity": null,
            "type": "recurring",
            "unit_amount": 100,
            "unit_amount_decimal": "100"
          },
          "quantity": 1,
          "subscription": "sub_1L3jAgFzWFPFNFjqFpyUF8XY",
          "tax_rates": [
          ]
        }
      ],
      "has_more": false,
      "total_count": 1,
      "url": "/v1/subscription_items?subscription=sub_1L3jAgFzWFPFNFjqFpyUF8XY"
    },
    "latest_invoice": "in_1L3jAgFzWFPFNFjq8YFoU6R3",
    "livemode": false,
    "metadata": {
      "Samsung": "yes"
    },
    "next_pending_invoice_item_invoice": null,
    "pause_collection": null,
    "payment_settings": {
      "payment_method_options": null,
      "payment_method_types": null,
      "save_default_payment_method": "off"
    },
    "pending_invoice_item_interval": null,
    "pending_setup_intent": null,
    "pending_update": null,
    "plan": {
      "id": "price_1L3j69FzWFPFNFjqpEIV4RMb",
      "object": "plan",
      "active": true,
      "aggregate_usage": null,
      "amount": 100,
      "amount_decimal": "100",
      "billing_scheme": "per_unit",
      "created": 1653580781,
      "currency": "eur",
      "interval": "month",
      "interval_count": 1,
      "livemode": false,
      "metadata": {
      },
      "name": "Beacon Metadata",
      "nickname": null,
      "product": "prod_LlFbyvOQ6dpLXF",
      "statement_descriptor": null,
      "tiers": null,
      "tiers_mode": null,
      "transform_usage": null,
      "trial_period_days": null,
      "usage_type": "licensed"
    },
    "quantity": 1,
    "schedule": null,
    "start": 1653581061,
    "start_date": 1653581061,
    "status": "active",
    "tax_percent": null,
    "test_clock": null,
    "transfer_data": null,
    "trial_end": null,
    "trial_start": null
  },
  "previous_attributes": {
    "metadata": {
      "Samsung": null
    }
  }
}

kunden.abonnement.aktualisiert

Ein Stripe-Webhook kann auf die lauschen customer.subscription.updated Fall.

API-Antwort

Ihre Antwort sollte ungefähr so aussehen:

{
  "object": {
    "id": "sub_1L3jAgFzWFPFNFjqFpyUF8XY",
    "object": "subscription",
    "application": null,
    "application_fee_percent": null,
    "automatic_tax": {
      "enabled": false
    },
    "billing": "charge_automatically",
    "billing_cycle_anchor": 1653581061,
    "billing_thresholds": null,
    "cancel_at": null,
    "cancel_at_period_end": false,
    "canceled_at": null,
    "collection_method": "charge_automatically",
    "created": 1653581061,
    "current_period_end": 1656259461,
    "current_period_start": 1653581061,
    "customer": "cus_LlFcWXPXftQibf",
    "days_until_due": null,
    "default_payment_method": null,
    "default_source": null,
    "default_tax_rates": [
    ],
    "description": null,
    "discount": null,
    "ended_at": null,
    "invoice_customer_balance_settings": {
      "consume_applied_balance_on_void": true
    },
    "items": {
      "object": "list",
      "data": [
        {
          "id": "si_LlFgWbs9lqlwOF",
          "object": "subscription_item",
          "billing_thresholds": null,
          "created": 1653581062,
          "metadata": {
          },
          "plan": {
            "id": "price_1L3j69FzWFPFNFjqpEIV4RMb",
            "object": "plan",
            "active": true,
            "aggregate_usage": null,
            "amount": 100,
            "amount_decimal": "100",
            "billing_scheme": "per_unit",
            "created": 1653580781,
            "currency": "eur",
            "interval": "month",
            "interval_count": 1,
            "livemode": false,
            "metadata": {
            },
            "name": "Beacon Metadata",
            "nickname": null,
            "product": "prod_LlFbyvOQ6dpLXF",
            "statement_descriptor": null,
            "tiers": null,
            "tiers_mode": null,
            "transform_usage": null,
            "trial_period_days": null,
            "usage_type": "licensed"
          },
          "price": {
            "id": "price_1L3j69FzWFPFNFjqpEIV4RMb",
            "object": "price",
            "active": true,
            "billing_scheme": "per_unit",
            "created": 1653580781,
            "currency": "eur",
            "livemode": false,
            "lookup_key": null,
            "metadata": {
            },
            "nickname": null,
            "product": "prod_LlFbyvOQ6dpLXF",
            "recurring": {
              "aggregate_usage": null,
              "interval": "month",
              "interval_count": 1,
              "trial_period_days": null,
              "usage_type": "licensed"
            },
            "tax_behavior": "unspecified",
            "tiers_mode": null,
            "transform_quantity": null,
            "type": "recurring",
            "unit_amount": 100,
            "unit_amount_decimal": "100"
          },
          "quantity": 1,
          "subscription": "sub_1L3jAgFzWFPFNFjqFpyUF8XY",
          "tax_rates": [
          ]
        }
      ],
      "has_more": false,
      "total_count": 1,
      "url": "/v1/subscription_items?subscription=sub_1L3jAgFzWFPFNFjqFpyUF8XY"
    },
    "latest_invoice": "in_1L3jAgFzWFPFNFjq8YFoU6R3",
    "livemode": false,
    "metadata": {
      "Samsung": "yes"
    },
    "next_pending_invoice_item_invoice": null,
    "pause_collection": null,
    "payment_settings": {
      "payment_method_options": null,
      "payment_method_types": null,
      "save_default_payment_method": "off"
    },
    "pending_invoice_item_interval": null,
    "pending_setup_intent": null,
    "pending_update": null,
    "plan": {
      "id": "price_1L3j69FzWFPFNFjqpEIV4RMb",
      "object": "plan",
      "active": true,
      "aggregate_usage": null,
      "amount": 100,
      "amount_decimal": "100",
      "billing_scheme": "per_unit",
      "created": 1653580781,
      "currency": "eur",
      "interval": "month",
      "interval_count": 1,
      "livemode": false,
      "metadata": {
      },
      "name": "Beacon Metadata",
      "nickname": null,
      "product": "prod_LlFbyvOQ6dpLXF",
      "statement_descriptor": null,
      "tiers": null,
      "tiers_mode": null,
      "transform_usage": null,
      "trial_period_days": null,
      "usage_type": "licensed"
    },
    "quantity": 1,
    "schedule": null,
    "start": 1653581061,
    "start_date": 1653581061,
    "status": "active",
    "tax_percent": null,
    "test_clock": null,
    "transfer_data": null,
    "trial_end": null,
    "trial_start": null
  },
  "previous_attributes": {
    "metadata": {
      "Samsung": null
    }
  }
}

Einschränkungen

Es gibt einige Einschränkungen bei der Verwendung der Stripe-API:

  • Zitat Stripe - "Verwenden Sie die Suche nicht in Lese-nach-Schreib-Abläufen, bei denen strikte Konsistenz erforderlich ist. Unter normalen Betriebsbedingungen sind die Daten in weniger als einer Minute abrufbar. Gelegentlich kann sich die Weitergabe neuer oder aktualisierter Daten bei Ausfällen um bis zu einer Stunde verzögern. Die Suchfunktion ist für Händler in Indien nicht verfügbar
'