Seguindo a documentação do Stripe, crio um endpoint webhook no meu aplicativo para capturar o evento customer.subscription.created, que uso como um sinal para criar uma nova conta no meu banco de dados.
Estou usando o Stripe Checkouts para enviar o usuário para fazer o processo de pagamento e, então, quando ele retorna à minha página da web, procuro um endpoint no meu banco de dados para buscar os dados da conta.
O problema é que às vezes a página de checkout do Stripe fecha e minha página da web é carregada mais rápido do que o Stripe realmente faz a solicitação do webhook com o evento.
Então, qual é a maneira correta de lidar com essa discrepância nos horários?
Não me diga que ele está colocando um setTimeout antes do meu processo de busca. Não pode ser isso, certo?
O que o Stripe recomenda em sua página de documentação de atendimento é tratar o atendimento tanto no código do manipulador do webhook (o que você já faz) quanto no redirecionamento. Dessa forma, se o redirecionamento ocorrer primeiro, você não precisará esperar que o Evento seja enviado e processado corretamente pelo seu manipulador do webhook, e poderá verificar imediatamente o status/detalhes da Sessão de Checkout e tratar o atendimento imediatamente.
Você vai querer evitar condições de corrida e atendimentos duplicados, então se você estiver no meio do processamento do Evento, você pode adicionar alguma lógica para "bloquear" sua inserção de banco de dados/tabela, por exemplo, para que a etapa de atendimento no redirecionamento apenas espere, e vice-versa.