Alternar tema

Pagamentos para empresa solo: Stripe, Paddle, Lemon Squeezy ou WeChat Pay

Easton editorial illustration: one dominant circular payment-routing switch with four selectable rails, one downstream stacked entitlement ledger/database receiving the verified flow

"Paddle: liberar acesso e tratar o estado da assinatura com webhooks"

Aviso: este texto não é orientação tributária, jurídica, societária, cambial ou de elegibilidade. Para Merchant of Record, VAT/GST/sales tax, entidades nacionais ou estrangeiras e repasses, consulte os termos dos serviços e profissionais qualificados.

Seu pricing.ts define starter_monthly, pro_yearly, lifetime_license e wechat_one_time, mas o banco só tem is_paid. O webhook checkout.session.completed chega e o cliente volta por success_url, porém entitlements continua vazio. O problema não é o botão: o sistema não conecta produtos, pedidos, assinaturas e acesso.

Antes de escolher o provedor, responda cinco perguntas: o que vender, como cobrar, para quem, quem responde pela transação e pelo imposto sobre vendas e quem libera o acesso após o pagamento. Stripe, Paddle, Lemon Squeezy e WeChat Pay não são quatro botões equivalentes; cobrem camadas diferentes.

Defina o modelo de venda antes do provedor de pagamento

Compra única depende de pedido e entrega. Assinatura SaaS exige todo o billing lifecycle. Cobrança por uso também requer dados rastreáveis. Leve o modelo primeiro para products, prices e tabelas locais.

Modelo de vendaPontos de partidaEventos assíncronos principaisTabelas locais
Produto digital de compra únicaStripe / Paddle / Lemon Squeezycheckout.session.completed / transaction.completed / order_createdorders + entitlements
Assinatura SaaSStripe Billing / Paddle Billing / Lemon Squeezycustomer.subscription.* / subscription.*subscriptions + entitlements + usage_events quando necessário
Assinatura e compra únicaStripe Billing / Paddle BillingVários eventosorders + subscriptions + entitlements
China continental ou WeChatWeChat Pay (JSAPI/H5/Native)Callback e consulta do pedidoorders + wechat_prepay

Três pontos importam:

  • Produto único precisa de pedido, entrega, reembolso e reenvio, não de todo o ciclo de assinatura.
  • SaaS recorrente precisa de subscriptions com current_period_start/end, cancel_at e status; cobrança por uso adiciona usage_events auditáveis.
  • WeChat Pay é meio de pagamento e sistema de lojista, não Merchant of Record global nem plataforma de SaaS billing.

Os recursos mudam. Antes de integrar, revise região da conta, modo do produto, meios de pagamento, versão da API e termos.

Merchant of Record não elimina todas as responsabilidades

Merchant of Record, ou MoR, é o vendedor registrado da transação. Paddle e Lemon Squeezy usam esse modelo para produtos digitais elegíveis e tratam pagamento, imposto sobre vendas, reembolso ou disputa dentro desse escopo. Isso reduz a operação fiscal global, mas não elimina obrigações de renda, entidade, produto, dados e contabilidade.

Com Stripe, o lojista geralmente continua sendo o vendedor. Stripe Tax ajuda a calcular sales tax, VAT e GST e oferece ferramentas de monitoramento e registro, mas não transforma Stripe automaticamente em Merchant of Record. Registro, declaração e entidade dependem da jurisdição e da transação.

Não escolha um MoR por um limite fixo de receita. Compare estas dimensões:

DimensãoStack próprio de pagamento e billingMerchant of Record
PersonalizaçãoCombinar Checkout, Billing, Tax, faturas e processos internosSeguir política de produto, checkout, contrato e regras de repasse
Operação fiscal e de cobrançaO lojista confirma registro, declaração, faturas, reembolsos e disputasO MoR assume imposto, pagamento e parte do compliance nas transações cobertas
CustoSomar ferramentas fiscais, engenharia, financeiro e suporte à taxaAvaliar repasses, reembolsos, adicionais e limites, não só percentual
Melhor encaixeMuita personalização, operação existente ou contratos especiaisMenos trabalho fiscal global e de assinaturas para produtos elegíveis

