Большое спасибо за код, но у меня возникла небольшая проблема с авторизацией. Я использую контроллер версии 3.2.10, а мой портал размещён на внешнем веб-сервере. До сегодняшнего дня я использовал код, который нашёл где-то в интернете, и он всегда работал довольно неплохо, хоть и нельзя сказать, что он очень чистый. Я попробовал ваш класс — ошибок при запуске нет, но гости не авторизуются, когда я выполняю код.
$unifi = new unifiapi();
$unifi->login();
$unifi->authorize_guest($mac, $minutes);
В ваших классах объявлены все публичные переменные, так что мне не нужно передавать параметры (верно?). Кто-нибудь может подсказать, что я делаю не так?
Вот код, который у меня работает:
function sendAuthorization($id, $minutes, $url) {
global $unifiServer;
global $unifiUser;
global $unifiPass;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
$unifiServer = "https://x.x.x.x:8443";
$unifiUser = "user";
$unifiPass = "pw";
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Начинаем Curl для входа в систему
$ch = curl_init();
// Отправляем POST-запрос
curl_setopt($ch, CURLOPT_POST, TRUE);
// Устанавливаем куки
$cookie_file = "/tmp/unifi_cookie";
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
// Разрешаем самоподписанные сертификаты
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
// Принудительно SSL3 (закомментировано)
//curl_setopt($ch, CURLOPT_SSLVERSION, 3);
// Логинимся в UniFi контроллере
curl_setopt($ch, CURLOPT_URL, "$unifiServer/login");
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=login&username=$unifiUser&password=$unifiPass");
curl_exec($ch);
curl_close($ch);
// Отправляем команду авторизации пользователя и время доступа
$data = json_encode(array('cmd' => 'authorize-guest', 'mac' => $id, 'minutes' => $minutes));
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//curl_setopt($ch, CURLOPT_SSLVERSION, 3);
curl_setopt($ch, CURLOPT_URL, $unifiServer . '/api/s/site/cmd/stamgr');
curl_setopt($ch, CURLOPT_POSTFIELDS, 'json=' . $data);
curl_exec($ch);
curl_close($ch);
// Выходим из системы
$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//curl_setopt($ch, CURLOPT_SSLVERSION, 1);
curl_setopt($ch, CURLOPT_URL, $unifiServer . '/logout');
curl_exec($ch);
curl_close($ch);
//sleep(8); // Небольшая пауза, чтобы контроллер успел авторизовать
exit(header('Location: ' . $url));
//$_SESSION['url']);
}