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', // Номер клиента
);