Негізгі мазмұнға өту

Webhook-ты қосу

  1. «аккаунт қосу» бөліміне өтіңіз және Webhook таңдаңыз.

  2. Деректерді толтырыңыз

    Веб-узелдің аты — аккаунтты көрсетуде ыңғайлы болу үшін кез келген еркін атау.

    URL-адрес — аккаунтты қосу және Webhook жариялау үшін сұрау жіберілетін адрес.

    Құпия токен — клиенттің сұрауларын аутентификациялау үшін қажет. Сұраудың Headers-ке x-hub-signature жіберіледі, оны клиент жағында тексеру және салыстыру қажет.

  3. Доменді растау Аккаунт қосқанда серверіңізге JSON-мәліметтері бар POST-сұрау жіберіледі. Сервер жауап ретінде 1qsRgoUgt жолын қайтаруы керек.

    {
    "type": "confirmation",
    "project_id": "жобаңыздың-id"
    }
  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);
    }

    /**
    * Сұрау заголовогын алу
    * @param string $headerCode
    * @return string|null
    */
    private function getRequestHeaders($headerCode)
    {
    $requestHeaders = apache_request_headers();
    return isset($requestHeaders[$headerCode]) ? $requestHeaders[$headerCode] : null;
    }
    ?>
  5. Постты жариялау Пост жариялағанда серверіңізге JSON-мәліметтері бар POST-сұрау жіберіледі.

    {
    "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": []
    }