JSON

Взаимодействие с API на JSON и авторизация по токену.

Получение сведений о клиенте

Пример демонстрирует вызов метода GetClientInfo.

<?php

/*
    Пример программного кода для работы с API сервиса Яндекс Директ
 
     В примере использован рекомендуемый синтаксис для работы с API сервиса Яндекс Директ 
         на языке PHP с использованием протокола JSON и авторизацией по токенам.
 
     Обращаем внимание, что все текстовые данные должны быть в кодировке UTF8
 
     Подробнее про получение токена читайте в документации:
        https://tech.yandex.ru/oauth/doc/dg/
*/

require_once "HTTP/Request.php";

// Важно: данные отправляем POST-методом
$req =& new HTTP_Request("https://api.direct.yandex.ru/v/json/");
$req->setMethod(HTTP_REQUEST_METHOD_POST);

// Инициализация параметров для авторизации
$data = array(
    token => "YOUR-YANDEX-OAUTH-TOKEN"
);

// Параметры для запроса метода GetClientInfo
$data['method'] = "GetClientInfo";
$data['param'] = array(YOUR-YANDEX-LOGIN);

/*
    Если ваша версия php не поддерживает встроенной функции json_encode/json_decode,
    можно воспользоваться библиотекой: http://pear.php.net/package/Services_JSON
*/ 

require_once 'Classes/json.php';
$json = new Services_JSON;
$json_data = $json->encode($data);

/*
    Если встроенные функции json_encode/json_decode поддерживаются, то программа может выглядеть так:
        $json_data = json_encode($data);
        $decoded_result = json_decode($result);

*/

$req->addRawPostData($json_data);

$response = $req->sendRequest();
$errmsg = PEAR::isError($response);

if (! $errmsg) {
     $result = $req->getResponseBody();
     $decoded_result = $json->decode($result);

     if (isset($decoded_result->data)) {

         // Обработка ответа метода
         print_r($decoded_result);

     } else if ($decoded_result->error_code) {
         // Если ошибку вернул сервер API
         echo "Error: code = ".$decoded_result->error_code
                     .", str = ".$decoded_result->error_str
                     .", detail = ".$decoded_result->error_detail;
     } else {
         echo "Unknown error";
     }

} else {
    // Если ошибка произошла при попытке запроса
    echo "Request error: ".$errmsg;
}

?>

Создание кампании

Пример демонстрирует вызов метода CreateOrUpdateCampaign.

<?php
    
# Cпособ отправления JSON-запроса c OAuth-авторизацией
# PHP 4 >= 4.3.0, PHP 5
 
 
# логин в Директе 
$login = 'YOUR-LOGIN';


# метод API 
$method = 'CreateOrUpdateCampaign';

 
# входные данные 
$params = array(            
            'Login' => $login,
            'CampaignID' => 0, 
            'StatusContextStop' => 'No',
            'Name' => 'Новая кампания',
            'FIO' => 'Иванов Иван Иванович',        
            'EmailNotification' => array(
                                    'Email' => $login . '@yandex.ru',
                                    'SendWarn' => 'Yes',
                                    'MoneyWarningValue' => 1,
                                    'WarnPlaceInterval' => 15,        
                                    'SendAccNews' => 'No'        
                                    ),    
            'MinusKeywords' => array('скачать', 'mp3', 'песня'),
            'AddRelevantPhrases' => 'Yes',
            'RelevantPhrasesBudgetLimit' => 50,
'Strategy' => array(
'StrategyName' => 'HighestPosition',
),

);
 
# ============================================================
 
# перекодировка строковых данных в UTF-8
function utf8($struct) {
    foreach ($struct as $key => $value) {
        if (is_array($value)) {
            $struct[$key] = utf8($value);
        }
        elseif (is_string($value)) {
            $struct[$key] = utf8_encode($value);
        }
    }
    return $struct;
}
  
# формирование запроса    
$request = array(
    'token'=> 'YOUR-YANDEX-OAUTH-TOKEN', 
    'method'=> $method,
    'param'=> utf8($params),
    'locale'=> 'ru',
);
 
 
# преобразование в JSON-формат
$request = json_encode($request);

 
# параметры запроса
$opts = array(
    'http'=>array(
        'method'=>"POST",
        'content'=>$request,
    )
); 

 
# создание контекста потока
$context = stream_context_create($opts); 
 
 
# отправляем запрос и получаем ответ от сервера
$result = file_get_contents('https://api.direct.yandex.ru/v/json/', 0, $context);
 
 
# вывод результата
print_r($result);
    
?>