Les webhooks sont des appels HTTP qui sont déclenchés par GHS vers une URL lors d’un évènement particulier. Cela peut être une signature électronique qui a été faite, ou un retour de DPAE ou une mise à jour de l’état civil d’un salarié.
Lorsque 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.
Contenu du Webhook
Tous les POST se font avec un objet de base.
{
"event_id": "48d4491f-6791-4608-8928-194a5da8375a",
"event_type": "dpae.salarie.ok",
"event_date": "2022-11-02T13:39:03.139Z",
"data": payload
}
| Attribut | Description |
|---|---|
| event_id | UUID unique de l’évènement |
| event_type | Le nom de l’évènement |
| event_date | La date a laquelle l’évènement a été effectué. /!\ Nous ne garantissons par l’ordre d’arriver des évènements. |
| data | les données de l’évènement |
Header du Webhook
| Header | Valeur |
|---|---|
| Content-Type | application/json |
| x-ghs-signature-256 | Signature de la requête qui permet de s’assurer que la requete 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 l'ensemble du contenu du webhook et concatener à la secret
En javascript / express
const payload = req.body
const secret = la_clef_prive
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_clef_prive;
computed_signature = hash_hmac(sha256, utf8_encode($payload), utf8_encode($secret));
if ($computed_signature == $signature) {
echo "ok"
}