Configurer les webhooks¶
Introduction¶
Les webhooks permettent à votre application de recevoir des notifications en temps réel lorsque des événements se produisent dans VoidSign, comme la finalisation d'une demande de signature. Au lieu d'interroger l'API de manière répétée pour vérifier les changements de statut, VoidSign envoie une requête HTTP POST à votre endpoint dès qu'un événement se produit.
VoidSign implémente la spécification Standard Webhooks v1 pour la signature des événements webhook.
Pourquoi les webhooks plutôt que le polling¶
- Le polling gaspille des requêtes : vérifier le statut toutes les quelques secondes consomme rapidement votre limite de débit, surtout avec plusieurs demandes simultanées.
- Le polling ajoute de la latence : vous ne détectez la finalisation qu'au prochain cycle de polling, pas à l'instant où elle se produit.
- Les webhooks sont instantanés : VoidSign envoie un événement à votre endpoint dès que tous les signataires ont signé.
- Les webhooks sont plus simples : pas besoin de construire et maintenir une boucle d'interrogation, de gérer les intervalles ou de traiter les cas limites liés à la synchronisation.
Intégration en production
Pour un guide complet sur l'utilisation des webhooks dans le cadre d'une intégration en production, consultez Passer en production.
Prérequis¶
- Un compte VoidSign (la configuration de la facturation n'est requise qu'après avoir dépassé les 3 signatures mensuelles gratuites)
- Un endpoint HTTPS accessible publiquement pour recevoir les livraisons de webhooks
Configurer un webhook¶
Les webhooks sont créés et gérés via l'interface web VoidSign à l'adresse https://app.voidsign.com/pro/api/webhooks.
Lors de la création d'un webhook, vous fournissez :
- Un nom pour le webhook
- Une URL d'endpoint HTTPS où les événements seront livrés
- Les événements auxquels s'abonner (ou
*pour tous les événements)
Après la création, un secret de signature (commençant par whsec_) est généré et affiché une seule fois.
Conservez votre secret de signature
Le secret de signature n'est affiché qu'une seule fois à la création. Copiez-le immédiatement et stockez-le de manière sécurisée. Vous en aurez besoin pour vérifier les signatures des webhooks.
Vous pouvez envoyer un événement de test hello depuis l'interface web à tout moment pour vérifier que votre endpoint est accessible et fonctionne correctement.
Pour la liste complète des types d'événements, des schémas de payload et des en-têtes HTTP, consultez la référence Événements webhook.
Exigences de réponse¶
Votre endpoint doit retourner un code de statut HTTP 2xx pour accuser réception. Toute réponse non-2xx est considérée comme un échec et déclenche des réessais.
Votre endpoint doit répondre dans un délai de 15 secondes. Les requêtes qui expirent sont traitées comme des échecs.
Pour les détails sur le comportement de réessai, consultez Événements webhook : Comportement de réessai.
Vérifier les signatures¶
Chaque livraison de webhook est signée avec HMAC-SHA256 afin que vous puissiez vérifier qu'elle provient de VoidSign et n'a pas été altérée. La signature suit la spécification Standard Webhooks v1.
Pour vérifier une signature :
- Extrayez les en-têtes
webhook-id,webhook-timestampetwebhook-signaturede la requête. - Prenez votre secret de signature (par exemple
whsec_dGhpcyBpcyBub3QgYSByZWFsIHNlY3JldA==), supprimez le préfixewhsec_et décodez le reste en base64 pour obtenir les octets du secret. - Concaténez le contenu à signer :
{webhook-id}.{webhook-timestamp}.{raw_request_body}(les champs sont séparés par des points). - Calculez le HMAC-SHA256 du contenu à signer en utilisant les octets du secret comme clé.
- Encodez le condensé résultant en base64.
- Préfixez avec
v1,pour former la signature attendue :v1,{base64_digest}. - Comparez la signature attendue avec la valeur de l'en-tête
webhook-signature.
Pseudocode :
secret_bytes = base64_decode(remove_prefix(signing_secret, "whsec_"))
sign_content = "{webhook-id}.{webhook-timestamp}.{body}"
digest = hmac_sha256(key=secret_bytes, message=sign_content)
expected = "v1," + base64_encode(digest)
valid = constant_time_equal(expected, webhook-signature)
Utilisez une comparaison en temps constant
Utilisez toujours une fonction de comparaison de chaînes en temps constant (par exemple hmac.compare_digest en Python, crypto.timingSafeEqual en Node.js) pour prévenir les attaques par timing.