Skip to content

Integração Stripe

O MIDDAG Account integra-se ao Stripe para processamento de pagamentos, gerenciamento de assinaturas e manipulação de faturas. A integração opera em modo de conta dupla para suportar duas entidades jurídicas faturando em moedas diferentes.

Arquitetura de conta dupla

A MIDDAG opera duas contas Stripe:

ContaEntidade jurídicaMoedaUtilizada para
Stripe BRMIDDAG Tecnologia LTDABRLTodos os produtos brasileiros
Stripe US/LLCMIDDAG, LLCUSDPlugins e serviços internacionais

Cada conta possui suas próprias chaves de API, endpoint de webhook e segredo de assinatura. O plugin roteia as transações para a conta correta automaticamente.

Configuração

Chaves de API

Configure as seguintes variáveis de ambiente no seu wp-config.php ou ambiente:

VariávelDescrição
STRIPE_BR_SECRET_KEYChave secreta do Stripe BR
STRIPE_BR_PUBLISHABLE_KEYChave pública do Stripe BR
STRIPE_BR_WEBHOOK_SECRETSegredo de assinatura de webhook do BR
STRIPE_LLC_SECRET_KEYChave secreta do Stripe US
STRIPE_LLC_PUBLISHABLE_KEYChave pública do Stripe US
STRIPE_LLC_WEBHOOK_SECRETSegredo de assinatura de webhook do US

Você pode encontrar esses valores no Stripe Dashboard em Developers > API keys e Webhooks.

Endpoints de webhook

Registre estas URLs no dashboard de cada conta Stripe:

Conta StripeURL do Webhook
Stripe BRhttps://seusite.com/wp-json/middag-account/v1/webhooks/stripe/br
Stripe US/LLChttps://seusite.com/wp-json/middag-account/v1/webhooks/stripe/llc

Resolução de conta

Quando um evento de pagamento ou assinatura ocorre, o plugin determina qual conta Stripe utilizar através de uma resolução em cascata:

  1. Override explícito -- Um admin ou o header X-Middag-Company da API especifica a conta diretamente.
  2. Channels do produto -- O YAML do produto define com quais contas Stripe ele sincroniza.
  3. Entidade da organização -- O ID de cliente Stripe existente da organização determina a conta.
  4. Auto-detecção -- Recorre ao formato do ID fiscal (CNPJ = Brasil) ou moeda preferida.

Gerenciamento de clientes

Cada organização armazena IDs de cliente Stripe separados:

CampoConta
stripe_customer_id_brStripe BR
stripe_customer_id_globalStripe US

Os clientes são criados sob demanda -- apenas quando a primeira transação é roteada para aquela conta. Uma organização pode ter registros de cliente em ambas as contas (raro, mas suportado).

Dados sincronizados

Pagamentos e faturas

O WooCommerce é a fonte da verdade para o estado de faturamento. O Stripe alimenta o WooCommerce por meio de webhooks, e o plugin lê do WooCommerce. O plugin nunca lê o estado de faturamento diretamente do Stripe.

Assinaturas

Alterações de assinatura no Stripe (upgrades, downgrades, cancelamentos) são refletidas nos registros de entitlement do plugin. Nível, período e status são atualizados quando o Stripe envia eventos de assinatura.

Eventos de webhook

Eventos principais

Evento StripeAção do plugin
invoice.paidFatura sincronizada. Status da cotação vinculada definido como paid.
invoice.payment_failedPolítica de recuperação de pagamento consultada. Entitlement pode ser suspenso.
subscription.updatedEntitlement atualizado (nível, período).
subscription.deletedEntitlement definido como cancelled.
charge.refundedFatura marcada como reembolsada. Admin notificado.

Eventos adicionais

Evento StripeAção do plugin
checkout.session.completedPedido criado a partir da sessão Stripe Checkout.
payment_intent.succeededPedido marcado como pago.
payment_intent.payment_failedFalha de pagamento registrada.
customer.subscription.createdRegistro local de assinatura criado ou atualizado.
charge.dispute.createdAdmin notificado, disputa registrada.

Válidação de assinatura

Cada webhook de entrada é validado usando HMAC-SHA256 com o header Stripe-Signature. A janela de tolerância é de 300 segundos (5 minutos). Webhooks que falham na válidação de assinatura são rejeitados com HTTP 401 e registrados como erros.

Cada conta Stripe utiliza seu próprio segredo de assinatura de webhook. Nunca compartilhe segredos entre contas.

Comportamento de rateio

Nível do produtoComportamento de rateioObservações
Pluginscreate_prorationsRateio padrão do Stripe em alterações
SuportenoneCobranças únicas, rateio não necessário
Plataformacreate_prorationsAdd-ons rateados no meio do ciclo
Serviçosalways_invoiceAlterações geram uma fatura imediata

Marcação de transações

Cada registro financeiro (pedido, fatura, licença, contrato) carrega uma tag billing_entity (middag_br ou middag_global). A REST API suporta filtro por entidade: ?billing_entity=middag_br.

Adicionando uma nova entidade

A arquitetura de conta dupla é projetada para escalar. Para adicionar uma terceira entidade (por exemplo, middag_eu):

  1. Adicione variáveis de ambiente para a nova conta Stripe.
  2. Registre a conta no container de DI.
  3. Adicione a entidade à whitelist do resolvedor de contas.
  4. Registre um novo endpoint de webhook (/webhooks/stripe/eu).
  5. Adicione um campo stripe_customer_id_eu às organizações.
  6. Configure o webhook no Stripe Dashboard.

Nenhuma alteração nos handlers centrais de webhook ou filtros da API é necessária.

Solução de problemas

SintomaCausa provávelCorreção
Webhooks retornando 401Segredo de assinatura de webhook incorretoVerifique se o segredo corresponde ao Stripe Dashboard
Pagamentos não sincronizandoURL do webhook não registrada no StripeAdicione a URL do endpoint em Stripe > Webhooks
Conta errada usada no pagamentoBloco channels do produto ausenteVerifique se o YAML do produto possui os channels do Stripe
Registros duplicados de faturaVerificação de idempotência falhandoVerifique o rastreamento de stripe_event_id no banco de dados
Entitlement não atualizandoEvento de assinatura fora da lista tratadaVerifique se o tipo de evento está habilitado no Stripe