Страницы

Поиск по вопросам

четверг, 23 января 2020 г.

Проблема с валидацией действий через VK API 5.0

#php #vkontakte_api #вконтакте


Здравствуйте, возникла проблема с валидацией действий через ВКонтакте. 
Дело в том, что  начиная с версии API 5.0 ввели новый метод валидации (ранее была
CAPTCHA, с которой отлично работалось).

Слегка не понял момент в документации:


  redirect_uri — специально составленный адрес, который необходимо открыть в браузере
для прохождения процедуры валидации.


Открыть его нужно со стороны пользователя, или со стороны сервера? Я попробовал оба
варианта. Получил ссылку, к примеру: 


  https://m.vk.com/login?act=security_check&api_hash=0449ff3ed0d1dc11


Перехожу на неё в браузере — всё как в документации, получаю после редиректа ссылку:


  https://oauth.vk.com/blank.html#success=1&access_token=мойтокен


Причём, токен не отличается от того, что был до этого, хотя в документации идёт речь
о новом токене. Но так или иначе, получили success=1, значит, всё должно работать?
Пробую вновь отправить запрос — аналогичная ситуация: возвращает ошибку и требует валидацию
пройти. 

Я уже попробовал и с сайта через file_get_contents+$_REQUEST получить запрос — ВК
не вернул ничего, хотя судя по документации "пользователь" сам открывает ссылку в браузере. 

Уже всё перепробовал раз 5. Отписал в поддержку социальной сети также, но возможно
я уже где-то ошибаюсь и кто-то встречался с этим. Заранее спасибо за ответы.

UPD:  Что странно, что ссылку в redirect_uri передает через мобильную версию, т.е.
через m.vk.com, хотя в документации просто через vk.com, и при попытке убрать с redirect_uri
m. и оставить ссылку формата vk.com, после того, как пытаешься перейти по ней в браузере
— попадаю на страницу ВКонтакте. 

Для отправки запроса использую file_get_contents, а не cURL. Попробую сейчас cURL.

UPD: Попробовал, никаких изменений: также m.vk.com. Скорее всего дело и не в этом. Код:

function callMethod($request, $params) {

    $c=curl_init();
    curl_setopt($c, CURLOPT_URL, $request);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($c, CURLOPT_POST, true);
    curl_setopt($c, CURLOPT_POSTFIELDS, $params);
    curl_setopt($c, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0)
Gecko/20100101 Firefox/49.0');
    curl_setopt($c, CURLOPT_TIMEOUT, 30);
    curl_setopt($c, CURLOPT_SSL_VERIFYPEER, false);
    $result = curl_exec($c);

    if($result === false) {
        $result = curl_error($c);
    }
    curl_close($c);

    return $result;
}


UPD: Проблема всё ещё не решена: от ВК нет ответа :(
Возможно найдется добрая душа, которая сделает вопрос конкурсным? У меня не хватает
репутации для минимального порога.
    


Ответы

Ответ 1



Была точно такая же проблема. ВК выдаёт такую ошибку, когда вы заходите из нового необычного места, и надо открывать ту ссылку именно из того места. Например, когда вы используете прокси и пытаетесь зайти в вк, то он попросит Вас подтвердить номер. Получается что мы получили токен с одного ip адреса (со стороны сервера), а использовать его пытаемся со стороны пользователя, у которого другой ip адрес. Я писал в тех. поддержку, увы ничем они не помогают: Ошибка появляется в двух случаях — либо если ip-адрес является «неожиданным» для того аккаунта, с которого ведется работа (собственно, поэтому ошибка и называется «вход из подозрительного места»), либо если речь идет о попытке использовать на сервере токен, который получен в клиентском приложении по схеме vk.com/dev/auth_mobile То есть теоретически когда мы делаем запрос повторно, вк просит подтвердить номер, но как это сделать с помощью API не понятно. Я решил проблему двумя путями: путем перевода приложения из стэндэлон в веб-сайт. использовал это - https://github.com/Yashko/vk-validation-node

Комментариев нет:

Отправить комментарий