Подключение Webhook
Tatiana avatar
Автор: Tatiana
Обновлено больше недели назад
  1. Перейдите в раздел Подключить аккаунт, выберите Webhook.

  2. Заполните данные.


    Имя веб-узла: любое произвольное имя, используется для удобства отображения данного аккаунта в списке всех аккаунтов.

    URL-адрес: адрес на который будет уходить запрос для подключение аккаунта и публикации Webhook.

    Секретный токен: необходим для аутентификации запросов клиента, в Headers запроса мы отправляем x-hub-signature который необходимо проверить и сравнить на стороне клиента.

  3. Подтверждение домена при подключении аккаунта. На Ваш сервер будет отправлен POST-запрос, содержащий JSON: {"type": "confirmation", "project_id": id-вашего-проекта}. Сервер должен вернуть строку: 1qsRgoUgt.

  4. Проверка Секретного токена на стороне клиента, пример на PHP.

    <?

    public const CLIENT_SECRET_KEY = '{Ключ который указали в поле Секретный токен при подключении аккаунта}';

    /**
    * @return bool
    */
    public function checkSignature()
    {
    $data = getPayload();
    $expectedSignature = hash_hmac('sha1', $data ? json_encode($data) : '', self::CLIENT_SECRET_KEY);
    $headerSignature = getRequestHeaders('x-hub-signature');

    $signature = strlen($headerSignature) === 45 && strpos($headerSignature , 'sha1=') === 0 ? substr($headerSignature, 5) : '';

    return hash_equals($signature, $expectedSignature);
    }

    /**
    * @return array
    */
    private function getPayload()
    {
    $data = file_get_contents('php://input');
    return json_decode($data, true);
    }

    /**
    * @return string|null
    */
    private function getRequestHeaders($headerCode)
    {
    $requestHeaders = apache_request_headers();
    return isset($requestHeaders[$headerCode]) ? $requestHeaders[$headerCode] : null;
    }

    ?>

  5. При публикации поста на Ваш сервер будет POST-запрос, содержащий JSON.

    {
    "action": "create_post",
    "project_id": int,
    "id": int,
    "type": string,
    "title": string,
    "content": string,
    "location": {
    "id": int,
    "name": string,
    "description": string,
    "lat": float,
    "lng": float
    },
    "attaches": [],
    }

Нашли ответ на свой вопрос?