Pular para o conteúdo
supastack
Explorar a documentação

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /pt/docs/modules/billing-configuration.md (or send Accept: text/markdown).

Configuração Stripe e webhooks

Liga subscrições web às permissões do lado do servidor.

Instalação e configuração

Antes de qualquer etapa, leia Antes de começar e Noções básicas sobre terminal. Estas instruções presumem que você abriu o monorepo supastack completo no VS Code; sua raiz package.json marca a raiz do repositório. Nos comandos pnpm, um pacote de espaço de trabalho é um aplicativo ou uma pasta de código compartilhado; no produto, um espaço de trabalho é o contêiner de dados e o limite de segurança de uma equipe. corepack pnpm --filter ... seleciona um pacote do monorepo enquanto os comandos são executados a partir de sua raiz. Se você abriu apenas uma pasta móvel ou desktop sincronizada, ela não contém o back-end da Web, a configuração do Docker ou os scripts raiz: execute o back-end deste monorepo ou de um servidor hospedado acessível e use os próprios scripts da pasta da plataforma. Uma variável de ambiente é uma configuração nomeada armazenada em um arquivo .env local ou no painel de hospedagem; reinicie o aplicativo relevante após alterá-lo e mantenha os segredos do servidor fora dos valores NEXT_PUBLIC_ e EXPO_PUBLIC_.

1. Abra apps/web/.env.local e mantenha BILLING_PROVIDER=local enquanto aprende a tela de checkout.

2. Para uma integração real, crie produtos em modo de teste em um provedor e, em seguida, adicione as chaves do servidor e o segredo do webhook às configurações do ambiente privado do host da Web. Um webhook é uma mensagem assinada que o serviço de cobrança envia ao seu aplicativo após a finalização da compra, renovação ou cancelamento; o caminho do endpoint está listado no exemplo de código deste guia.

3. Inicie a Web com corepack pnpm --filter @supastack/web dev e teste apenas o sandbox. Esperado: um webhook verificado atualiza o direito do espaço de trabalho conectado; abrir uma página de checkout por si só não concede acesso.

Use credenciais de sandbox/teste durante a integração. Configure BILLING_PROVIDER mais os segredos somente do servidor do provedor: stripe → STRIPE_SECRET_KEY, STRIPE_PRICE_ID, STRIPE_WEBHOOK_SECRET; espremedor de limão → LEMONSQUEEZY_API_KEY, LEMONSQUEEZY_STORE_ID, LEMONSQUEEZY_VARIANT_ID, LEMONSQUEEZY_WEBHOOK_SECRET; creem → CREEM_API_KEY, CREEM_PRODUCT_ID, CREEM_WEBHOOK_SECRET (CREEM_TEST_MODE=true para a caixa de areia); polar → POLAR_ACCESS_TOKEN, POLAR_PRODUCT_ID, POLAR_WEBHOOK_SECRET (POLAR_SERVER); uau → WHOP_API_KEY, WHOP_PLAN_ID, WHOP_WEBHOOK_SECRET; remo → PADDLE_API_KEY, PADDLE_PRICE_ID, PADDLE_WEBHOOK_SECRET (PADDLE_ENVIRONMENT); dodô → DODO_PAYMENTS_API_KEY, DODO_PRODUCT_ID, DODO_PAYMENTS_WEBHOOK_KEY (DODO_PAYMENTS_ENVIRONMENT); PayPal → PAYPAL_CLIENT_ID, PAYPAL_CLIENT_SECRET, PAYPAL_PLAN_ID, PAYPAL_WEBHOOK_ID (PAYPAL_ENVIRONMENT). O preço/produto deve representar a assinatura recorrente pretendida.

Webhook endpoint: /api/billing/webhook (stripe), /api/billing/webhook/lemonsqueezy, /api/billing/webhook/creem, /api/billing/webhook/polar, /api/billing/webhook/whop, /api/billing/webhook/paddle, /api/billing/webhook/dodo, /api/billing/webhook/paypal
Checkout endpoint: /api/billing/checkout
Portal endpoint: /api/billing/portal

Comandos para copiar

Siga os comentários para ver em qual pasta um comando é executado. Se dois terminais estiverem rotulados, abra duas janelas de terminal e mantenha o primeiro comando em execução enquanto usa o segundo.

corepack pnpm --filter @supastack/web dev

Fluxo de implementação

Segue a lista de eventos de ciclo de vida em docs/real-provider-smoke.md para configurar o endpoint de webhook. A verificação de assinatura exige o segredo de webhook correspondente ao endpoint. Um redirecionamento de checkout sozinho nunca deve conceder acesso.

A permissão na fronteira da ação de servidor decide se trabalho pago é permitido. Trata eventos repetidos com segurança e delimita registos de cliente/subscrição ao workspace correto. O checkout web permanece separado de compras nativas.

