Webhook signature

Les webhooks sont des appels HTTP qui sont déclenchés par GHS vers une URL lors d’un évènement particulier. Lorsqu’un de ces évènements se produit, un POST HTTP est effectué sur l’adresse qui a été configurée, contenant un json. Le système attend une réponse HTTP 200 pour considérer que l’appel a bien été reçu, sinon le système réessaiera plus tard.

Webhooks

Contenu du Webhook

Tous les POST se font avec un objet de base.

{
    "event_id": "48d4491f-6791-4608-8928-194a5da8375a",
    "event_type": "signature.cree",
    "event_date": "2022-11-02T13:39:03.139Z",
    "data": { contenu complet de l'objet associé }
}
AttributDescription
event_idUUID unique de l’évènement
event_typeLe nom de l’évènement
event_dateLa date à laquelle l’évènement a été effectué.
/!\ Nous ne garantissons par l’ordre d’arrivée des évènements.
datales données de l’évènement

Header du Webhook

AttributDescription
Content-Typeapplication/json
x-ghs-signature-256Signature de la requête qui permet de s’assurer que la requête vient bien de chez GHS

Signature du Webhook

La signature vous permet de vous assurer que la contenu vient bien de chez GHS.

Pour cela, il faut comparer la signature que GHS vous donne dans les headers, avec la valeur que vous allez pouvoir calculer.

Pour la calculer , il faut faire un hachage HMAC SHA-256 de la concaténation du contenu du webhook avec la clé privée.

En javascript / express

const payload = req.body
const secret = la_cle_privee
const computed_signature = CryptoJS.HmacSHA256(payload, secret).toString();

if (signature == req.get(x-ghs-signature-256) {
    console.log(ok)
}

En php

$signature = $_REQUEST[x-yousign-signature-256];
$payload = stream_get_contents(STDIN);
$secret = la_cle_privee;
$computed_signature = hash_hmac(sha256, utf8_encode($payload), utf8_encode($secret));

if ($computed_signature == $signature) {
    echo "ok"
}

Events Webhook Signature

Il existe 6 types d’événements.

signature.cree

{
    "event_id": "00cc7304-f521-4997-bf57-5a1fb030ec62",
    "event_type": "signature.cree",
    "event_date": "2023-01-09T15:32:08.335Z",
    "data": {
        "signature": {
            "id": "63bc3378c11aadc40a7dddef",
            "label": "Contrat n°1208",
            "date_cree": "2023-01-09T15:32:08.316Z",
            "date_maj": "2023-01-09T15:32:56.592Z",
            "date_terminee": "2023-01-09T15:32:55.000Z",
            "signataires": [
                {
                    "id": "vincent_coquart_i0zoqyb6rg",
                    "prenom": "Coquart",
                    "nom": "Vincent",
                    "email": "vmail@mail.fr",
                    "telephone": "+33612345678",
                    "statut": "en_attente",
                    "date": "2023-01-09T15:32:55.000Z",
                    "url": "https://cloud-preprod.ghs.fr/signature/63bc3378c11aadc40a7dddef/lescure_david_ray6nd4xbt",
                }
            ],
            "statut": "en_attente"
            "meta": {
                "hello": "world",
                "my": 1,
                "name": true,
                "whatsappp": {
                    "ab",
                }
            }
            "documents": [
                {
                    "nom_fichier": "contrat-1208.pdf",
                    "nombre_pages": 2
                }
            ],
            "active": true,
            "webhook": true
        }
    }
}

signature.ok

{
    "event_id": "d05ded2f-b164-4167-8ec1-6d422d395171",
    "event_type": "signataire.ok",
    "event_date": "2023-01-09T15:32:55.000Z",
    "data": {
        "signature": {
            "id": "63bc3378c11aadc40a7dddef",
            "label": "Contrat n°1208",
            "date_cree": "2023-01-09T15:32:08.316Z",
            "date_maj": "2023-01-09T15:32:56.592Z",
            "date_terminee": "2023-01-09T15:32:55.000Z",
            "signataires": [
                {
                    "id": "vincent_coquart_i0zoqyb6rg",
                    "prenom": "Coquart",
                    "nom": "Vincent",
                    "email": "vmail@mail.fr",
                    "telephone": "+33612345678",
                    "statut": "fait",
                    "date": "2023-01-09T15:32:55.000Z",
                    "url": "https://cloud-preprod.ghs.fr/signature/63bc3378c11aadc40a7dddef/lescure_david_ray6nd4xbt",
                }
            ],
            "statut": "fait"
            "meta": {
                "hello": "world",
                "my": 1,
                "name": true,
                "whatsappp": {
                    "ab",
                }
            }
            "documents": [
                {
                    "nom_fichier": "contrat-1208.pdf",
                    "nombre_pages": 2
                }
            ],
            "active": true,
            "webhook": true
        }
    }
}

signataire.expiree

signataire.vu

{
    "event_id": "b6541e04-6625-42d5-82cd-a4d918a0e8cb",
    "event_type": "signataire.vu",
    "event_date": "2023-01-09T15:32:23.000Z",
    "data": {
        "signature": {
            "id": "63be9d1b9f0cb6c870700c0d",
            "meta": {
                "hello": "world",
                "my": 1,
                "name": true,
                "whatsappp": {
                    "ab",
                }
            }
        },
        "signataire": {
            "id": "vincent_coquart_i0zoqyb6rg",
            "prenom": "Coquart",
            "nom": "Vincent",
            "email": "vmail@mail.fr",
            "telephone": "+33612345678",
            "statut": "vu",
            "date": "2023-01-09T15:32:23.000Z"
        }
    }
}

signataire.ok

{
    "event_id": "f8b6118c-93d4-4839-8ed5-192b12318def",
    "event_type": "signataire.ok",
    "event_date": "2023-01-09T15:32:55.000Z",
    "data": {
        "signature": {
            "id": "63be9d1b9f0cb6c870700c0d",
            "meta": {
                "hello": "world",
                "my": 1,
                "name": true,
                "whatsappp": {
                    "ab",
                }
            }
        },
        "signataire": {
            "id": "vincent_coquart_i0zoqyb6rg",
            "prenom": "Coquart",
            "nom": "Vincent",
            "email": "vmail@mail.fr",
            "telephone": "+33612345678",
            "statut": "fait",
            "date": "2023-01-09T15:32:55.000Z"
        }
    }
}

signataire.cree