Recibe los eventos de Stripe en el punto de conexión de tu webhook
Escucha eventos en tu cuenta de Stripe en el punto de conexión de tu webhook para que tu integración pueda activar reacciones automáticamente.
Envía eventos a tu cuenta de AWS
Ahora puedes enviar eventos directamente a Amazon EventBridge como destino de eventos.
Al crear integraciones de Stripe, es posible que quieras que tus aplicaciones reciban eventos a medida que ocurren en tus cuentas de Stripe, para que tus sistemas de back-end puedan ejecutar acciones en consecuencia.
Crea un destino de evento para recibir eventos en un punto de conexión de webhook HTTPS. Después de que registres un punto de conexión de webhook, Stripe puede enviar datos de eventos en tiempo real al punto de conexión de webhook de tu aplicación cuando se produzcan eventos en tu cuenta de Stripe. Stripe usa HTTPS para enviar eventos de webhook a tu aplicación como una carga JSON que incluye un objeto de evento.
Recibir eventos de webhooks te ayuda a responder a eventos asincrónicos, como cuando el banco de un cliente confirma un pago, un cliente disputa un cargo o un pago recurrente se efectúa correctamente.
También puedes recibir eventos en Amazon EventBridge con destinos de eventos.
Empezar
Para comenzar a recibir eventos de webhook en tu aplicación, haz lo siguiente:
- Crea un controlador de punto de conexión de webhook para recibir solicitudes de POST de datos de eventos.
- Prueba en forma local tu controlador de puntos de conexión de webhook con la CLI de Stripe.
- Crea un nuevo destino de evento para el punto de conexión de webhook.
- Protege el punto de conexión de webhook.
Puedes registrar y crear un punto de conexión para manejar varios tipos de eventos diferentes al mismo tiempo, o configurar puntos de conexión particulares para eventos específicos.
Comportamientos de tipo de evento no admitidos para destinos de eventos de organización
Stripe envía la mayoría de los tipos de eventos de forma asíncrona; sin embargo, para ciertos tipos de eventos, Stripe espera una respuesta. La presencia o ausencia de una respuesta del destino del evento influye directamente en las acciones de Stripe con respecto a estos tipos de eventos específicos.
Los destinos de la organización ofrecen soporte limitado para los tipos de eventos que requieren una respuesta:
- No puedes suscribirte a
issuing_
para destinos de organización. En su lugar, configura un punto de conexión de webhooks en una cuenta de Stripe dentro de la organización para suscribirte a este tipo de evento. Utilizaauthorization. request issuing_
para autorizar las solicitudes de compra en tiempo real.authorization. request - Puedes suscribirte a
checkout_
para los destinos de la organización. Sin embargo, esto no controla el comportamiento de redireccionamiento cuando integras Checkout directamente en tu sitio web o rediriges a los clientes a una página de pago alojada en Stripe. La entrega de un eventosessions. completed checkout_
a un destino de la organización no afectará al comportamiento de redireccionamiento. Para influir en el comportamiento de redireccionamiento de Checkout, procesa este tipo de evento con un punto de conexión de webhook configurado en una cuenta de Stripe dentro de la organización.sessions. completed - Puedes suscribirte a
invoice.
para los destinos de la organización. Sin embargo, si no respondes correctamente a este evento, eso no influirá en la finalización automática de la factura cuando uses el cobro automático. Para influir en la finalización automática de facturas mediante respuestas de punto de conexión de webhook, procesa este tipo de evento con un punto de conexión de webhook configurado en una cuenta de Stripe dentro de la organización.created
Crear un controlador
Configura una función de punto de conexión HTTP o HTTPS que pueda aceptar peticiones de webhooks con un método POST. Si todavía estás desarrollando su función de punto de conexión en tu máquina local, puedes usar HTTP. Después de que sea de acceso público, la función de punto de conexión de tu webhook debe usar HTTPS.
Configura la función del punto de conexión para que haga lo siguiente:
- Maneja las solicitudes POST con una carga JSON que consiste en un objeto de evento.
- Para los controladores de eventos de la organización, inspecciona el valor
context
para determinar qué cuenta de la organización generó el evento y, a continuación, establece el encabezadoStripe-Context
correspondiente al valorcontext
. - Devuelve rápidamente un código de estado correcto (
2xx
) antes de cualquier lógica compleja que pueda causar un tiempo de espera. Por ejemplo, debes devolver una respuesta200
antes de actualizar la factura del cliente como pagada en tu sistema contable.
Nota
Como alternativa, puedes crear una función de punto de conexión de webhook en tu lenguaje de programación utilizando nuestro generador de puntos de conexión de webhooks interactivos.
Ejemplo de punto de conexión
Este fragmento de código es una función de webhook configurada para buscar eventos recibidos desde una cuenta de Stripe, gestionar los eventos y devolver respuestas 200
. Consulta el controlador de eventos de instantáneas cuando uses recursos de la API v1 y haz referencia al controlador de eventos ligeros cuando uses recursos de la API v2.
Ejemplo de controlador de organización
Este fragmento de código es una función de punto de conexión de webhook configurada para comprobar los eventos recibidos en una organización, gestionar los eventos y devolver respuestas 200
. El controlador verifica a qué cuentas se aplica el evento recibido verificando el campo context
en la carga del evento, luego usa las claves de API de la cuenta apropiadas para llamadas a la API posteriores en la cuenta.
This code snippet is a webhook function configured to check for received events, detect the originating account if applicable, handle the event, and return a 200
response.
Prueba tu controlador
Antes de activar la función del punto de conexión de tu webhook, te recomendamos probar la integración de tu aplicación. Para ello, configura un oyente local para que envíe eventos a tu máquina local y enviando eventos de prueba. Debes usar la CLI para hacer una prueba.
Reenvía eventos a un punto de conexión local
Para reenviar eventos a tu punto de conexión local, ejecuta el siguiente comando con la CLI para configurar un oyente local. La marca --forward-to
envía todos los eventos de Stripe de un entorno de prueba al punto de conexión de tu webhook local. Utilice los comandos de CLI adecuados que aparecen a continuación en función de si utilizas eventos ligeros o de instantáneas.
Nota
También puedes ejecutar stripe listen
para ver eventos en Stripe Shell, aunque no podrás reenviar eventos desde el shell a tu punto de conexión local.
Las configuraciones útiles para ayudarte a probar tu oyente local incluyen las siguientes:
- Para deshabilitar la verificación del certificado HTTPS, usa el indicador opcional
--skip-verify
. - Para reenviar solo eventos específicos, usa el indicador opcional
--events
en una lista de eventos separados por comas.
- Para reenviar eventos a tu punto de conexión local de webhooks desde el punto de conexión público de webhooks que ya registraste en Stripe, usa el indicador opcional
--load-from-webhooks-api
. Este carga tu punto de conexión registrado, analiza la ruta y sus eventos registrados y luego agrega la ruta a tu punto de conexión de webhook local en--forward-to path
.
- Para comprobar las firmas del webhook, utiliza el
{{WEBHOOK_
de la salida inicial del comando de escucha.SIGNING_ SECRET}}
Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)
Cómo activar eventos de prueba
To send test events, trigger an event type that your event destination is subscribed to by manually creating an object in the Stripe Dashboard. Learn how to trigger events with Stripe for VS Code.
Registra tu punto de conexión
Después de probar la función de punto de conexión de webhook, usa la pestaña API o Webhooks en Workbench para registrar la URL accesible de tu punto de conexión de webhook para que Stripe sepa adónde enviar los eventos. Puedes registrar hasta 16 puntos de conexión de webhook en Stripe. Los puntos de conexión de webhook registrados deben ser URL HTTPS de acceso público.
Formato de URL de webhooks
El formato de URL para registrar un punto de conexión de webhook es el siguiente:
https://<your-website>/<your-webhook-endpoint>
Por ejemplo, si tu dominio es https://mycompanysite.
y la ruta a tu punto de conexión de webhooks es @app.
, especifica https://mycompanysite.
como la URL del punto de conexión.
Crea un destino de evento para el punto de conexión de tu webhook
Crea un destino de evento usando Workbench en el Dashboard o mediante programación con la API. Puedes registrar hasta 16 destinos de eventos en cada cuenta de Stripe.
Nota
Workbench sustituye al actual Dashboard de desarrolladores. Si sigues usando el Dashboard de desarrolladores, consulta cómo crear un nuevo punto de conexión webhook.
Protege tu punto de conexión
Debes asegurar tu integración comprobando que tu controlador verifique que todas las solicitudes de webhook sean generadas por Stripe. Puedes verificar las firmas del webhook utilizando nuestras bibliotecas oficiales o verificarlas manualmente.
Depura las integraciones de webhook
Pueden ocurrir varios tipos de problemas al entregar eventos al punto de conexión de tu webhook:
- Es posible que Stripe no pueda entregar un evento a tu punto de conexión de webhook.
- Tu punto de conexión de webhooks podría tener un problema con el SSL.
- La conectividad de tu red es intermitente.
- El punto de conexión de tu webhook no está recibiendo los eventos que esperabas recibir.
Consulta las entregas de eventos
Para ver las entregas de eventos, selecciona el punto de conexión del webhook en Webhooks y, a continuación, selecciona la pestaña Eventos.
The Events tab provides a list of events and whether they’re Delivered
, Pending
, or Failed
. Click an event to view metadata, including the HTTP status code of the delivery attempt and the time of pending future deliveries.
Repara códigos de estado HTTP
Cuando un evento muestra un código de estado 200
, este indica que se ha entregado correctamente al punto de conexión del webhook. También puedes recibir un código de estado que no sea 200
. En la siguiente tabla, encontrarás una lista de los códigos de estado HTTP comunes y las soluciones recomendadas.
Estado del webhook pendiente | Descripción | Reparar |
---|---|---|
(No se ha podido conectar) ERR | No se puede establecer una conexión con el servidor de destino. | Asegúrate de que tu dominio de host sea de acceso público por Internet. |
(302 ) ERR (u otro estado 3xx ) | El servidor de destino ha intentado redirigir la petición a otra ubicación. Consideramos las respuestas de redireccionamiento a las peticiones de webhook como fallos. | Establece el destino del punto de conexión del webhook a la URL resuelta por el redireccionamiento. |
(400 ) ERR (u otro estado 4xx ) | El servidor de destino no puede o rechaza procesar la petición. Esto puede ocurrir cuando el servidor detecta un error (400 ), cuando la URL de destino tiene restricciones de acceso (401 , 403 ) o cuando la URL de destino no existe (404 ). |
|
(500 ) ERR (u otro estado 5xx ) | El servidor de destino encontró un error mientras se procesaba la solicitud. | Revisa los registros de tu aplicación para comprender por qué está devolviendo un error 500 . |
(Error de TLS) ERR | No hemos podido establecer una conexión segura con el servidor de destino. Los problemas con el certificado SSL/TLS o un certificado intermedio en la cadena de certificados del servidor de destino suelen causar estos errores. Stripe requiere TLS versión v1. o superior. | Realiza una prueba del servidor SSL para descubrir los problemas que puedan causar este error. |
(Se ha agotado el tiempo de espera) ERR | El servidor de destino tardó demasiado en responder a la petición de webhook. | Asegúrate de diferir la lógica compleja y devolver una respuesta correcta de inmediato en tu código de gestión de webhooks. |
Comportamientos de entrega de eventos
En esta sección recibirás ayuda para comprender los diferentes comportamientos que puedes esperar en relación con la forma en que Stripe envía los eventos al punto de conexión de tu webhook.
Reintentos automáticos
En modo activo, Stripe intenta entregar eventos en tu destino durante un máximo de tres días con un retroceso exponencial. Consulta cuándo se realizará el siguiente reintento, si corresponde, en la pestaña Entregas de eventos de tu destino de evento. Reintentamos las entregas de eventos creadas en un entorno de prueba tres veces en el transcurso de unas pocas horas. Si tu destino se ha deshabilitado o eliminado cuando hacíamos el reintento, evitamos reintentos de ese evento en el futuro. Sin embargo, si deshabilitas y luego vuelves a habilitar el destino del evento antes de que podamos hacer el reintento, seguirás viendo reintentos en el futuro.
Reintentos manuales
Unsupported for Amazon EventBridge
You can’t manually resend events to Amazon EventBridge.
There are two ways to manually retry events:
- In the Stripe Dashboard, click Resend when looking at a specific event. This works for up to 15 days after the event creation.
- With the Stripe CLI, run the
stripe events resend <event_
command. This works for up to 30 days after the event creation.id> --webhook-endpoint=<endpoint_ id>
Orden de los eventos
Stripe no garantiza la entrega de eventos en el orden en que se han generado. Por ejemplo, la creación de una suscripción puede generar los siguientes eventos:
customer.
subscription. created invoice.
created invoice.
paid charge.
(si hay un cargo)created
Asegúrate de que el destino de tu evento no dependa de que recibas los eventos en un orden específico. Prepárate para gestionar la entrega de forma adecuada. También puedes usar la API para recuperar los objetos que falten. Por ejemplo, puedes recuperar los objetos Invoice, Charge y Subscription con la información de invoice.
si recibes este evento primero.
Control de versiones de API
The API version in your account settings when the event occurs dictates the API version, and therefore the structure of an Event sent to your destination. For example, if your account is set to an older API version, such as 2015-02-16, and you change the API version for a specific request with versioning, the Event object generated and sent to your destination is still based on the 2015-02-16 API version. You can’t change Event objects after creation. For example, if you update a charge, the original charge event remains unchanged. As a result, subsequent updates to your account’s API version don’t retroactively alter existing Event objects. Retrieving an older Event by calling /v1/events
using a newer API version also has no impact on the structure of the received event. You can set test event destinations to either your default API version or the latest API version. The Event sent to the destination is structured for the event destination’s specified version.
Mejores prácticas para el uso de webhooks
Revisa estas prácticas recomendadas para asegurarte de que los puntos de conexión de tu webhook estén protegidos y funcionen bien con tu integración.
Gestiona eventos duplicados
En ocasiones, los puntos de conexión de webhooks pueden recibir el mismo evento más de una vez. Puedes protegerte contra los recibos de eventos duplicados registrando los ID de eventos que has procesado y no procesando los eventos ya registrados.
En algunos casos, se generan y envían dos objetos Event separados. Para identificar estos elementos duplicados, utiliza el ID del objeto en data.
junto con el event.
.
Escucha solo los tipos de eventos que requiere tu integración
Configura los puntos de conexión de webhook para recibir solo los tipos de eventos que tu integración necesita. Si escuchas otros eventos (o todos los eventos) se producirá una saturación indebida en tu servidor que no es recomendable.
Puedes modificar los eventos que recibe un punto de conexión de webhooks en el Dashboard o con la API.
Gestiona eventos de forma asíncrona
Configura tu controlador para procesar eventos entrantes con una cola asíncrona. Es posible que tengas problemas de escalabilidad si decides procesar los eventos de forma sincronizada. Cualquier gran aumento en las entregas de webhook (por ejemplo, a principios de mes, cuando se renuevan todas las suscripciones) podría saturar los servidores de tus puntos de conexión.
Las colas asíncronas te permiten procesar los eventos simultáneos a una velocidad que el sistema puede admitir.
Exime a la ruta de webhook de la protección CSRF
Si usas Rails, Django u otro marco web, tu sitio podría comprobar automáticamente si cada petición POST contiene un token CSRF. Esta es una función de seguridad importante que ayuda a protegerte a ti y a tus usuarios de intentos de falsificación de peticiones en sitios cruzados. No obstante, esta medida de seguridad también puede impedir que tu sitio procese eventos legítimos. De ser así, quizá sea necesario que la ruta de webhooks quede excluida de la protección CSRF.
Recibir eventos con un servidor HTTPS
Si usas una URL HTTPS para el punto de conexión del webhook (obligatorio en el modo activo), Stripe valida que la conexión con el servidor sea segura antes de enviar los datos de tu webhook. Para que esto funcione, el servidor debe estar correctamente configurado para ser compatible con HTTPS con un certificado de servidor válido. Los webhooks de Stripe solo son compatibles con las versiones v1.2 y v1.3 de TLS.
Cambia periódicamente los secretos de firma de los puntos de conexión
El secreto utilizado para verificar que los eventos provienen de Stripe se puede modificar en la pestaña Webhooks de Workbench. Para mantenerlos a salvo, te recomendamos que renueves (cambies) los secretos periódicamente o cuando sospeches que un secreto se ha visto comprometido.
Cómo cambiar un secreto:
- Haz clic en cada punto de conexión de la pestaña Webhooks de Workbench para el que quieras renovar el secreto.
- Dirígete al menú de desbordamiento () y haz clic en Cambiar secreto. Puedes optar por la caducidad inmediatamente del secreto actual o retrasarla por hasta 24 horas para que tengas tiempo de actualizar el código de verificación en tu servidor. Durante este período, habrá varios secretos activos para el punto de conexión. Stripe generará una firma por secreto hasta su caducidad.
Verifica que los eventos se envíen desde Stripe
Stripe envía eventos de webhook desde una lista establecida de direcciones IP. Confía solo en los eventos que provengan de estas direcciones IP.
Verifica también las firmas de webhook para confirmar que Stripe ha enviado los eventos recibidos. Stripe firma los eventos de webhook que envía a tus puntos de conexión incluyendo una firma en el encabezado Stripe-Signature
de cada evento. Esto te permite verificar que fue Stripe quien envió los eventos y no un tercero. Puedes verificar las firmas usando nuestras bibliotecas oficiales o verificarlas manualmente usando tu propia solución.
En la siguiente sección, se describe cómo verificar las firmas de webhook:
- Recupera el secreto de tu punto de conexión.
- Verifica la firma.
Cómo recuperar el secreto de tu punto de conexión
Usa Workbench y dirígete a la pestaña Webhooks para ver todos tus puntos de conexión. Selecciona un punto de conexión para el que quieras obtener el secreto y, a continuación, haz clic en Haz clic para revelarlo.
Stripe genera una clave secreta única para cada punto de conexión. Si utilizas el mismo punto de conexión para ambas claves de API en modo de prueba y en modo activo, la clave secreta será diferente para cada uno. Además, si utilizas varios puntos de conexión, debes obtener una clave secreta para cada uno de los que quieras verificar las firmas. Después de esta configuración, Stripe comenzará a firmar cada webhook que envía al punto de conexión.
Prevención de ataques de reproducción
Un ataque de repetición ocurre cuando un atacante intercepta una carga válida y su firma, y luego las retransmite. Para mitigar tales ataques, Stripe incluye una marca temporal en el encabezado Stripe-Signature
. Debido a que esta marca de tiempo es parte de la carga firmada, también se verifica mediante la firma, por lo que un atacante no puede cambiar la marca temporal sin invalidar la firma. Si la firma es válida, pero la marca temporal es demasiado antigua, tu aplicación puede rechazar la carga.
Nuestras bibliotecas tienen una tolerancia predeterminada de cinco minutos entre la marca temporal y la hora actual. Puedes cambiar esta tolerancia proporcionando un parámetro adicional al verificar las firmas. Utiliza el protocolo de tiempo de redes (NTP) para asegurarte de que el reloj de simulación de tu servidor sea preciso y esté sincronizado con la hora de los servidores de Stripe.
Error habitual
No uses un valor de tolerancia de 0
. Al usar un valor de tolerancia de 0
se desactiva por completo la comprobación de recencia.
Stripe genera la marca temporal y la firma cada vez que enviamos un evento a tu punto de conexión. Si Stripe reintenta un evento (por ejemplo, tu punto de conexión ha respondido previamente con un código de estado que no es2xx
), generaremos una nueva firma y una marca temporal para el nuevo intento de entrega.
Devolver rápidamente una respuesta 2xx
Tu punto de conexión debe devolver rápidamente un código de estado satisfactorio (2xx
) antes de que una lógica compleja pueda hacer que se agote el tiempo de espera. Por ejemplo, debes devolver una respuesta 200
antes de actualizar la factura del cliente como pagada en tu sistema contable.