- How to Generate Unique and Secure API keys with PHP
- Пример использования Google Indexing API на PHP
- Шаг 1. Проверьте наличие ресурса в Google Search Console
- Шаг 2. Создание сервисного аккаунта в Google Cloud Platform
- Шаг 3. Создание ключа для аутентификации Google API
- Шаг 4. Добавление сервисного аккаунта в качестве владельца сайта
- Шаг 5. Установка клиентской библиотеки для Google API
- Шаг 6. Примеры кода
How to Generate Unique and Secure API keys with PHP
The string used for an API key or token should be unique and secure. PHP random_bytes() function generates pseudo-random bytes that are cryptographically secure. Use random_bytes() and bin2hex() function to generate unique and strong API keys in PHP.
The following code snippet helps you to create a random and secure string with PHP which is useful for API key/token.
$key = bin2hex(random_bytes(32));
The above code will output 64 characters long string.
d7a03fee5546592a37e22ff8f45bbbe45da4632dfed9a774e085d0e8b5d3fa73
Use hash_equals() function to compare key strings.
if(hash_equals($api_token, $key)) <
echo 'Valid';
>else <
echo 'Invalid';
>
Пример использования Google Indexing API на PHP
В этой статье приведена подробная инструкция по использованию Google Indexing API и выполнению запросов на индексирование страниц через PHP. Indexing API — это очень простой способ для информирования Google об изменениях у вас на сайте.
Шаг 1. Проверьте наличие ресурса в Google Search Console
На этом шаге необходимо проверить наличие ресурса в Google Search Console. Если он уже у вас добавлен в консоль, то этот шаг можно пропустить.
1. Перейдите на страницу https://search.google.com/search-console/welcome и войдите, используя свою учетную запись Google.
2. Откройте меню в левом верхнем углу и нажмите «Добавить ресурс».
3. Если у вас нет доступа к вашим DNS-записям или не достаточно опыта, то можно просто использовать опцию «Ресурс с префиксом в URL». Введите URL и нажмите «Продолжить».
4. Выберите метод подтверждения. Самый простой — HTML-файл. Скачайте HTML-файл и загрузите его в корень вашего домена. После этого нажмите кнопку «Подтвердить».
Шаг 2. Создание сервисного аккаунта в Google Cloud Platform
2. Выберите проект (если он не создан, его необходимо создать) и нажмите на «Create service account (создать сервисный аккаунт)».
3. Заполните данные учетной записи.
Шаг 3. Создание ключа для аутентификации Google API
Теперь создадим закрытый ключ в формате JSON. Ключ будем использовать в PHP для доступа к API Google.
1. Нажмите на адрес электронной почты сервисного аккаунта.
2. Выберите «Keys (ключи)» -> «Add key (Добавить ключ)» -> «Create new key (Создать новый ключ)».
3. Выберите JSON и нажмите «Create (Создать)». Созданный ключ будет загружен вам на компьютер.
Шаг 4. Добавление сервисного аккаунта в качестве владельца сайта
На этом шаге нужно добавить учетную запись службы Google в качестве владельца домена в Google Search Console. После этого эта учетная запись получит доступ к свойствам вашего домена через Google API.
2. Перейдите в «Настройки» (при необходимости выберите нужный ресурс).
3. Выберите пункт «Пользователи и разрешения».
4. Нажмите на кнопку «Добавить пользователя». Теперь вставьте адрес электронной почты учетной записи сервисного аккаунта.
Шаг 5. Установка клиентской библиотеки для Google API
Для обращения к Indexing API нам потребуются клиентские библиотеки Google API (ссылка на страницу GitHub и полную документацию: https://github.com/googleapis/google-api-php-client).
Установить библиотеки можно с помощью Composer или вручную.
Для загрузки с помощью Composer достаточно открыть консоль и написать в ней команду:
composer require google/apiclient
Самостоятельно скачать архив последней версии библиотеки для нужной версии PHP можно с GitHub на странице Releases · googleapis/google-api-php-client. После загрузки архива на компьютер, разархивируйте его содержимое в папку вашего проекта.
Подключение библиотеки в свой проект выполняется посредством:
require_once '/path/to/vendor/autoload.php';
Шаг 6. Примеры кода
- каталог vendor содержит библиотеки Google API, которые были установлены с помощью Composer;
- composer.json – файл, который был автоматически создан Composer и содержит список установленных с помощью этого инструмента библиотек;
- api-project-696409.json – файл, содержащий секретный ключ, который мы создали и скачали на 3 шаге;
- index.html – HTML страница, на которую поместим для указания URL, кнопки для выполнения различных действий и для вывода ответа Indexing API;
- main.js — JavaScript сценарий для отправки AJAX запроса на сервер;
- indexing.php — серверный php-сценарий для отправки запроса в Google Indexing API.
В HTML создадим страницу со следующим содержимым (оформление выполним на Bootstrap 5):
Результат:
.
- элемент предназначен для указания URL-адреса;
- кнопка с id=»get-status» применяется для получения статуса уведомления (т.е. показывает ответ, когда сервер Google в последний раз получал запрос для указанного URL);
- кнопка с id=»update» предназначена для обновления URL (отправляет запрос на индексацию, т.е. когда это новый URL и его нужно просканировать, либо когда в нём произошло изменение контента);
- кнопка с id=»delete» используется для отправки запроса на удаление URL из индекса;
- элемент применяется для вывода тела ответа на запрос Indexing API.
Отправку запроса на сервер будем выполнять через AJAX с использованием fetch() и async/await:
// асинхронная функция для отправки запроса на сервере и вывода от него ответа в #result const getURLStatus = async(url, action = 'get') => { try { const data = new FormData(); data.append('url', url); data.append('action', action); let response = await fetch('/php/indexing.php', { method: 'post', body: data }); document.querySelector('#result').innerHTML = ''; document.querySelector('#url').classList.remove('is-invalid'); document.querySelector('.invalid-feedback').textContent = ''; if (response.ok) { let result = await response.json(); if (result['result'] === 'error') { const error = result['error']; document.querySelector('#url').classList.add('is-invalid'); document.querySelector('.invalid-feedback').textContent = error; } else { document.querySelector('#result').innerHTML = `
${result.body}`; } } } catch (error) { document.querySelector('#result').innerHTML = error; } } // при нажатии на кнопку #get-status document.querySelector('#get-status').onclick = () =< { getURLStatus(document.querySelector('#url').value); } // при нажатии на кнопку #update document.querySelector('#update').onclick = () =< { getURLStatus(document.querySelector('#url').value, 'update'); } // при нажатии на кнопку #delete document.querySelector('#delete').onclick = () =< { getURLStatus(document.querySelector('#url').value, 'delete'); }
Серверный сценарий на PHP:
'success' ]; $url = $_POST['url']; $action = $_POST['action']; $type = $action == 'update' ? 'URL_UPDATED' : 'URL_DELETED'; if (!filter_var($url, FILTER_VALIDATE_URL)) { $data['result'] = 'error'; $data['error'] = 'URL не является корректным.'; echo json_encode($data); exit(); } $client = new Google_Client(); // file-containing-secret-key.json - секретный ключ для доступа к API Google $client->setAuthConfig('file-containing-secret-key.json'); $client->addScope('https://www.googleapis.com/auth/indexing'); $httpClient = $client->authorize(); $endpoint = 'https://indexing.googleapis.com/v3/urlNotifications:publish'; if ($action == 'get') { $response = $httpClient->get('https://indexing.googleapis.com/v3/urlNotifications/metadata?url=' . urlencode($url)); } else { $content = json_encode([ 'url' => $url, 'type' => $type ]); $response = $httpClient->post($endpoint, ['body' => $content]); } $data['body'] = (string) $response->getBody(); echo json_encode($data);
Пример создания запроса на получение статуса уведомления для указанного URL:
Пример создания запроса на обновление URL:
Доступ к странице, ключу и серверному сценарию должен быть предоставлен только администраторам. Кроме того, когда вы работаете и тестируете, вы можете использовать только те домены, которые вы связали со своей учетной записью службы Google. Если вы попытаетесь использовать домены, которые не подтвердили и не связали со своей учетной записью службы Google, то получите ошибки.