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.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: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 endpointusage-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_idcomo 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-downgradedeve 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.

