$payload */ public static function hash(array $payload): string { return hash('sha256', json_encode(self::normalize($payload), JSON_THROW_ON_ERROR)); } private static function normalize(mixed $value): mixed { if (is_array($value)) { ksort($value); return array_map(self::normalize(...), $value); } if ($value instanceof \BackedEnum) { return $value->value; } if ($value instanceof \DateTimeInterface) { return $value->format(DATE_ATOM); } return $value; } }