vodka2 / vk-audio-token

Library that obtains VK tokens that work for VK audio API. Библиотека для получения токена VK, подходящего для Audio API.
https://vodka2.github.io/vk-audio-token/
116 stars 25 forks source link

Проблема с 2fa #25

Closed kozyaba closed 4 years ago

kozyaba commented 4 years ago

Добрый день. Пытаюсь получить токен из примера следующим образом: php example_microg.php login pass GET_CODE но в ответ получаю ошибку: PHP Fatal error: Uncaught Vodka2\VKAudioToken\TokenException: Two factor auth is required.

Не совсем понятно, что делать на этом этапе. Пробовал перейти в браузере по redirect_uri, но вк пишет, что сессия устарела. Что я делаю не так?))

С паролем приложения разумеется проблем нет, но хочется использовать авторизацию по обычному паролю тоже.

vodka2 commented 4 years ago

@kozyaba Добрый день. По идее должно прийти SMS, но почему-то не приходит. Есть два варианта, как это обойти. Либо перейти по ссылке redirect_uri, откроется страница с формой, на телефон придёт SMS или будет звонок, вводим код и получаем необновлённый токен, как если бы не было 2FA. Правда, пока что API vk-audio-token не позволяет его обновить, это нужно доработать. Ошибка с устаревшей сессией возникает, думаю, из-за того, что вы уже зашли ВК, нужно либо выйти, либо использовать режим инкогнито. Второй вариант, вставить в example_microg.php

...
$receiver = new TokenReceiver($login, $pass, $authData, $params, $authCode);
try {
    echo $receiver->getToken();
} catch (\Vodka2\VKAudioToken\TokenException $e) {
    if ($e->code == \Vodka2\VKAudioToken\TokenException::TWOFA_REQ && isset($e->extra->validation_sid)) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, "https://api.vk.com/method/auth.validatePhone?sid={$e->extra->validation_sid}&v=5.95");
        echo curl_exec($ch);
    } else {
        throw $e;
    }
}

После выполнения на телефон приходит SMS с кодом, далее, как раньше php example_microg.php login pass <код из SMS>. Тоже в идеале нужно внести эти изменения в vk-audio-token.