Receba eventos da Stripe no seu endpoint de webhook
Escute eventos na conta da Stripe no seu endpoint de webhook para que sua integração possa acionar reações automaticamente.
Envie eventos para a sua conta AWS
Agora você pode enviar eventos diretamente ao Amazon EventBridge como destino de eventos.
Quando você cria integrações com a Stripe, seus aplicativos podem precisar receber eventos à medida que ocorrem nas contas Stripe para que sistemas de backend executem as ações necessárias.
Crie um destino de evento para receber eventos em um endpoint de webhook HTTPS. Depois que você registra um endpoint de webhook, a Stripe pode enviar dados de eventos em tempo real ao endpoint do webhook do aplicativo quando os eventos ocorrerem na sua conta Stripe. A Stripe usa HTTPS para enviar eventos de webhook ao seu aplicativo como um conteúdo JSON que inclui um objeto Event.
O recebimento de eventos de webhook ajuda a responder a eventos assíncronos, como quando um banco confirma um pagamento, um cliente contesta uma cobrança ou um pagamento recorrente é bem-sucedido.
Você também pode receber eventos no Amazon EventBridge com destinos de evento.
Comece já
Para começar a receber eventos de webhook no aplicativo:
- Crie um gerenciador de endpoint de webhook para receber solicitações POST de dados de evento.
- Teste o gerenciador de endpoint de webhook localmente usando o Stripe CLI.
- Crie um novo destino de evento para o seu endpoint de webhook.
- Proteja seu endpoint de webhook.
Você pode registrar e criar um endpoint para gerenciar vários tipos de eventos ao mesmo tempo ou configurar endpoints individuais para eventos específicos.
Comportamentos de tipo de evento não aceitos para destinos de evento da organização
a Stripe envia a maioria dos tipos de eventos de forma assíncrona; no entanto, para determinados tipos de eventos, a Stripe aguarda uma resposta. A presença ou ausência de uma resposta do destino do evento influencia diretamente as ações da Stripe em relação a esses tipos de eventos específicos.
Os destinos da organização oferecem suporte limitado para tipos de eventos que exigem uma resposta:
- Não é possível assinar
issuing_
para destinos de organização. Configure um endpoint de webhook em uma conta Stripe dentro da organização para assinar esse tipo de evento. Useauthorization. request issuing_
para autorizar solicitações de compra em tempo real.authorization. request - Você pode assinar
checkout_
para destinos da organização. No entanto, isso não gerencia o comportamento de redirecionamento quando você incorpora o Checkout diretamente em seu site ou redireciona os clientes para uma página de pagamento hospedada pela Stripe. A entrega de um eventosessions. completed checkout_
a um destino de organização não afeta o comportamento de redirecionamento. Para influenciar o comportamento de redirecionamento do Checkout, processe esse tipo de evento com um endpoint de webhook configurado em uma conta Stripe dentro da organização.sessions. completed - Você pode assinar
invoice.
para destinos de organização. No entanto, a resposta malsucedida a este evento não influencia a finalização automática da fatura quando a cobrança automática é usada. Para influenciar a finalização automática da fatura por meio de respostas do endpoint do webhook, processe esse tipo de evento com um endpoint de webhook configurado em uma conta Stripe dentro da organização.created
Crie um gerenciador
Configure uma função de HTTP ou HTTPS que aceite solicitações de webhooks com um método POST. Se você ainda está desenvolvendo a função de endpoint em uma máquina local, pode ser HTTP. Quando o endpoint for público, terá de ser HTTPS.
Configure sua função de endpoint para que:
- Processe solicitações POST com um conteúdo JSON que consiste em um objeto de evento.
- Para gerenciadores de eventos da organização, inspeciona o valor
context
para determinar qual conta em uma organização gerou o evento e define o cabeçalhoStripe-Context
correspondente ao valorcontext
. - Retorne rapidamente um código de status de êxito (
2xx
) antes de qualquer lógica complexa que possa causar um tempo esgotado. Por exemplo, você precisa retornar uma resposta200
antes de atualizar uma fatura do cliente como paga no sistema de contabilidade.
Observação
Como alternativa, você pode criar um endpoint de webhook em sua linguagem de programação usando o nosso criador interativo de endpoints de webhook.
Exemplo de endpoint
Este snippet de código é uma função de webhook configurada para verificar eventos recebidos de uma conta Stripe, gerenciar os eventos e retornar respostas 200
. Faça referência ao gerenciador de eventos de instantâneo quando usar recursos da API v1 e faça referência ao gerenciador de eventos mínimos quando usar recursos da API v2.
Exemplo de gerenciador de organização
Este snippet de código é uma função de endpoint de webhook configurada para verificar eventos recebidos em uma organização, gerenciar os eventos e retornar respostas 200
. O gerenciador verifica a quais contas o evento recebido se aplica verificando o campo context
na carga do evento e usa as chaves da API da conta apropriadas para chamadas da API subsequentes na conta.
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.
Testar seu gerenciador
Antes de implementar a função de endpoint de webhook no modo de produção, recomendamos testar a integração do aplicativo. Você pode fazer isso configurando um ouvinte local para enviar eventos à máquina local e enviando eventos de teste. Para testar, você precisa usar a CLI.
Encaminhar eventos para um endpoint local
Para encaminhar eventos ao endpoint local, execute o comando a seguir com a CLI para configurar um ouvinte local. O sinalizador --forward-to
envia todos os eventos da Stripe em uma área restrita para o seu endpoint de webhook local. Use os comandos de CLI apropriados abaixo, dependendo se você usa eventos mínimos ou de instantâneo.
Observação
Você também pode executar stripe listen
para ver eventos no Stripe Shell, embora não seja possível encaminhar eventos do shell para o endpoint local.
Estas são algumas configurações úteis para ajudar a testar o ouvinte local:
- Para desativar a verificação de certificados HTTPS, use o sinalizador opcional
--skip-verify
. - Para encaminhar apenas eventos específicos, use o sinalizador opcional
--events
e passe uma lista de eventos separados por vírgulas.
- Para encaminhar eventos do endpoint de webhook público que você já registrou na Stripe para o endpoint de webhook local, use o sinalizador opcional
--load-from-webhooks-api
. Ele carrega o endpoint registrado, analisa o caminho e os eventos registrados e depois anexa o caminho ao endpoint de webhook local no--forward-to path
.
- Para verificar as assinaturas do webhook, use o
{{WEBHOOK_
da saída inicial do comando listen.SIGNING_ SECRET}}
Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)
Acionar eventos de teste
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.
Registrar seu endpoint
Após testar a função do endpoint do webhook, use a API ou a guia Webhooks no Workbench para registrar o URL acessível do endpoint do webhook para que Stripe saiba onde entregar os eventos. Você pode registrar até 16 endpoints de webhook com a Stripe. Os endpoints de webhook registrados precisam ser URLs HTTPS com acesso público.
Formato de URL de webhook
O formato de URL para registrar um endpoint de webhook é:
https://<your-website>/<your-webhook-endpoint>
Por exemplo, se o seu domínio for https://mycompanysite.
e a rota para o endpoint do webhook for @app.
, especifique https://mycompanysite.
como o URL do endpoint.
Crie um destino de evento para seu endpoint de webhook
Crie um destino de eventos usando o Workbench no Dashboard ou automaticamente com a API. Você pode registrar até 16 destinos de evento em cada conta Stripe.
Observação
O Workbench substitui o Dashboard dos desenvolvedores existente. Se você ainda está usando o Dashboard dos desenvolvedores, veja como criar um endpoint de webhook.
Proteja seu endpoint
Você precisa proteger sua integração fazendo com que seu gerenciador verifique se todas as solicitações de webhook são geradas pela Stripe. Você pode verificar assinaturas de webhook usando nossas bibliotecas oficiais ou verificando-as manualmente.
Depurar integrações de webhooks
Vários tipos de problemas podem ocorrer na entrega de eventos ao endpoint de webhook:
- A Stripe pode não conseguir entregar um evento ao endpoint de webhook.
- O endpoint de webhook pode ter um problema de SSL.
- A conectividade de rede é intermitente.
- O endpoint de webhook não está recebendo os eventos que você espera receber.
Ver entregas de eventos
Para ver as entregas de eventos, selecione o endpoint do webhook em Webhooks e selecione a guia 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.
Corrigir códigos de status HTTP
Quando um evento exibe um código de status 200
, isso indica uma entrega bem-sucedida ao endpoint do webhook. Você também pode receber um código de status diferente de 200
. Veja na tabela abaixo uma lista de códigos de status HTTP comuns e as soluções recomendadas.
Status do webhook pendente | Descrição | Correção |
---|---|---|
ERRO (Não foi possível conectar) | Não conseguimos estabelecer uma conexão com o servidor de destino. | Verifique se o domínio do host pode ser acessado pelo público da internet. |
ERRO (302 ) (ou outro status 3xx ) | O servidor de destino tentou redirecionar a solicitação para outro local. Consideramos as respostas de redirecionamento a solicitações de webhook como falhas. | Defina o destino do endpoint do webhook como o URL resolvido pelo redirecionamento. |
ERRO (400 ) (ou outro status 4xx ) | O servidor de destino não pode ou não quer processar a solicitação. Isso pode ocorrer quando o servidor detecta um erro (400 ), o URL de destino tem restrições de acesso (401 , 403 ) ou o URL de destino não existe (404 ). |
|
ERRO (500 ) (ou outro status 5xx ) | O servidor de destino encontrou um erro ao processar a solicitação. | Revise os logs do aplicativo para entender por que ele está retornando um erro 500 . |
ERRO (Erro de TLS) | Não foi possível estabelecer uma conexão segura com o servidor de destino. Problemas com o certificado SSL/TLS ou um certificado intermediário na cadeia de certificados do servidor de destino geralmente causam esses erros. A Stripe exige o TLS versão v1. ou superior. | Execute um teste de servidor SSL para encontrar problemas que possam causar esse erro. |
ERRO (Tempo esgotado) | O servidor de destino demorou muito para responder à solicitação do webhook. | Verifique se o código de tratamento do webhook adia o processamento de lógica complexa e retorna imediatamente uma resposta bem-sucedida. |
Comportamentos de entrega de eventos
Esta seção ajuda a entender os diferentes comportamentos esperados em relação ao modo como a Stripe envia eventos ao endpoint de webhook.
Novas tentativas automáticas
A Stripe tenta entregar eventos ao seu destino por até três dias com um atraso exponencial no modo de produção. Veja quando ocorrerá a próxima tentativa, se for o caso, na guia Entregas de evento do destino do evento. Fazemos novas tentativas de entrega de eventos criados em uma área restrita três vezes em poucas horas. Se seu destino tiver sido desativado ou excluído quando fizermos uma nova tentativa, impediremos futuras tentativas desse evento. No entanto, se você desativar e reativar o destino do evento antes de podermos fazer uma nova tentativa, você ainda verá novas tentativas futuras.
Novas tentativas manuais
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>
Ordem de eventos
A Stripe não garante a entrega dos eventos na ordem em que foram gerados. Por exemplo, a criação de uma assinatura pode gerar os seguintes eventos:
customer.
subscription. created invoice.
created invoice.
paid charge.
(se houver cobrança)created
Verifique se o destino de eventos não depende de receber eventos em uma ordem específica. Esteja preparado para gerenciar a entrega de forma adequada. Você também pode usar a API para recuperar objetos ausentes. Por exemplo, você pode recuperar os objetos de fatura, cobrança e assinatura com as informações de invoice.
se receber esse evento primeiro.
Controle de versões da 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.
Práticas recomendadas para uso de webhooks
Revise essas práticas recomendadas para garantir que seus endpoints de webhook permaneçam seguros e funcionem bem com sua integração.
Gerenciar eventos duplicados
Ocasionalmente, os endpoints de webhook podem receber o mesmo evento mais de uma vez. Para se proteger contra o recebimento de eventos duplicados, registre os IDs de evento que você processou e não processe eventos já registrados.
Em alguns casos, dois objetos Event são gerados e enviados. Para identificar essas duplicatas, use o ID do objeto em data.
junto com o event.
.
Escutar apenas os tipos de eventos exigidos pela sua integração
Configure seus endpoints de webhook para receber somente os tipos de eventos exigidos por sua integração. Escutar eventos adicionais (ou todos os eventos) sobrecarrega seu servidor e não é recomendável.
Você pode alterar os eventos que um endpoint de webhook recebe no Dashboard ou com a API.
Gerenciar eventos de forma assíncrona
Configure seu gerenciador para processar eventos de entrada com uma fila assíncrona. Você pode encontrar problemas de escalabilidade se optar por processar eventos de forma síncrona. Qualquer grande pico nas entregas de webhooks (por exemplo, durante o início do mês, quando todas as assinaturas são renovadas) pode sobrecarregar seus hosts de endpoint.
As filas assíncronas permitem que você processe os eventos simultâneos em uma taxa que seu sistema possa aceitar.
Rota de webhook isenta de proteção contra CSRF
Se estiver usando Rails, Django ou outra estrutura da web, seu site pode verificar automaticamente se cada solicitação POST contém um token CSRF. Esse é um importante recurso de segurança que ajuda a proteger você e seus usuários contra tentativas de falsificação de solicitações entre sites. No entanto, essa medida de segurança também pode evitar que seu site processe eventos legítimos. Se for o caso, você pode precisar isentar a rota dos webhooks da proteção contra CSRF.
Receber eventos com um servidor HTTPS
Se você usa um URL HTTPS para seu endpoint de webhook (obrigatório no modo de produção), a Stripe valida a segurança da conexão com seu servidor antes de enviar os dados do webhook. Para que isso funcione, seu servidor precisa estar configurado corretamente para aceitar HTTPS com um certificado de servidor válido. Os webhooks da Stripe aceitam apenas as versões v1.2 e v1.3 do TLS.
Substituir periodicamente segredos de assinatura de endpoints
O segredo usado para verificar a origem dos eventos da Stripe pode ser modificado na guia Webhooks no Workbench. Para mantê-los seguros, recomendamos que você substitua (altere) os segredos periodicamente ou quando suspeitar que um deles foi comprometido.
Para substituir um segredo:
- Clique em cada endpoint na guia Webhooks do Workbench cujo segredo você deseja substituir.
- Acesse o menu de navegação () e clique em Substituir segredo. Você pode optar pela expiração imediata do segredo atual ou atrasar a expiração para até 24 horas para ter tempo de atualizar o código de verificação no seu servidor. Durante esse período, várias chaves secretas ficam ativas para o endpoint. A Stripe gera uma assinatura por segredo até a expiração.
Verificar se eventos são enviados da Stripe
A Stripe envia eventos de webhook de uma lista de endereços IP. Confie somente em eventos recebidos desses endereços IP.
Verifique também as assinaturas do webhook para confirmar que a Stripe enviou os eventos recebidos. A Stripe assina os eventos de webhook que envia aos endpoints, incluindo uma assinatura em cada cabeçalho Stripe-Signature
do evento. Assim, você pode verificar se os eventos foram enviados pela Stripe e não por terceiros. Você pode verificar assinaturas usando nossas bibliotecas oficiais ou manualmente, usando sua própria solução.
A seção a seguir descreve como verificar assinaturas de webhook:
- Recupere o segredo do endpoint.
- Verifique a assinatura.
Recuperar o segredo do endpoint
Use o Workbench e navegue até a guia Webhooks para ver todos os seus endpoints. Selecione um endpoint do qual você deseja obter o segredo e clique em Clique para revelar.
A Stripe gera uma chave secreta única para cada endpoint. Se você usar o mesmo endpoint para chaves de API do modo de teste e do modo de produção, os segredos serão diferentes uns dos outros. Além disso, se usar vários endpoints, você precisa obter um segredo para cada endpoint em que deseja verificar assinaturas. Após essa configuração, a Stripe começa a assinar cada webhook que envia ao endpoint.
Evitar ataques de repetição
Um ataque de repetição ocorre quando um invasor intercepta e retransmite um conteúdo válido e sua assinatura. Para mitigar esses ataques, a Stripe inclui um carimbo de data e hora no cabeçalho Stripe-Signature
. Como esse carimbo de data e hora faz parte do conteúdo assinado, ele também é verificado pela assinatura, de forma que um invasor não pode alterar o carimbo de data e hora sem invalidar a assinatura. Se a assinatura for válida, mas o carimbo de data e hora for muito antigo, seu aplicativo pode recusar o conteúdo.
Nossas bibliotecas têm uma tolerância padrão de cinco minutos entre o carimbo de data e hora e a hora atual. Você pode alterar essa tolerância fornecendo um parâmetro adicional quando verificar assinaturas. Use o Network Time Protocol (NTP) para assegurar que o relógio do seu servidor esteja preciso e sincroniza com a hora nos servidores da Stripe.
Erro comum
Não use um valor de tolerância de 0
. O uso de um valor de tolerância de 0
desativa totalmente a verificação de recenticidade.
A Stripe gera o carimbo de data e hora e a assinatura sempre que envia um evento ao seu endpoint. Se a Stripe tentar novamente um evento (por exemplo, seu endpoint respondeu anteriormente com um código de status diferente de 2xx
), serão gerados uma nova assinatura e um novo carimbo de data e hora para a nova tentativa de entrega.
Retornar rapidamente uma resposta 2xx
O endpoint precisa retornar rapidamente um código de status de êxito (2xx
) antes de qualquer lógica complexa que possa esgotar um tempo limite. Por exemplo, você precisa retornar uma resposta 200
antes de atualizar uma fatura do cliente como paga no sistema de contabilidade.