Webhooks — тип аутентификации Ключ API — секретное имя и секретное значение — в PHP

Я пытаюсь аутентифицировать веб-перехватчик, используя ключ API (секретное имя и секретное значение). Итак, я сделал два файла:

вебхук.php:

<?php 

include('webhook-api-key.php');
// Retrieve the request body from the webhook POST request
if ($http_status_code === 200){
        $request_body = file_get_contents('php://input');

        // Convert the request body from JSON to a PHP object
        $request_data = json_decode($request_body);

        // Extract the contact properties from the request data
        $contact_properties = $request_data->properties;

        // Extract the email property value
        $email = $contact_properties->email->value;

        // Extract the first name property value
        $first_name = $contact_properties->firstname->value;

        // Extract the last name property value
        $last_name = $contact_properties->lastname->value;

        // Do something with the contact data, such as adding it to a database or sending an email notification
        // For example:
        $contact_data = array(
            'email' => $email,
            'first_name' => $first_name,
            'last_name' => $last_name
        );
        // Add the contact data to a database or send an email notification, etc.

        // Send a HTTP response to HubSpot indicating that the webhook was successfully received and processed
        http_response_code(200);
}
?>

 

и webhook-api-key.php:

<?php 

$endpoint_url = 'https:/.../hubspot/webhook.php';

// Set up the API key secret name and secret value
$api_key_secret_name = 'word';
$api_key_secret_value = 'anther_word';

// Set up the HTTP POST request headers
$headers = array(
    'Content-Type: application/json',
    'Authorization: Bearer '.$api_key_secret_value
);

// Set up the HTTP POST request body
$body = array(
    'api_key' => $api_key_secret_value
);

// Send the HTTP POST request to the webhook endpoint URL
$ch = curl_init($endpoint_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
$response = curl_exec($ch);

// Check for errors
if (curl_errno($ch)) {
    $error_message = curl_error($ch);
    echo 'Error: '.$error_message;
}

// Get the HTTP response status code
$http_status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

// Close the HTTP POST request
curl_close($ch);

// Handle the webhook response
if ($http_status_code === 200) {
    echo 'Webhook successfully authenticated.';
} else {
    echo 'Webhook authentication failed with HTTP status code: ' . $http_status_code;
}
?>

И в конфигурации Hubspot URL-адрес «https:/.../hubspot/webhook.php».

Это нормально? Я спрашиваю, потому что он убил мой сервер, когда я пытался его протестировать, и я не могу найти в Интернете примеры использования такой аутентификации.

Спасибо!

Не могу понять смысл этого кода. Итак, webhook.php включает webhook-api-key.php, который затем, в свою очередь, пытается сделать запрос на https:/.../hubspot/webhook.php ...? Какой в ​​этом смысл? Почему ваш собственный сценарий веб-перехватчика должен аутентифицироваться «против самого себя»?

CBroe 06.04.2023 10:04

Я понимаю, что вы говорите. Итак, в этом случае, как мне организовать свой код? Hubspot отправляет запрошенное тело в /.../hubspot/webhook.php, сначала я должен аутентифицироваться и проверить секретное имя и значение, которые у меня уже есть в конфигурации настроек hubspot, и если все в порядке, то декодировать запрошенное тело и сделать что-то со значениями. Я не знаю, какой URL-адрес вставить в завиток. Нужен ли мне там URL? Я имею в виду, что мне нужно проверить секретное имя/значение в webhook.php. Спасибо!

Fllorinaaa 06.04.2023 10:14

Я думаю, что так: $secretName= 'word'; $secretValue = 'другое_слово'; $requestBody = file_get_contents('php://input'); $ data = json_decode ($ requestBody, правда); if (isset($data['secretName']) && isset($data['secretValue'])) { $actualSN = $data['secretName']; $actualSV = $data['secretValue']; if ($actualSN== $secretName&& $actualSV== $secretValue ) { $contact_properties = $request_data->properties; echo 'Имя и значение секрета верны'; } else { echo 'Недопустимое секретное имя или значение'; } } Это правильный путь? Спасибо!

Fllorinaaa 06.04.2023 11:04

«сначала я должен пройти аутентификацию и проверить секретное имя и значение, которые у меня уже есть в конфигурации настроек hubspot» — если у вас уже есть это значение, то почему вы хотите сделать запрос cURL в этот момент? Не могли бы вы дать ссылку на документацию для этого; потому что я чувствую, что вы, возможно, что-то неправильно поняли о том, как должен работать весь процесс.

CBroe 06.04.2023 12:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
4
93
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Так что это на самом деле довольно просто. В Интернете нет примеров, а документация плохая, она больше объясняет подпись Hubspot, чем ключ API. В конце концов я понял, как это работает, и вот рабочий код:

$expectedSecretName = 'word'; // Replace with your expected secret name
$expectedSecretValue = 'another_word'; // Replace with your expected secret value

$requestBody = file_get_contents('php://input');
$data = json_decode($requestBody);

    if ($_SERVER['HTTP_WORD'] == $expectedSecretValue){
//do something with values
$email = $data->email;
$firstname= $data->firstname;
$lastname= $data->lastname;
}
else{
//not from Hubspot
}

Другие вопросы по теме