O limite contratual e fiscal depende de entidade, território, produto e cliente. Página de marketing não substitui termos nem orientação profissional.

Como escolher Stripe, Paddle, Lemon Squeezy ou WeChat Pay

Se você precisa de assinaturas e WeChat Pay, separe os problemas. Ciclo da assinatura, pagamentos globais e China podem usar serviços diferentes. Um método listado não funciona necessariamente em toda região, modo Checkout ou recorrência.

ServiçoResponsabilidadeAssinaturas e compras únicasPagamentos na ChinaLicença nativaBom ponto de partida
StripePayment, Billing e Tax; normalmente não MoRCheckout e Billing personalizáveisAlipay/WeChat Pay dependem de região, moeda e modoSem License Key geralSaaS que controla pagamentos, assinaturas, impostos e processos
PaddleMerchant of RecordPaddle Billing e CheckoutConferir Dashboard e documentação por conta e regiãoAplicativo gerencia acessoSoftware que quer reduzir imposto global e operação recorrente
Lemon SqueezyMerchant of RecordDigitais, assinaturas simples e consumoAlipay/WeChat Pay em compra única; recorrência mais limitadaLicense KeysProdutos digitais, licenças e primeiras assinaturas
WeChat PayMeio de pagamento e sistema de lojistaJSAPI/H5/Native; billing próprioChina continental e WeChatNenhumaCompras únicas em RMB e checkout WeChat

A documentação oficial confirmava em 18 de julho de 2026:

  • Stripe Checkout oferece páginas hospedadas, incorporadas e componentes combináveis. Os métodos dependem de região, moeda e modo Checkout.
  • Paddle entrega webhooks ao menos uma vez. Sem 200 em cinco segundos, tenta novamente. Eventos podem duplicar ou chegar fora de ordem; use event_id e occurred_at.
  • Lemon Squeezy lista Cards, PayPal, Apple Pay, Google Pay, Alipay, WeChat Pay, Cash App Pay e bank debits. Assinaturas aceitam apenas Cards, Apple Pay, Google Pay e PayPal.
  • WeChat Pay H5 exige pedido no servidor, callback e consulta ativa. O retorno do navegador não é definitivo.

Taxas, métodos, repasses, países e políticas mudam. Abra preços e contratos atuais ao montar o orçamento.

O webhook é a fronteira da sincronização de acesso

Dois erros comuns:

  1. checkout.session.completed chega e success_url abre, mas entitlements não muda e o cliente não acessa.
  2. O mesmo evento entra duas vezes em webhook_events e o handler emite duas licenças.

Os dois tratam uma requisição HTTP ou página de sucesso como verdade final. Eventos podem duplicar, atrasar ou chegar fora de ordem; alguns estados exigem consulta ou evento posterior.

Princípios para o endpoint webhook

PrincípioStripePaddleLemon SqueezyWeChat Pay
HTTPS endpointObrigatórioObrigatórioObrigatórioObrigatório
Verificação de assinaturaStripe-SignaturePaddle-SignatureX-SignatureAssinatura WeChat Pay API v3
Chave idempotenteID de evento ou objetoevent_idTipo + ID do objeto ou chave únicaout_trade_no e ID da transação
RespostaValidar e guardar, responder rápido e processar em segundo plano200 em cinco segundosResponder sucesso e processar em segundo planoSeguir o contrato atual
CompensaçãoConsultar pagamento ou assinaturaConsultar entidades e reconciliarConsultar pedido ou assinaturaConsultar, conciliar e recuperar manualmente

Regras operacionais:

  • Webhook ou callback inicia a sincronização. success_url apenas mostra processamento.
  • Valide a assinatura e guarde o evento ou campos em webhook_events; leve o trabalho complexo para um job assíncrono.
  • Aplique restrição única e registre event_id, source, occurred_at, processed_at, status e payload_hash.
  • Para desordem, compare horário, atualização do objeto ou versão do estado, não apenas chegada.
  • Execute reconciliation, consulte pedido ou assinatura e mantenha recuperação manual.

