Если проверка подписи webhook не проходит вообще никогда, даже для заведомо подлинных запросов, причина почти всегда техническая: подпись проверяется не по тем данным, по которым она была вычислена.
Подпись считается по сырому телу запроса
Большинство сервисов вычисляют подпись (HMAC) на основе точных байтов тела запроса до какого-либо разбора. Если ваш код сначала парсит JSON, а потом пересобирает его для проверки подписи, даже незначащее изменение форматирования (порядок полей, пробелы) даст другую подпись.
Решение — проверяйте подпись до парсинга
Читайте тело запроса как есть (raw body) и вычисляйте контрольную сумму по нему до того, как передадите данные в JSON-парсер — только после успешной проверки переходите к разбору содержимого.



