Получение кампаний
PHP версии 5, протокол SOAP, используется класс SoapClient
Пример демонстрирует выполнение запроса методом Campaigns.get, обработку и вывод результата. Для использования примера во входных данных укажите OAuth-токен. При запросе от имени агентства необходимо также указать логин клиента.
<?php
ini_set("soap.wsdl_cache_enabled", "0");
//--- Входные данные -------------------------------------------------------------------------//
// Адрес WSDL-описания сервиса Campaigns (регистрозависимый)
$wsdlUrl = 'https://api.direct.yandex.com/v5/campaigns?wsdl';
// OAuth-токен пользователя, от имени которого будут выполняться запросы
$token = 'ТОКЕН';
// Логин клиента рекламного агентства
// Обязательный параметр, если запросы выполняются от имени рекламного агентства
$clientLogin = 'ЛОГИН_КЛИЕНТА';
//--- Подготовка и выполнение запроса -----------------------------------//
// Создание контекста потока: установка HTTP-заголовков
$streamOptions = stream_context_create(array(
'http' => array(
'header' => "Authorization: Bearer $token"."\r\n". // OAuth-токен. Использование слова Bearer обязательно
"Client-Login: $clientLogin"."\r\n". // Логин клиента рекламного агентства
"Accept-Language: ru" // Язык ответных сообщений
),
/*
// Для полноценного использования протокола HTTPS можно включить проверку SSL-сертификата сервера API Директа
'ssl' => array(
'verify_peer' => true,
'cafile' => getcwd().DIRECTORY_SEPARATOR.'CA.pem' // Путь к локальной копии корневого SSL-сертификата
)
*/
));
// Инициализация SOAP-клиента
$client = new SoapClient($wsdlUrl,
array(
'trace' => true,
'exceptions' => false,
'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
'cache_wsdl' => WSDL_CACHE_NONE,
'encoding' => 'UTF-8',
'stream_context' => $streamOptions
)
);
// Параметры запроса к серверу API Директа
$params = array(
"SelectionCriteria" => (object) array(), // Критерий отбора кампаний. Для получения всех кампаний должен быть пустым
"FieldNames" => array ('Id', 'Name') // Названия параметров, которые требуется получить
);
// Выполнение запроса методом get сервиса Campaigns, получение результата
$result = $client->get($params);
//--- Обработка результата выполнения запроса ---------------------------//
if (is_soap_fault($result)) {
$error = "SOAP Fault: faultcode: {$result->faultcode}, faultstring: {$result->faultstring}";
if (isset($result->detail->FaultResponse)) {
$apiErr = $result->detail->FaultResponse;
$error .= " detail: {$apiErr->errorCode} - {$apiErr->errorDetail} (RequestId: {$apiErr->requestId})";
}
echo $error;
}
else {
// Извлечение HTTP-заголовков ответа: RequestId (Id запроса) и Units (информация о баллах)
$headers = explode("\r\n", $client->__getLastResponseHeaders());
foreach ($headers as $header) {
if (preg_match('/(RequestId|Units):/', $header)) { echo "$header<br>"; }
}
// Вывод списка рекламных кампаний
foreach ($result->Campaigns as $row) { echo "Рекламная кампания: {$row->Name} ({$row->Id})<br>"; }
}
//--- Отладочная информация ---------------------------------------------//
//echo "<hr>Заголовки запроса:<pre>".$client->__getLastRequestHeaders()."</pre>";
//echo "Запрос:<pre>".htmlspecialchars($client->__getLastRequest())."</pre>";
//echo "Заголовки ответа:<pre>".$client->__getLastResponseHeaders()."</pre>";
//echo "Ответ:<pre>".htmlspecialchars($client->__getLastResponse())."</pre>";
?>