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