Cfaz Webhook - Pacientes

Criada por Wenderson Cotta Sansão, Modificado em Seg, 3 Nov na (o) 9:56 AM por Alexandre Pateis

A Cfaz envia automaticamente os dados completos do paciente para a URL configurada.


Configuração disponível em:

Configurações → Integração → Webhook


Estrutura do Payload


Exemplo de requisição enviada pelo Cfaz ao webhook do cliente:


{
  chave: "rombvxs5c7dsnu5fwrzm",
  "data": {
    "id": 123,
    "nome": "João da Silva",
    "data_nascimento": "1985-03-22",
    "telefone": "(11) 99999-9999",
    "email": "joao@email.com",
    "cpf": "123.456.789-00",
    "...": "Demais dados completos do paciente"
  }
  "event": "patient_datum.updated",
  "timestamp": "2025-07-18T14:00:00Z",
}


Cabeçalhos da Requisição


Cada requisição enviada pelo Cfaz inclui o cabeçalho x-signature-256, que contém um HMAC-SHA256 gerado a partir do corpo da requisição e do Token configurado no webhook.


"x-event-type": "delete",
"x-signature-256": sha256=5c9a1e87b5b2c9d6d12abfa7c42b9a23e1fba1e80f29e6f4f417c48e33f96d2d,
"authorization": "Bearer rombvxs5c7dsnu5fwrzm"


Validação da Requisição


Para garantir que os dados recebidos realmente vieram do Cfaz, o cliente deve validar a assinatura HMAC.


Exemplo de validação


const { createHmac, timingSafeEqual } = require('crypto')
const express = require("express")
const bodyParser = require("body-parser")

const TOKEN = "SEU_TOKEN_CONFIGURADO_NO_CFAZ"

const app = express()
app.use(bodyParser.json())

function verificarHMAC(chaveSecreta, payload, hmacRecebido) {
  if (!hmacRecebido || !payload) return false

  const hmacLimpo = hmacRecebido.replace('sha256=', '')

  const hmacEsperado = createHmac('sha256', chaveSecreta)
                      .update(payload, 'utf8')
                      .digest('hex')

  try {
    return timingSafeEqual(
      Buffer.from(hmacLimpo, 'hex'),
      Buffer.from(hmacEsperado, 'hex')
    )
  } catch {
    return false
  }
}

app.post("/webhook-test", (req, res) => {
  const assinatura = req.headers["x-signature-256"]
  const payload = JSON.stringify(req.body)
  const valido = verificarHMAC(TOKEN, payload, assinatura)

  if (!valido) {
    return res.status(401).json({ error: "Assinatura inválida" })
  }
  console.log("Webhook válido recebido:", req.body)
  res.status(200).json({ message: "Dados recebidos com sucesso!" })
})

app.listen(4000, () => {
  console.log("Servidor rodando na porta 4000")
})



Este artigo foi útil?

Que bom!

Obrigado pelo seu feedback

Desculpe! Não conseguimos ajudar você

Obrigado pelo seu feedback

Deixe-nos saber como podemos melhorar este artigo!

Selecione pelo menos um dos motivos
A verificação do CAPTCHA é obrigatória.

Feedback enviado

Agradecemos seu esforço e tentaremos corrigir o artigo