Tabelas de pedidos, assinaturas, acesso e eventos

TabelaCampos principaisStripePaddleLemon Squeezy
ordersprovider_order_id, customer_id, amount, currency, status, created_atCheckout Session / PaymentIntenttransactionorder
subscriptionsprovider_subscription_id, customer_id, status, current_period_end, cancel_atsubscriptionsubscriptionsubscription
entitlementsuser_id, product_id, feature_key, source, status, expires_atDerivado de order ou subscriptionDerivado de transaction ou subscriptionDerivado de order, subscription ou license
webhook_eventsprovider, event_id, occurred_at, processed_at, status, payload_hashIdempotência e auditoriaIdempotência e ordemIdempotência e auditoria

Não copie cada objeto da API. Defina campos estáveis para decidir acesso e guarde IDs do provedor para consultas e reconciliation.

Estratégias de sincronização de acesso

EstratégiaQuando usarImplementação
Lean cacheMaioria dos SaaS recorrentesGuardar customer, subscription, status, price e product necessários e atualizar por eventos
State mirrorVisões offline ou painéis complexosReplicar mais dados, registrar atualização e evitar divergência com reconciliation
License keyProduto digital único ou desktopGuardar instance ID e validar store, product, variant e customer; chave não é sistema de usuários

Paddle recomenda lean cache para a maioria dos aplicativos. Use state mirror apenas para consultas locais realmente necessárias. Chaves Lemon Squeezy também exigem validar produto e cliente e associar a instance à conta e ao dispositivo.

Pontos de integração de cada serviço

Estes pontos delimitam a primeira implementação e não substituem a documentação completa.

Integrar Stripe

Um SaaS inicial pode usar Checkout hospedado e Customer Portal em vez de manter formulário de cartão. Stripe Billing gerencia assinaturas, faturas, consumo e recuperação de receita. Stripe Tax é ferramenta fiscal, não Merchant of Record.

Produtos e preços devem mapear acesso local: product_id é produto ou pacote; price_id, mensal, anual, seat ou usage. Não deixe só is_paid em users.

Veja o tutorial de carrinho Next.js e Stripe para Checkout Session, endpoint webhook e pedidos.

Integrar Paddle

Confirme que o tutorial usa Paddle Billing, não Paddle Classic. Mudam API, webhooks, Paddle.js e Product/Price.

Paddle Checkout mostra a caixa, mas o aplicativo faz provisioning. Normalmente customer, subscription, status, price, product e scheduled change bastam. Crie state mirror só se operações precisar de dados completos.

Atualize por webhook e execute reconciliation. Merchant of Record não sabe automaticamente quem usa cada recurso.

Integrar Lemon Squeezy

Lemon Squeezy atende produtos digitais, licenças e assinaturas simples. Oferece Merchant of Record, checkout, subscriptions, usage-based billing, webhooks e License Keys. Confirme taxas e escopo no store plan atual.

Após ativar a chave, guarde instance ID e valide store_id, product_id, variant_id e customer. Chave alheia ou revendida não deve ativar Pro.

Para assinatura WeChat Pay, confira separadamente os métodos recorrentes. A documentação lista WeChat Pay e Alipay, mas assinaturas aceitam Cards, Apple Pay, Google Pay e PayPal.

Limites do WeChat Pay

WeChat Pay funciona na China continental e no WeChat, mas não é Merchant of Record global nem ciclo SaaS completo. O lojista gerencia estado, assinatura, consultas, reembolsos, reconciliation, faturas e acesso.

H5, JSAPI, Mini Program e Native são cenários de pagamento. No H5, o backend cria o pedido e entrega h5_url; na volta do navegador, consulta e aplica o callback ao mesmo out_trade_no.

Confira permissões, entidade, domínios, taxas e parâmetros na documentação atual do WeChat Pay.

Próximo passo: transformar o botão em máquina de estados testável

