Skip to main content
Documentação interna para desenvolvedores. Esta página aborda padrões de integração do Stripe, manipulação de webhook, fluxos de checkout e lógica de controle de planejamento. Não se destina a usuários finais.

Mapa de rotas


Configuração do cliente Stripe

O cliente Stripe é inicializado em @zappway/lib/stripe (ou similar). A chave de API é carregada da variável de ambiente STRIPE_SECRET_KEY.

Fluxo de check-out


Manipulador de webhook

O webhook é a fonte da verdade para o estado da assinatura. Todas as alterações no plano devem passar pelo webhook, não pela resposta da sessão de checkout.
Principais eventos tratados:

Planejar portão

Os planos bloqueiam o acesso aos recursos por meio dos metadados de assinatura da sessão. O padrão usado em todo o aplicativo:
Existem auxiliares assertXxxPlan semelhantes para outros recursos premium. Eles lêem req.session.organization.subscription (carregado do banco de dados por meio de retornos de chamada NextAuth).

Visualização do rateio

Antes da atualização, a IU chama a visualização do rateio para mostrar ao usuário a cobrança exata:

Créditos de uso

O endpoint usage-credits gerencia créditos pré-pagos para cobrança baseada no uso (por exemplo, volume de mensagens). Os créditos são armazenados no banco de dados e decrementados a cada evento faturável.

Validar downgrade

Verifica se o uso atual de recursos da organização é compatível com um plano inferior:

Variáveis ​​de ambiente necessárias


Problemas conhecidos/pegadinhas

  • Idempotência do Webhook: Stripe pode entregar o mesmo evento várias vezes. Todos os manipuladores de webhook devem ser idempotentes — use stripe_event_id como uma chave de desduplicação armazenada no banco de dados.
  • Expiração da sessão de checkout: As sessões expiram após 24 horas. Se o usuário abandonar o checkout e retornar mais tarde, ele precisará de uma nova sessão.
  • validate-downgrade deve verificar TODOS os tipos de recursos que possuem limites de plano (agentes, habilidades, datastores, membros da equipe, etc.). Se um novo tipo de recurso obtiver um limite de plano, esse ponto final deverá ser atualizado.
  • URL do Portal do Cliente expira após 5 minutos — gere-o sob demanda, nunca armazene-o em cache.