API

Общее описание

API работает по протоколу HTTP. Параметры передаются любым методом: POST или GET. Ответ зависит от параметра заголовка Content-type. Пакет защищается секретным ключом.


$url = 'http(s)://АДРЕС СЕРВЕРА/zeon/api/start.php';    // Точка входа в API
$secret = "123456789ABCDEFGH";                          // Секретный ключ
$post = array(
    'topic' => 'base',                                  // Раздел API, default = base
    'method' => 'get-method-list',                      // Метод
); 

$post['hash'] = md5(http_build_query($post) . $secret); // Добавляем хэш

$ch = curl_init($url);
    curl_setopt_array($ch, array(
    CURLOPT_SSL_VERIFYPEER => 0, 
    CURLOPT_POST => 1,
    CURLOPT_HEADER => 1, 
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_POSTFIELDS => http_build_query($post),
    CURLOPT_CONNECTTIMEOUT => 5, 
    CURLOPT_TIMEOUT => 10, 
)); 

$response = curl_exec($ch); 
$type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

print_r(json_decode($response, true), true);
curl_close($ch); 

Опции curl

CURLOPT_POST – передавать данные методом POST
CURLOPT_HEADER – выдвать http-заголовок вместе с содержимым (это требуется для извлечения полезной информации из заголовка, например, имя файла)
CURLOPT_RETURNTRANSFER – выдавать содержимое в переменную
CURLOPT_POSTFIELDS – полезная нагрузка, данные запроса
CURLOPT_CONNECTTIMEOUT – таймаут установления соединения
CURLOPT_TIMEOUT – таймаут ожидания ответа
CURLOPT_SSL_VERIFYPEER – проверка валидности SSL-сертификата

Интерпретация ответа

После получения ответа следует обратить внимание на параметр http-заголовка Content-type. Этот параметр указывает как необходимо интерпретировать полученное содержимое.

Content-type может быть:
application/json – строка в формате JSON
audio/wav – аудио файл в формате .wav
audio/mpeg – аудио файл в формате .mp3
image/tiff – изображение в формате .tiff (обычно факс)
application/octet-stream – файл без указания формата

Пример обработки ответа:


$type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

if ($type) {
    switch ($type) {
        case 'application/json':                      // Содержимое в формате JSON
            $content = substr($response, curl_getinfo($ch, CURLINFO_HEADER_SIZE));

            print_r(json_decode($content, true));
            break;

        default:                                      // Содержимое файл
            printf(" %-30s %s\n", "content type:", $type);
            printf(" %-30s %s\n", "download speed:", curl_getinfo($ch, CURLINFO_SPEED_DOWNLOAD));
            printf(" %-30s %s\n", "file size:", curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD));

            if (!preg_match("/^Content-disposition: .*?filename=(.*)$/m", $response, $match)) {
                echo "downloading file fail\n";
                exit;
            }

            $file = substr($response, curl_getinfo($ch, CURLINFO_HEADER_SIZE));
            $filename = trim($match[1]);

            printf(" %-30s %s\n", "filename:", $filename);
            file_put_contents("/tmp/" . $filename, $file);
        }
}

Методы

Получение списка методов (get-method-list)

Параметры:


$post = array( 
    'topic' => 'base', 
    'method' => 'get-method-list', 
); 

Ping

Параметры:


$post = array( 
    'topic' => 'base', 
    'method' => 'ping', 
); 

Получение истории звонков (get-calls)

Параметры:


$post = array( 
    'topic' => 'base', 
    'method' => 'get-calls', 
    'start' => '2016-02-03 00:00:00',              // начало периода
    'end' => '2016-02-03 23:59:59',                // конец периода
    'limit' => 0,                                  // ограничение выдачи. 0 - без ограничения
    'disposition' => 'any',                        // статус звонка:
                                                   //    'any' - любой,
                                                   //    'ANSWERED' - отвеченные,
                                                   //    'NOANSWER' - пропущенные,
                                                   //    'BUSY' - занят,
                                                   //    'FAIL'- ошибка соединения.
    'calltype' => 'any',                           // тип звонка:
                                                   //    'any' - любой,
                                                   //    'IN' - входящие,
                                                   //    'OUT' - исходящие,
                                                   //    'LOCAL' - внутренние,
                                                   //    'TRANSIT' - транзит,
                                                   //    'SERVICE' – сервисные.
    'points' => '12, 13'                           // точки подключения:
                                                   //    'any' - получить информацию обо всех
                                                   //    абонентах, или укажите абонентов, через
                                                   //    запятую.
);

Получение списка точек (get-points)

Параметры:


$post = array( 
    'topic' => 'base', 
    'method' => 'get-points', 
); 

Получение списка каналов (get-trunks)

Параметры:


$post = array( 
    'topic' => 'base',
    'method' => 'get-trunks',
);

Получение файла (get-file)

Параметры:


$post = array(
    'topic' => 'base', 
    'method' => 'get-file', 
    'link' => 1234,                                // id файла
); 

Получение размера файла (get-filesize)

Параметры:


$post = array(
    'topic' => 'base', 
    'method' => 'get-filesize', 
    'link' => 1234,                                // id файла
);

Заказ обратного звонка (call-me)

Параметры:


$post = array( 
    'topic' => 'base', 
    'method' => 'call-me', 
    'src' => '201',                               // Номер оператора
    'dst' => '89060728208',                       // Номер клиента
);