Aller au contenu

Outil

Vérificateur de signature webhook (HMAC SHA-256)

Votre serveur reçoit les demandes de devis QuoteBuilder par webhook et la signature ne passe pas ? Collez le corps brut de la requête, le secret enregistré avec le webhook et la valeur de l'en-tête X-QuoteBuilder-Signature. L'outil recalcule la signature dans votre navigateur, la compare et cherche les causes d'écart les plus courantes. Rien n'est envoyé : utilisez quand même un secret de test. Webhook de demande de devis.

Requête reçue

Résultat

Signature calculée (HMAC SHA-256, hexadécimal)
-
Signature reçue (normalisée)
-
Corps analysé
-

Outil de diagnostic, calcul local dans votre navigateur (Web Crypto). Aucune donnée n'est envoyée ni conservée. Aucune valeur n'est inventée : tout vient de ce que vous collez. Le résultat dit seulement si ce corps, ce secret et cet en-tête correspondent ; il ne garantit pas la sécurité de votre récepteur. Côté QuoteBuilder, l'événement envoyé est « quote.submitted », en POST, en JSON, avec une seule tentative par webhook actif : un envoi en échec n'est pas renvoyé automatiquement.

Vérifier côté serveur

Node.js (corps brut conservé, comparaison en temps constant) :

const crypto = require("crypto");

function signatureValide(corpsBrut, entete, secret) {
  const attendue = crypto.createHmac("sha256", secret).update(corpsBrut).digest("hex");
  const recue = String(entete || "").trim().toLowerCase();
  if (!/^[0-9a-f]{64}$/.test(recue)) return false;
  return crypto.timingSafeEqual(Buffer.from(attendue, "hex"), Buffer.from(recue, "hex"));
}
// corpsBrut : le Buffer ou la chaîne lue AVANT JSON.parse
// entete : req.headers["x-quotebuilder-signature"]

PHP :

$corpsBrut = file_get_contents('php://input');
$recue = strtolower(trim($_SERVER['HTTP_X_QUOTEBUILDER_SIGNATURE'] ?? ''));
$attendue = hash_hmac('sha256', $corpsBrut, $secret);
if (!hash_equals($attendue, $recue)) {
  http_response_code(401);
  exit;
}
$demande = json_decode($corpsBrut, true);

Ensuite : compte Free · webhook de demande de devis vers votre CRM · funnel de devis formation professionnelle · sources d'une demande : funnel, API, plugins · estimateur du coût de la double saisie · Intégrations · démo rayonnage.

FAQ

Les données quittent-elles le navigateur ?+

Non. Le corps, le secret et l'en-tête restent dans votre navigateur. Le HMAC SHA-256 est calculé avec Web Crypto. Rien n'est envoyé.

Quel en-tête QuoteBuilder envoie-t-il ?+

X-QuoteBuilder-Signature : 64 caractères hexadécimaux minuscules, HMAC SHA-256 du corps brut, sans préfixe sha256=.

Pourquoi un JSON réindenté ne correspond-il pas ?+

La signature porte sur les octets reçus. Un outil qui réindente le JSON change le corps. Signez le corps brut, avant tout parsing.

Un envoi en échec est-il renvoyé ?+

Non. Chaque webhook actif reçoit une seule tentative par demande. Un échec se rattrape ensuite par l'API.

Brancher un webhook sur une demande réelle.

Compte Free sans carte. Menu Support, API & webhooks, secret HMAC. La démo rayonnage montre un parcours public.

Commencer gratuitement