Skip to content

Referência de Webhooks

O middag-account recebe webhooks de entrada de serviços externos e despacha eventos de domínio internamente. Este documento cobre endpoints de webhook, verificação de payload e tipos de evento.

Endpoints de Webhooks de Entrada

MétodoEndpointAutenticaçãoDescrição
POST/webhooks/stripeStripe SignatureEventos de pagamento Stripe
POST/webhooks/hubspotHubSpot SignatureEventos de CRM HubSpot

URL base: /wp-json/middag-account/v1

Nenhuma autenticação JWT é utilizada. Cada webhook é validado por assinaturas específicas do serviço.

Roteamento por Empresa

Ambos os endpoints usam o header X-Middag-Company (middag_br ou middag_global) para rotear eventos para a entidade legal correta. Um único endpoint unificado por serviço atende ambas as entidades.

Eventos de Webhook Stripe

Verificação de Assinatura

Webhooks do Stripe são validados usando Stripe\Webhook::constructEvent() com o header Stripe-Signature e o segredo do endpoint de webhook. Requisições com assinatura inválida ou ausente recebem HTTP 401.

php
$event = \Stripe\Webhook::constructEvent(
    $payload,
    $request->getHeader('Stripe-Signature'),
    $webhookSecret
);

Eventos Processados

Evento StripeAção
checkout.session.completedMarcar pedido como pago, acionar fluxo de entitlement
invoice.paidRegistrar pagamento de fatura, atualizar assinatura
invoice.payment_failedSinalizar falha de pagamento, notificar organização
customer.subscription.updatedSincronizar mudanças de status de assinatura
customer.subscription.deletedCancelar assinatura, suspender entitlements
charge.refundedProcessar reembolso, atualizar status do pedido

Schema de Payload (checkout.session.completed)

json
{
  "id": "evt_1abc...",
  "type": "checkout.session.completed",
  "data": {
    "object": {
      "id": "cs_live_...",
      "customer": "cus_...",
      "payment_status": "paid",
      "metadata": {
        "organization_id": "42",
        "quote_id": "101"
      }
    }
  }
}

Eventos de Webhook HubSpot

Verificação de Assinatura

Webhooks do HubSpot são validados usando o header X-HubSpot-Signature com o segredo do cliente HubSpot. A assinatura é um hash HMAC-SHA256 do segredo do cliente + corpo da requisição.

php
$expectedHash = hash('sha256', $clientSecret . $requestBody);
if (!hash_equals($expectedHash, $signatureHeader)) {
    return new WP_REST_Response(['error' => 'Invalid signature'], 401);
}

Eventos Processados

Evento HubSpotAção
Contact createdSincronizar contato com usuário WordPress
Contact updatedAtualizar metadados do usuário
Deal stage changedAtualizar status do quote vinculado
Form submissionProcessar captura de lead, criar organização

Tratamento de Erros

CenárioResposta HTTPComportamento
Header de assinatura ausente401Rejeitar imediatamente
Assinatura inválida401Rejeitar, registrar tentativa
Tipo de evento desconhecido200Confirmar recebimento, ignorar
Falha no processamento500Registrar erro, retry pelo provedor

Endpoints de webhook sempre retornam 200 para eventos conhecidos processados com sucesso. Retornar non-2xx faz o provedor reenviar a entrega.

Eventos de Webhook de Saída (Eventos de Domínio)

Eventos de domínio são despachados internamente via do_action(). Consumidores externos escutam via hooks do WordPress. Consulte Pontos de Extensão para a lista completa de eventos de domínio.

Eventos-chave que acionam efeitos colaterais entre sistemas:

Evento de DomínioEfeitos Colaterais
middag/quote/paidCriar entitlement, atualizar deal no HubSpot
middag/entitlement/provisionedCriar automaticamente licença, environment ou serviço
middag/entitlement/suspendedNotificar proprietário da organização, pausar downstream
middag/entitlement/cancelledRevogar acesso downstream

Requisitos de Segurança

  • Nunca processe um webhook sem validar a assinatura
  • Segredos de webhook devem ser armazenados fora do webroot (variáveis de ambiente ou wp-config)
  • Todo processamento de webhook é registrado para fins de auditoria
  • Proteção contra replay: o Stripe oferece proteção baseada em timestamp; verifique a janela de tolerância

Relacionados