Google предоставляет клиентскую библиотеку PHP для взаимодействия с Ad Manager API. Мы рекомендуем использовать клиентскую библиотеку с Composer.
Чтобы начать работу, создайте новый проект в выбранной вами IDE или добавьте зависимость в существующий проект. Google публикует артефакты клиентской библиотеки в Packagist как googleads/ad-manager.
composer.json
"require": {
"googleads/ad-manager": "^0.15.1"
}
Командная строка
composer require googleads/ad-manager
Как настроить учетные данные
Клиентская библиотека PHP использует для аутентификации OAuth2 и Application Default Credentials (ADC).
ADC выполняет поиск учетных данных в следующем порядке:
- переменной среды
GOOGLE_APPLICATION_CREDENTIALS. - Учетные данные пользователя, настроенные с помощью интерфейса командной строки Google Cloud (gcloud CLI).
- При работе в Google Cloud – сервисный аккаунт, прикрепленный к ресурсу Google Cloud.
Информацию о том, как создать и настроить учетные данные ADC, можно найти в разделе Аутентификация.
Как отправить первый запрос
У каждого сервиса есть объект ServiceClient с методами для каждого метода REST. В следующем примере считывается объект Network.
<?php
use Google\Ads\AdManager\V1\Client\NetworkServiceClient; use Google\Ads\AdManager\V1\GetNetworkRequest; use Google\Ads\AdManager\V1\Network; use Google\ApiCore\ApiException; /** * Retrieves a `Network` object. * * @param string $formattedName Resource name of Network. * Format: networks/{network_code} * Please see {@see NetworkServiceClient::networkName()} for help formatting this field. */ function get_network_sample(string $formattedName): void { // Create a client. $networkServiceClient = new NetworkServiceClient(); // Prepare the request message. $request = (new GetNetworkRequest()) ->setName($formattedName); // Call the API and handle any network failures. try { /** @var Network $response */ $response = $networkServiceClient->getNetwork($request); printf('Response data: %s' . PHP_EOL, $response->serializeToJsonString()); } catch (ApiException $ex) { printf('Call failed with message: %s' . PHP_EOL, $ex->getMessage()); } } /** * Helper to execute the sample. * */ function callSample(): void { $formattedName = NetworkServiceClient::networkName('NETWORK_CODE'); get_network_sample($formattedName); }
Примеры других методов и ресурсов можно найти в репозитории GitHub: googleapis/php-ads-ad-manager.
Как регистрировать HTTP-запросы и ответы
Клиентская библиотека PHP поддерживает регистраторы, совместимые с PSR-3, для регистрации HTTP-запросов и ответов. По умолчанию ведение журналов отключено.
Чтобы включить ведение журнала по умолчанию в стандартный вывод, задайте для переменной среды
GOOGLE_SDK_PHP_LOGGING
значение true в коде PHP или среде:
putenv('GOOGLE_SDK_PHP_LOGGING=true'); $client = new NetworkServiceClient();
export GOOGLE_SDK_PHP_LOGGING=true
Вы также можете передать любой регистратор, совместимый с PSR-3, при создании клиента сервиса:
use Monolog\Handler\StreamHandler; use Monolog\Level; use Monolog\Logger; $monologLogger = new Logger('sdk client'); $monologLogger->pushHandler(new StreamHandler('php://stdout', Level::Debug)); $client = new NetworkServiceClient([ 'logger' => $monologLogger ]);
Обработка ошибок
В клиентской библиотеке PHP все ошибки Ad Manager API вызывают исключение типа ApiException:
Ошибки обработки
Поле причины ошибки позволяет однозначно определить тип ошибки. Используйте это поле, чтобы определить, как обрабатывать ошибку.
try { $response = $networkServiceClient->getNetwork($formattedName); printf('Response data: %s' . PHP_EOL, $response->serializeToJsonString()); } catch (ApiException $ex) { printf('Error message: %s' . PHP_EOL, $ex->getBasicMessage()); printf('Reason: %s' . PHP_EOL, $ex->getReason()); }
Ошибки Ad Manager API также содержат уникальный request_id, который можно предоставить службе поддержки для устранения неполадок. В приведенном ниже примере извлекается значение request_id.
$requestInfo = null; foreach ($ex->getMetadata() as $metadata) { if($metadata["@type"] === "type.googleapis.com/google.rpc.RequestInfo") { $requestInfo = $metadata; break; } } if ($requestInfo == null) { printf('Unexpected empty RequestInfo'); } else { printf('RequestId: %s' . PHP_EOL, $requestInfo['requestId']); }
Как создавать названия ресурсов
Клиентская библиотека предоставляет вспомогательные классы для создания названий ресурсов на основе идентификаторов.
use Google\Ads\AdManager\V1\Client\OrderServiceClient; // Constructs a String in the format: // "networks/{networkCode}/orders/{orderId}" $orderName = OrderServiceClient::orderName("NETWORK_CODE", "ORDER_ID");
Настройка прокси-сервера
Клиентская библиотека PHP учитывает настройки среды HTTP_PROXY и HTTPS_PROXY.