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