Resumen
Brightcove está agregando metadatos personalizados a las suscripciones de Stripe que le permitirán identificar el tipo de dispositivo del espectador utilizado al crear la suscripción. Puede consultar la API de Stripe para buscar suscripciones asociadas con los metadatos personalizados. También puede agregar webhooks para escuchar eventos de Stripe.
Este tema le mostrará cómo hacer lo siguiente:
- Use la API de Stripe para buscar metadatos específicos en cualquier suscripción/compra para obtener una lista
- Cree un webhook para escuchar eventos de Stripe
Requisitos previos
Para usar la API de Stripe como se muestra en este tema, necesitará lo siguiente:
- cuenta de banda
- Postman u otra plataforma API
Puede usar la plataforma API de su elección para interactuar con la API de Stripe, pero para estos ejemplos, usaremos Postman.
Entendiendo la API de Stripe
URL base
La URL base para la API de Stripe es:
https://api.stripe.com
Autenticación
Las solicitudes se autentican con su clave API en el Authorization
encabezamiento:
Authorization: Bearer {api_key}
colección de API
La colección API de Stripe está alojada en Espacio de trabajo público de Stripe's Postman. Esto le permite pasar del espacio de trabajo público al suyo.
Si no desea bifurcar la colección desde el espacio de trabajo público, puede importarla desde el raya-cartero repositorio GitHub.
Creación de un entorno de cartero
Puede usar la plataforma API de su elección para interactuar con la API de Stripe, pero para estos ejemplos, usaremos Postman.
- Inicia sesión o crea una cuenta con Cartero.
- Bifurque la plantilla de entorno dentro del espacio de trabajo público de Postman Stripe o cree un nuevo entorno dentro de Postman. Crearemos un nuevo entorno.
-
En tu espacio de trabajo, haz clic en Nuevo.
-
En el cuadro de diálogo, seleccione Ambiente.
-
Agregue su clave secreta como una variable de entorno y haga clic en Ahorrar.
- Hacer clic para abrir una nueva pestaña.
-
En el cuadro de diálogo de solicitud, haga lo siguiente:
- Seleccione Autorización
- Para Tipo , seleccionar Ficha de portador
- Para Token, ingrese
{{secret_key}}
Si su entorno está configurado correctamente, debería ver el valor de su clave secreta cuando pasa el mouse sobre el
secret_key
variable. - Haz clic en Guardar.
- En el cuadro de diálogo, haga lo siguiente:
- Agregar un nombre de solicitud
- Elige o crea una nueva colección
- Hacer clic Ahorrar
-
Ahora está listo para crear un
GET
solicitud a la API de Stripe.
Búsqueda de suscripciones con metadatos
En esta sección, utilizará la API de Stripe para buscar suscripciones que tengan metadatos personalizados.
Metadatos personalizados
Nombre | Valor |
---|---|
device_type |
Valores:
|
Pasos
- Vuelva al entorno de Postman que creó en la sección anterior.
-
Para el
GET
solicitud, pegue lo siguiente en la URL de solicitud. Utilice el valor de tipo de dispositivo de su elección.https://api.stripe.com/v1/subscriptions/search?query=metadata["device_type"]:"samsung"
- Hacer clic Enviar.
-
Si obtiene el siguiente error con su
GET
pedido,asegúrese de estar utilizando la versión actual de la API de Stripe. Puede hacerlo agregando el siguiente encabezado:
KEY
es "versión de la raya"VALUE
es "2020-08-27" (o última versión)
Respuesta
La respuesta de la API debe contener suscripciones con metadatos para Samsung:yes
.
Observe que la respuesta contiene lo siguiente:
"metadata": {
"Samsung": "yes"
},
Respuesta de la API
Tu respuesta debería ser similar a esta:
{
"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"
Uso de webhooks de Stripe
Su aplicación Brightcove Beacon puede escuchar eventos en su cuenta de Stripe, y puede usar webhooks para permitir que Stripe envíe notificaciones en tiempo real a su aplicación, o puede usar un webhook como punto final.
Para más detalles, consulte la raya Usar webhooks entrantes referencia.
Observe que cada respuesta contiene lo siguiente:
"metadata": {
"Samsung": "yes"
},
Eventos
Aquí hay algunos eventos que puede escuchar:
cliente.suscripción.creada
Un webhook de Stripe puede escuchar el customer.subscription.created
evento.
Respuesta de la API
Tu respuesta debería ser similar a esta:
{
"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
}
}
}
suscripción.cliente.actualizada
Un webhook de Stripe puede escuchar el customer.subscription.updated
evento.
Respuesta de la API
Tu respuesta debería ser similar a esta:
{
"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
}
}
}
Limitaciones
Existen algunas limitaciones al usar la API de Stripe:
- Citando a Stripe: "No use la búsqueda en flujos de lectura después de escritura donde se necesita una consistencia estricta. En condiciones normales de funcionamiento, los datos se pueden buscar en menos de un minuto. Ocasionalmente, la propagación de datos nuevos o actualizados puede retrasarse hasta una hora durante las interrupciones. La funcionalidad de búsqueda no está disponible para los comerciantes en la India".