A chave que um plano concede é o vocabulário do produto compartilhado entre superfícies: ProductPlan.entitlement em src/product-plans.ts declara a chave de máquina minúscula escrita no livro-razão enquanto um plano é pago (o kit é enviado 'ai.reference-task' no pro e vitalício; src/billing-runtime.ts passa para o BFF). A mesma chave é a comparação entre o campo require_entitlement de uma entrada CMS e o entitlementKey prop equality do componente EntitlementGate - uma entrada bloqueada em 'ai.reference-task' desbloqueia qualquer espaço de trabalho que possua essa concessão, enquanto uma chave sem concessão de plano permanece bloqueada para todos.

Verificação e resolução de problemas

Se um webhook for rejeitado, compare o sandbox exato URL e o segredo de assinatura no painel do provedor com as configurações do servidor e verifique se esse provedor exige o encaminhamento de solicitações para localhost. Se a finalização da compra funcionar, mas o acesso permanecer bloqueado, inspecione o resultado do webhook e a chave de direito no plano. Nunca teste com credenciais de pagamento em tempo real enquanto segue este guia local.

Testa ativação, atualizações, cancelamento, assinaturas inválidas e eventos repetidos no sandbox. Inspeciona o estado de acesso persistido após o processamento. Criar uma sessão de checkout não consumida prova apenas conetividade, não fulfillment do ciclo de vida.

Perguntas frequentes

14 perguntas

O que é o supastack?

O supastack é uma base modular para construir produtos SaaS com IA. Reúne a infraestrutura comum para que possas concentrar-te nas funcionalidades próprias do teu produto.

Suporta web e mobile?

Sim. O supastack inclui apps Next.js e Expo como pontos de partida para experiências web e mobile.

Que autenticação está incluída?

O Better Auth cobre email/palavra-passe, OTP e login social. Os workspaces pessoais são aprovisionados com a conta para que os registos fiquem delimitados desde o primeiro dia.

Como é suportada a IA?

O supastack inclui IA multi-fornecedor configurável, registo de utilização, orçamentos e suporte encriptado de chaves próprias (BYOK).

Como são geridas as subscrições?

Para produtos construídos sobre o kit, a faturação Stripe, as subscrições e as permissões formam a base do acesso pago. Os segredos de fornecedor ficam no servidor.

Onde vive o código próprio do meu produto?

As funcionalidades próprias do produto ficam num codebase separado, enquanto o produto configura e integra os módulos base do supastack.

Como funciona o preço do supastack?

O kit é uma compra única com atualizações vitalícias: Uma framework por 249 $ (preço de lançamento temporário — 100 $ de desconto sobre o preço normal de 349 $) ou Todas as frameworks (Next.js, iOS, Android) por 499 $ (preço de lançamento temporário — 100 $ de desconto sobre o preço normal de 599 $), mais 75 $ por lugar de programador adicional. Sem subscrição do kit. O checkout neste site entrega a tua chave de licença por email, com acesso ao repo por convite GitHub.

Como é que os workspaces delimitam os meus dados?

Os registos do utilizador são delimitados por workspaceId. Identidade, permissões, utilização de IA, eventos de faturação e entradas de auditoria ficam dentro do limite do workspace pessoal.

Como funcionam os jobs em segundo plano?

O Trigger.dev é o runtime de jobs explícito. O contrato JobRunner só promete enqueue, status e cancel — a semântica de workflow permanece específica e explícita do Trigger.dev.

Como difere o email da divulgação?

O email transacional cobre fluxos de produto como avisos de conclusão de tarefas. A divulgação fria e as campanhas pertencem ao próprio produto, fora do módulo de email deste kit.

Como funcionam as compras no aplicativo móvel?

O aplicativo móvel inclui compras nativas e restauração via RevenueCat, com acesso verificado pelo servidor. Configure as contas das lojas e conclua os testes em dispositivos antes de publicar. A cobrança web permanece separada.

Onde residem as chaves dos fornecedores de IA?

As credenciais BYOK são encriptadas e ficam no servidor. As chaves são higienizadas nos logs; a utilização e os orçamentos ficam visíveis ao nível do workspace.

Quais métodos de pagamento o checkout aceita?

O checkout hospedado na Stripe aceita cartões e também pode oferecer Alipay e WeChat Pay quando essas carteiras estiverem ativadas na conta Stripe — útil para compradores na China. As autorizações de carteira são confirmadas de forma assíncrona, então a página da licença é atualizada assim que o pagamento é liquidado.

Posso solicitar um reembolso?

Depois de obter acesso ao repositório, o supastack é seu para sempre, portanto não pode ser reembolsado. Mas fique tranquilo: você recebe o código-fonte completo com atualizações vitalícias para criar e lançar produtos ilimitados para você ou seus clientes. Você apenas não pode revender o código nem redistribuir o repositório como starter kit ou modelo.

PT
Tema