#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
Комментариев нет:
Отправить комментарий