Depois de escolher, divida a integração em tarefas verificáveis:

  1. Crie orders, subscriptions, entitlements e webhook_events; adicione usage_events para consumo.
  2. Implemente assinatura, idempotência, desordem, resposta rápida e recuperação em cada webhook ou callback.
  3. Faça a página de sucesso consultar o pedido local em vez de gravar is_paid=true.
  4. Adicione testes de consulta, reconciliation, reembolso, renovação falha e recuperação manual.
  5. Reenvie eventos e inverta atualizações no sandbox; o acesso não pode duplicar nem regredir incorretamente.

Para backend e banco de dados, continue em Supabase Edge Functions e nos artigos de backend e dados desta série. Concluir não é voltar da página de pagamento: pedidos, assinaturas e acesso precisam convergir apesar de duplicidade, atraso, desordem e reembolso.

Escolher e implementar pagamentos para uma empresa solo

Parta do modelo de venda, das responsabilidades e do mercado para escolher provedores e criar uma sincronização de acesso auditável.

⏱️ Estimated time: 45 min

  1. 1

    Step 1: Definir o modelo de venda

    Especifique compra única, assinatura SaaS, cobrança por uso ou modelo híbrido e documente reembolso, renovação, upgrade, downgrade e fim do acesso.
  2. 2

    Step 2: Distribuir responsabilidades fiscais e operacionais

    Decida se vai combinar payment, billing e Tax ou usar um Merchant of Record. Confirme entidade e obrigações tributárias nos termos do provedor e com orientação profissional.
  3. 3

    Step 3: Escolher meios de pagamento por mercado

    Avalie Stripe, Paddle e Lemon Squeezy para cartões e assinaturas globais e WeChat Pay para compras únicas na China continental ou no WeChat, verificando região, categoria e elegibilidade.
  4. 4

    Step 4: Criar o estado local

    Crie orders, subscriptions, entitlements e webhook_events. IDs únicos de evento ou pedido garantem idempotência e auditoria.
  5. 5

    Step 5: Testar a sincronização assíncrona

    Teste assinatura, duplicidade, eventos fora de ordem, timeout, reembolso, renovação com falha e recuperação manual. A página de sucesso apenas mostra o estado.

FAQ

Qual é a principal diferença entre Stripe, Paddle e Lemon Squeezy?
Stripe oferece ferramentas de pagamento, Billing e Tax, enquanto o lojista normalmente mantém responsabilidades comerciais, fiscais e operacionais. Paddle e Lemon Squeezy atuam como Merchant of Record nas transações cobertas. O aplicativo ainda sincroniza seus entitlements.
Uma empresa solo deve começar com Merchant of Record ou Stripe?
Não decida por um único limite de receita. Compare mercados, elegibilidade do produto, capacidade fiscal e de cobrança, repasses, reembolsos, personalização e custo total. Consulte profissionais sobre entidade e tributos.
Paddle ou Lemon Squeezy liberam o acesso ao SaaS automaticamente?
Não. O serviço processa pagamento, billing ou tarefas de Merchant of Record, mas o aplicativo recebe webhooks, associa pedidos ou assinaturas a entitlements e recupera eventos perdidos com reconciliation.
Se Lemon Squeezy aceita WeChat Pay, pode cobrar assinatura com WeChat Pay?
Não necessariamente. A documentação atual lista WeChat Pay e Alipay, mas produtos de assinatura aceitam somente cartões, Apple Pay, Google Pay e PayPal. Verifique a documentação antes do lançamento.
WeChat Pay substitui Stripe em um SaaS global?
Não diretamente. É um meio de pagamento e sistema de lojista para China continental e WeChat. Assinaturas globais, impostos, ciclo de cobrança e várias moedas exigem outro desenho.
Como lidar com webhooks duplicados, fora de ordem ou perdidos?
Valide a assinatura, guarde o evento original e imponha um ID único. Use horário do evento ou versão do estado para ordenar, responda rápido, processe de forma assíncrona e corrija com consultas, reconciliation e recuperação manual.
Quais tabelas um sistema mínimo de pagamentos precisa?
No mínimo orders, entitlements e webhook_events. Adicione subscriptions para recorrência e usage_events rastreáveis para cobrança por uso.

9 min de leitura · Publicado em: 21 out 2026

Comentários

Entre com GitHub para comentar

Easton BlogEaston Blog