> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mercy-pay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sécurité des webhooks

> Vérifiez la signature de chaque requête avant de la traiter.

Une URL de webhook est publique. N'importe qui connaissant l'adresse peut lui envoyer une requête qui ressemble à s'y méprendre à un vrai événement Mercy Pay. La signature est ce qui vous permet de faire la différence : vérifiez-la systématiquement avant de traiter quoi que ce soit.

## Principe

Mercy Pay calcule un **HMAC-SHA256** du corps brut de la requête, avec le secret de l'endpoint, et l'envoie en hexadécimal dans `X-MercyPay-Signature`.

Pour vérifier :

1. Lisez le corps **tel qu'il est reçu**, en octets, sans le parser.
2. Calculez le HMAC-SHA256 avec votre secret.
3. Comparez les deux valeurs à temps constant.

## Exemple en PHP

```php theme={null}
<?php

$rawBody = file_get_contents('php://input');
$received = $_SERVER['HTTP_X_MERCYPAY_SIGNATURE'] ?? '';
$expected = hash_hmac('sha256', $rawBody, getenv('MERCYPAY_WEBHOOK_SECRET'));

if (! hash_equals($expected, $received)) {
    http_response_code(401);
    exit;
}

$event = json_decode($rawBody, true);
```

## Bonnes pratiques

* Gardez le secret dans votre gestionnaire de secrets, jamais dans le code.
* Refusez tout événement dont la signature ne correspond pas.
* Ne vous fiez pas à l'ordre d'arrivée : utilisez le `status` de la ressource.
* Un secret compromis ne se change pas en place : supprimez l'endpoint, recréez-en un (nouveau secret), et mettez à jour votre serveur avant de rebasculer le trafic dessus.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.