Я уже несколько недель пытаюсь создать простой портал для захвата данных на нашей системе Unifi. Сначала я начал с примера от helpfultechvids на YouTube с образцом скрипта с его сайта. У меня работает сама часть сбора данных, и база тестовых подключений постоянно растёт, но вот с авторизацией пользователей никак не получается.
Изначально, с образцом скрипта на версии контроллера 3.2.1, пользователь авторизовывался примерно 1 из 10 раз и правильно перенаправлялся. В остальных случаях авторизация проходила, но могла занять до 2 минут — к тому времени скрипт уже выкладывался по таймауту, и меня возвращало обратно на страницу сбора данных. В оставшееся время вообще ничего не происходило.
Потом я обновился до версии 3.2.5, и всё стало ещё хуже — ничего не авторизовывалось. Страница просто возвращала меня обратно в форму, а на стороне контроллера авторизации не было.
После обращения в поддержку Ubiquiti, мне посоветовали поставить версию 4.2.0 контроллера, но результат был такой же, как на 3.2.5. Затем предложили полностью заново настраивать систему, не используя бэкапы — но проблема осталась.
Сейчас я откатился обратно на 3.2.1, так как только на ней хоть что-то работало, но теперь и она вообще не функционирует.
Я уже почти головой в стену стучу, пытаясь это всё запустить. Надеюсь, кто-то, кто сталкивался с похожими проблемами, сможет помочь. Контроллер работает на Windows Server 2003, Apache и MySQL — через XAMPP, поэтому, думаю, единственный рабочий вариант — использовать CURL-скрипт через API. Внешний портал от Ubiquiti не подходит, судя по всему, он рассчитан под Linux, и я не могу его адаптировать. Пытался изменить встроенный портал, но любые PHP-скрипты, встроенные в HTML, просто не запускаются.
Отмечу, что я вовсе не профессиональный разработчик — немного знаю PHP и CSS, надеялся, что этого хватит, но скрипты я не понимаю полностью, так что возможно, я просто упускаю что-то очевидное.
Буду очень благодарен за любую помощь.
Ниже приведён скрипт, которым я пользуюсь для авторизации. Также я пробовал использовать PHP-класс, предоставленный другим пользователем, но результат был тот же.
function sendAuthorization($id, $minutes) {
//////////////////////////////////////////////////////////// /////////////////////////////////////////////////
$unifiServer = "https://10.128.5.62:8443";
$unifiUser = "user"; <--- изменено для отправки сюда!
$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, 3);
// Вход в контроллер 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/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);
}
Спасибо, что дочитали до этого места!
Алан
Изначально, с образцом скрипта на версии контроллера 3.2.1, пользователь авторизовывался примерно 1 из 10 раз и правильно перенаправлялся. В остальных случаях авторизация проходила, но могла занять до 2 минут — к тому времени скрипт уже выкладывался по таймауту, и меня возвращало обратно на страницу сбора данных. В оставшееся время вообще ничего не происходило.
Потом я обновился до версии 3.2.5, и всё стало ещё хуже — ничего не авторизовывалось. Страница просто возвращала меня обратно в форму, а на стороне контроллера авторизации не было.
После обращения в поддержку Ubiquiti, мне посоветовали поставить версию 4.2.0 контроллера, но результат был такой же, как на 3.2.5. Затем предложили полностью заново настраивать систему, не используя бэкапы — но проблема осталась.
Сейчас я откатился обратно на 3.2.1, так как только на ней хоть что-то работало, но теперь и она вообще не функционирует.
Я уже почти головой в стену стучу, пытаясь это всё запустить. Надеюсь, кто-то, кто сталкивался с похожими проблемами, сможет помочь. Контроллер работает на Windows Server 2003, Apache и MySQL — через XAMPP, поэтому, думаю, единственный рабочий вариант — использовать CURL-скрипт через API. Внешний портал от Ubiquiti не подходит, судя по всему, он рассчитан под Linux, и я не могу его адаптировать. Пытался изменить встроенный портал, но любые PHP-скрипты, встроенные в HTML, просто не запускаются.
Отмечу, что я вовсе не профессиональный разработчик — немного знаю PHP и CSS, надеялся, что этого хватит, но скрипты я не понимаю полностью, так что возможно, я просто упускаю что-то очевидное.
Буду очень благодарен за любую помощь.
Ниже приведён скрипт, которым я пользуюсь для авторизации. Также я пробовал использовать PHP-класс, предоставленный другим пользователем, но результат был тот же.
function sendAuthorization($id, $minutes) {
////////////////////////////////////////////////////////////
$unifiServer = "https://10.128.5.62:8443";
$unifiUser = "user"; <--- изменено для отправки сюда!
$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, 3);
// Вход в контроллер 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/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);
}
Спасибо, что дочитали до этого места!
Алан
