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 salarié qui a été déclaré chez l’ursaf.
Lorsque un de ces événements se produit, un POST HTTP est effectué sur l’adresse qui a été configuré, 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 ressayera plus tard (TODO, PARLER DU BACKOFF)
Contenu du Webhook
Tous les POST se font avec un object 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 garentissons 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"
}
Events Webhook
dpae.salarie.ok
Ces événements sont déclenchés lorsque la déclaration a été correctement effectué pour le salarié.
{
"event_id": "48d4491f-6791-4608-8928-194a5da8375a",
"event_type": "dpae.salarie.ok",
"event_date": "2022-11-02T13:39:03.139Z",
"data": {
"dpae": {
"id": "636270a36e3bf4eb030474e3",
"statut": false,
"meta": {
"code_societe": "AB",
"a": "b"
}
},
"salarie": {
"id": "coquart_vincent_5kcafudj0i",
"identifiants": {
"ab": "b",
"code_contrat": "ABC",
"matricule": "A"
},
"reference": "4YSNM",
"etat": {
"date": "2022-11-02T13:39:03.139Z",
"statut": "declaration_ok"
}
}
}
}
dpae.salarie.ko
Ces événements sont déclenchés lorsqu’il y a une erreur dans la déclaration d’un employé
{
"event_id": "ab38d94d-f0c5-4d4d-b592-b39a86acf256",
"event_type": "dpae.salarie.ok",
"event_date": "2022-11-02T13:29:08.477Z",
"data": {
"dpae": {
"id": "636270a36e3bf4eb030474e3",
"statut": false,
"meta": {
"code_societe": "AB",
"a": "b"
}
},
"salarie": {
"id": "coquart_vincent_nigedoajsp",
"identifiants": {
"ab": "b",
"code_contrat": "ABC",
"matricule": "A"
},
"etat": {
"date": "2022-11-02T13:29:08.477Z",
"statut": "refus"
"raison": "Date et/ou Heure dembauche invalide - invraisemblable ou non renseignee"
"categorie_probleme": "bloquant"
}
}
}
}
dpae.ok
Ces événements sont déclenchés lorsque les retours de DPAE ont été tous fait.
{
"event_id": "4ebd4df6-9ee4-4aef-b497-3738bb15edc9",
"event_type": "dpae.ok",
"event_date": "2022-11-02T13:39:03.141Z",
"data": {
"dpae": {
"id": "636270a36e3bf4eb030474e3",
"statut": true,
"meta": {
"code_societe": "AB",
"a": "b"
}
"date_cree": "2022-11-02T13:28:38.810Z",
"date_maj": "2022-11-02T13:29:08.791Z",
"date_terminee": "2022-11-02T13:39:03.141Z",
"date_derniere_interrogation": "2022-11-02T13:38:08.308Z",
"depot_status": {
"etat_conformite": true
"certificat_conformite": "01TEST0632792095500041202211220100000000000000200000220221102142907-dcaca72d25e79dfb5fb6a3efb5e1c708ac43b4df-V1_MEQCIB6g+ax+g+uxiBYIYfDt2Il914trytXZ2t2ov2LJyxavAiA/BCrU7PVoCjYZsQL9U78bO1fTpZvKh85cY8ZTSU5utw== ()",
"date": "2022-11-02T13:29:08.501Z",
},
"salaries": [
{
"id": "coquart_vincent_5kcafudj0i",
"identifiants": {
"ab": "b",
"code_contrat": "ABC",
"matricule": "A"
},
"reference": "4YSNM",
"etat": {
"date": "2022-11-02T13:39:03.139Z",
"statut": "declaration_ok"
}
},
{
"id": "coquart_vincent_nigedoajsp",
"identifiants": {
"ab": "b",
"code_contrat": "ABC",
"matricule": "A"
},
"etat": {
"date": "2022-11-02T13:29:08.477Z",
"statut": "refus",
"raison": "Date et/ou Heure dembauche invalide - invraisemblable ou non renseignee",
"categorie_probleme": "bloquant"
}
},
{
"id": "coquart_vincent_s1bqm5d1m6",
"identifiants": {
"ab": "b",
"code_contrat": "ABC",
"matricule": "A"
},
"etat": {
"date": "2022-11-02T13:29:08.479Z",
"statut": "refus",
"raison": "Date et/ou Heure dembauche invalide - invraisemblable ou non renseignee",
"categorie_probleme": "bloquant"
}
},
]
}
}
}
Exemple webhook Salarie
{
"event_id": "48d4491f-6791-4608-8928-194a5da8375a",
"event_type": "salarie",
"event_date": "2022-11-02T13:39:03.139Z",
"data": {
"salarie": {
"code_societe": "SocA",
"matricule": "lad",
"nom": "LANDRAGIN",
"prenom": "Drissia",
"nom_naissance": "",
"pseudonyme": "",
"genre": "Madame",
"adresse": "29 rue des Clamarts",
"complement_adresse": "",
"code_postal": "94130",
"ville": "Nogent",
"code_pays": null,
"code_pays_nationalite": null,
"telephone": "0663533943",
"mail": "dl@ghs.fr",
"refus_dematerialisation&": false,
"date_naissance": "1978-04-19",
"lieu_naissance": "Pontoise",
"departement_naissance": "95",
"code_pays_naissance": null,
"numero_securite_sociale": "278049550013474",
"numero_conges_spectacles": "",
"retraite": false,
"fiscalite": "FR",
"abattement": null,
"date_visite_medicale": "0000-00-00",
"date_prochaine_visite_medicale": "0000-00-00",
"date_entree": "0000-00-00",
"date_anciennete": "0000-00-00",
"compte_racine": "421",
"compte_terminaison": "LAN",
"libelle_racine": "NAP",
"libelle_terminaison": "LANDRAGIN Drissia",
"mode_reglement": "",
"iban": "",
"bic": "",
"statut_handicape": 12,
"statut_handicape_date_debut": "2020-01-02"
}
}
}