Я на начальном этапе разработки внешнего портала для входа в Wi-Fi. Использую следующий скрипт для авторизации устройства, которое уже подключено к точке доступа:
<?php
$id = "x2:ff:ff:ff:ff:ff"; // Замените на MAC подключенного устройства
$minutes = 480;
$key = 12345;
function sendAuthorization($id, $minutes) {
$unifiServer = "https://localhost:8443";
$unifiUser = "admin";
$unifiPass = "password";
// Запуск 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, 1);
// Логинимся на UniFi контроллер
curl_setopt($ch, CURLOPT_URL, "$unifiServer/login");
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=login&username=$unifiUser&password=$unifiPass");
curl_exec($ch);
// Отправляем команду авторизации пользователя и время доступа
$data = json_encode(array(
'cmd' => 'authorize-guest',
'mac' => $id,
'minutes' => $minutes
));
// Отправляем команду на API
curl_setopt($ch, CURLOPT_URL, $unifiServer.'/api/s/default/cmd/stamgr');
curl_setopt($ch, CURLOPT_POSTFIELDS, 'json='.$data);
curl_exec($ch);
// Выходим из UniFi контроллера
curl_setopt($ch, CURLOPT_URL, $unifiServer.'/logout');
curl_exec($ch);
curl_close($ch);
unset($ch);
}
if ($key == "12345") { // Проверяем, отправлена ли форма
ob_start();
sendAuthorization($id, $minutes);
ob_end_clean();
unset($key);
}
?>
// даём время на завершение авторизации
setTimeout("location.href='http://www.google.com'", 6000);
</script>
Скрипт вроде бы работает, но когда я захожу в контроллер и смотрю список клиентов, устройство всё ещё отображается как неавторизованное. Версия контроллера 4.7.6.
Обратил внимание, что файл куки не создаётся. Права доступа в порядке, проверял с другим скриптом — файл создаётся.
Есть идеи, в чём может быть проблема?
<?php
$id = "x2:ff:ff:ff:ff:ff"; // Замените на MAC подключенного устройства
$minutes = 480;
$key = 12345;
function sendAuthorization($id, $minutes) {
$unifiServer = "https://localhost:8443";
$unifiUser = "admin";
$unifiPass = "password";
// Запуск 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, 1);
// Логинимся на UniFi контроллер
curl_setopt($ch, CURLOPT_URL, "$unifiServer/login");
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=login&username=$unifiUser&password=$unifiPass");
curl_exec($ch);
// Отправляем команду авторизации пользователя и время доступа
$data = json_encode(array(
'cmd' => 'authorize-guest',
'mac' => $id,
'minutes' => $minutes
));
// Отправляем команду на API
curl_setopt($ch, CURLOPT_URL, $unifiServer.'/api/s/default/cmd/stamgr');
curl_setopt($ch, CURLOPT_POSTFIELDS, 'json='.$data);
curl_exec($ch);
// Выходим из UniFi контроллера
curl_setopt($ch, CURLOPT_URL, $unifiServer.'/logout');
curl_exec($ch);
curl_close($ch);
unset($ch);
}
if ($key == "12345") { // Проверяем, отправлена ли форма
ob_start();
sendAuthorization($id, $minutes);
ob_end_clean();
unset($key);
}
?>
Подключение к сети...
<script>// даём время на завершение авторизации
setTimeout("location.href='http://www.google.com'", 6000);
</script>
Скрипт вроде бы работает, но когда я захожу в контроллер и смотрю список клиентов, устройство всё ещё отображается как неавторизованное. Версия контроллера 4.7.6.
Обратил внимание, что файл куки не создаётся. Права доступа в порядке, проверял с другим скриптом — файл создаётся.
Есть идеи, в чём может быть проблема?

{5}[a-f0-9]{2}$/ims', $usermac)) {