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 sua conta da AWS
Agora você pode enviar eventos diretamente para o Amazon EventBmount com destinos de evento.
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 é particularmente útil para ouvir eventos assíncronos, como quando um banco confirma um pagamento, um cliente contesta uma cobrança, um pagamento recorrente é finalizado ou no recebimento de pagamentos de assinaturas.
Você também pode receber eventos no Amazon EventBroid com destinos de evento.
Comece já
Para começar a receber eventos de webhook no aplicativo, crie e registre um endpoint de webhook:
- Crie um gerenciador de endpoint de webhook para receber solicitações POST de dados de evento.
- Teste o gerenciador de endpoints de webhook localmente usando a Stripe CLI.
- Registre seu endpoint na Stripe usando o Dashboard ou a API.
- Proteja o endpoint do 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.
Criar 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:
- Processe solicitações POST com um conteúdo JSON que consiste em um objeto de evento.
- Retorne 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 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 se o tipo de evento foi recebido, gerenciar o evento e retornar uma resposta 200.
Teste 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 modo de teste para o seu endpoint de webhook local.
stripe listen --forward-to localhost:4242/webhook
Observação
Você também pode executar o comando stripe listen no Stripe Shell para ver eventos no terminal do shell da Stripe , 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 com 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.
stripe listen --events payment_intent.created,customer.created,payment_intent.succeeded,checkout.session.completed,payment_intent.payment_failed \ --forward-to localhost:4242/webhook
- 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
.
stripe listen --load-from-webhooks-api --forward-to localhost:4242/webhook
- Para verificar assinaturas de webhook, use o
{{WEBHOOK_
da saída inicial do comando escutar.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 webhook is subscribed to by manually creating an object in the Stripe Dashboard. Alternatively, you can use the following command in either Stripe Shell or Stripe CLI.
Este exemplo aciona um evento payment_
:
stripe trigger payment_intent.succeeded Running fixture for: payment_intent Trigger succeeded! Check dashboard for event details.
Learn how to trigger events with Stripe for VS Code.
Registre seu endpoint
Após testar a função do endpoint do webhook, registre o URL acessível do endpoint do webhook usando a seção de webhooks no Dashboard para desenvolvedores ou a API para que a Stripe saiba onde entregar os eventos. Você pode registrar até 16 endpoints de webhook com a Stripe. Endpoints de webhook registrados precisam ser URLs de HTTPS com acesso público.
Formato do 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 é https://mycompanysite.
e a rota para o endpoint do webhook é @app.
, especifique o URL do endpoint como https://mycompanysite.
.
Crie um endpoint de webhook
You can create new event destinations for webhook and AWS EventBridge destinations.
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.
Registrar um endpoint de webhook com a API Stripe
Você também pode criar endpoints de webhook de forma programática.
Para receber eventos de contas conectadas, use o parâmetro connect.
O exemplo a seguir cria um endpoint que notifica você quando as cobranças são bem-sucedidas ou falham.
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 webhook
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
Observação
Se tiver habilitado o Workbench na sua conta, você precisará utilizar o Workbench para gerenciar as entregas de eventos.
Para ver as entregas de evento de um endpoint específico, selecione o endpoint do webhook na guia Webhooks.
Para ver todos os eventos que foram acionados na sua conta, consulte a guia Eventos.
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 normalmente são a causa desses erros. A Stripe precisa da versão v1.2 ou superior do TLS. | 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.
Comportamento de novas tentativas
No modo de produção, a Stripe tenta entregar um determinado evento ao endpoint de webhook por até 3 dias com um recuo exponencial. Na seção Eventos do Dashboard, você pode ver quando ocorrerá a próxima tentativa.
No modo de teste, a Stripe faz três tentativas em algumas horas. Você pode tentar transmitir novamente eventos individuais para o endpoint do webhook após esse período na seção Eventos do Dashboard. Você também pode consultar eventos perdidos para reconciliar os dados em qualquer período.
As novas tentativas automáticas continuam, mesmo se você tentar transmitir eventos de webhook individuais manualmente e a tentativa for bem-sucedida.
Se o seu endpoint tiver sido desabilitado ou excluído quando a Stripe fizer uma nova tentativa, tentativas futuras desse evento serão evitadas. No entanto, se você desabilitar e reabilitar um endpoint de webhook antes que a Stripe tente novamente, poderá ver novas tentativas.
Desativar comportamento
Nos modos de produção e teste, a Stripe tenta notificar você por e-mail sobre um endpoint configurado incorretamente se o endpoint não responder com um código de status HTTP 2xx
por vários dias seguidos. O e-mail também indica quando o endpoint será desabilitado automaticamente.
Controle de versões da API
A versão da API nas configurações da sua conta quando o evento ocorre determina a versão da API e, portanto, a estrutura de um objeto Event
enviado em um webhook. Por exemplo, se sua conta estiver definida para uma versão de API mais antiga, como 2015-02-16, e você alterar a versão da API de uma solicitação específica com controle de versão, o objeto Event
gerado e enviado ao seu endpoint ainda estará baseado na versão 2015-02-16 da API.
Não é possível alterar objetos Event
após a criação. Por exemplo, se você atualizar uma cobrança, o evento de cobrança original permanece inalterado. Isso significa que atualizações subsequentes da versão da API da sua conta não alteram retroativamente objetos Event
. A captura de eventos mais antigos chamando /v1/events
com uma versão de API mais recente também não afeta a estrutura dos eventos recebidos.
Você pode definir endpoints de webhooks de teste para a versão padrão da sua API ou a versão mais recente da API. O Event
enviado para o URL do webhook é estruturado para a versão especificada do endpoint. Você também pode programar a criação de endpoints com uma api_version específica.
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
Seu endpoint não deve esperar a entrega desses eventos nesta ordem e deve processá-la de acordo. Você também pode usar a API para recuperar objetos ausentes (por exemplo, você pode obter os objetos de fatura, cobrança e assinatura usando as informações de invoice.
se receber esse evento primeiro).
Práticas recomendadas para uso de webhooks
Revise essas práticas recomendadas para garantir que seus webhooks 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 recibos 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.
.
Ouça 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.
Gerencie eventos de forma assíncrona
Configure o gerenciador para processar eventos recebidos com uma fila assíncrona. Você pode encontrar problemas de escalabilidade se optar por processar eventos síncronos. Qualquer pico grande em entregas de webhook (por exemplo, durante o início do mês, quando todas as assinaturas são renovadas) pode sobrecarregar os hosts do endpoint.
As filas assíncronas permitem processar os eventos simultâneos em uma taxa aceita pelo sistema.
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 se os eventos chegam da Stripe é modificável na seção Webhooks do Dashboard. Para cada endpoint, 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. Para mantê-los seguros, recomendamos que você substitua os segredos periodicamente ou quando suspeitar que um deles foi comprometido.
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.
Além disso, verifique as assinaturas do webhook para confirmar que os eventos recebidos foram enviados da Stripe. A Stripe assina os eventos de webhook que envia aos endpoints inserindo uma assinatura em cada cabeçalho Stripe-Signature
do evento, garantindo assim que os eventos foram enviados pela Stripe. Você pode verificar assinaturas usando as bibliotecas oficiais ou manualmente com a 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 a seção Webhooks do Dashboard. Selecione um endpoint para o qual você deseja obter o segredo e encontre o segredo no canto superior direito da página.
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 sã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 e 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.