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);
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); } }
Параметры:
$post = array( 'topic' => 'base', 'method' => 'get-method-list', );
Параметры:
$post = array( 'topic' => 'base', 'method' => 'ping', );
Параметры:
$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' - получить информацию обо всех // абонентах, или укажите абонентов, через // запятую. );
Параметры:
$post = array( 'topic' => 'base', 'method' => 'get-points', );
Параметры:
$post = array( 'topic' => 'base', 'method' => 'get-trunks', );
Параметры:
$post = array(
'topic' => 'base',
'method' => 'get-file',
'link' => 1234, // id файла
);
Параметры:
$post = array(
'topic' => 'base',
'method' => 'get-filesize',
'link' => 1234, // id файла
);
Параметры:
$post = array( 'topic' => 'base', 'method' => 'call-me', 'src' => '201', // Номер оператора 'dst' => '89060728208', // Номер клиента );