Сейчас пока данные берутся с бета версии личного кабинета МегаФона https://beta.lk.megafon.ru (будем надеяться, что он долго проживет).
Есть предыдущая версия ЛК, основная https://lk.megafon.ru, но пока не доперло до меня как одновременно получить CSRF со страницы входа и одновременно вставить этот токен с логином и паролем в POST запрос авторизации. На форуме хабра находил человека, у которого получилось это провернуть, но он на питоне код писал и не выложил его, да и я в питоне не бум-бум.
Выкладываю код для бета версии ЛК.
Код: Выделить всё
$username = '9222222222';
$password = '*********';
//$url = 'https://beta.lk.megafon.ru/api/login';
echo '<!DOCTYPE html><html lang="ru"><head><meta charset="utf-8"/></head><body><br>';
// Авторизуемся
$header = [
'Accept: application/json, text/plain, */*',
'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
'Host: beta.lk.megafon.ru',
'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
'Referer: https://beta.lk.megafon.ru/login',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0',
'X-Cabinet-Capabilities: web-2020'
];
$post_data = [
'login' => $username,
'password' => $password
];
$post_data = http_build_query($post_data);
$page = getData('https://beta.lk.megafon.ru/api/login', $header, $post_data);
$json = json_decode($page);
// ЛК
$header = [
'Accept: application/json, text/plain, */*',
'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3',
'Content-Type: application/x-www-form-urlencoded; charset=UTF-8',
'Referer: https://beta.lk.megafon.ru/',
'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0',
'X-Cabinet-Capabilities: web-2020'
];
$page = getData('https://beta.lk.megafon.ru/api/main/balance', $header);
$json = json_decode($page);
$meg_bal = $json->balance;
echo "<strong>Баланс:</strong> $meg_bal<br><br>\r\n";
// Минуты и интернет остаток
$page1 = getData('https://beta.lk.megafon.ru/api/options/v2/remainders/mini', $header);
$json1 = json_decode($page1, true);
$min = $json1['remainders'][0]['availableValue']['value'];
$gig = $json1['remainders'][1]['availableValue']['value'];
echo "<strong>Остаток минут:</strong> $min<br><br>\r\n";
echo "<strong>Остаток гигабайт:</strong> $gig1<br><br>\r\n";
echo '</body></html>';
// Функция CURL-запроса
function getData($url, $header = false, $post_data = false)
{
global $dir;
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_COOKIEJAR, __DIR__ . '/megaf_cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEFILE, __DIR__ . '/megaf_cookie.txt');
if ($header) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
if ($post_data) {
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
}
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 300);
curl_setopt(
$ch,
CURLOPT_USERAGENT,
'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0'
);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$ret = curl_exec($ch);
usleep(300000);
return $ret;
}
И на заметку: при частых запросах необходимо будет вводить капчу дополнительно к логину и паролю.
Чуток позже выложу такой же код для оператора Мотив (Свердловская область).
Пользуйтесь.
