Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.10.2015, 20:58   #1
Yan9
Пользователь
 
Регистрация: 02.10.2015
Сообщений: 27
По умолчанию Не могу получить email из Vkontakte при аутентификации через него

Добрый день! Уже весь день мучаюсь, самому не удалось решить проблему. Делаю аутентификацию через соц сети, в частности, через Vk, но не могу получить email, указал scope, передал в fields, которые надо получить, как пользователь кликнул "Разрешить" использовать эти данные, но все равно пишет Notice: Undefined index: email in ...
Подскажите в чем проблема. Спасибо!

Страница с самой аутентификацией:
PHP код:
    $client_id='555555555'// ID приложения
    
$client_secret='qwqwqwqwqwqwqwwqwqwqw'// Ключ приложения
    
$redirect_uri='http://localhost/user/site'// Адрес сайта

    
$url='http://oauth.vk.com/authorize';

    
$params=array(
        
'client_id'=>$client_id,
        
'redirect_uri'=>$redirect_uri,
        
'response_type'=>'code',
        
'scope'=>'email'
    
);
    echo 
$link='<p><a href="' $url '?' urldecode(http_build_query($params)) . '">Аутентификация ВКонтакте</a></p>'
Страница с обработчиком, куда делает редирект:
PHP код:
if (isset($_GET['code'])) {
    
$result false;
    
$params = array(
        
'client_id' => $client_id,
        
'client_secret' => $client_secret,
        
'code' => $_GET['code'],
        
'redirect_uri' => $redirect_uri
    
);

    
$token=json_decode(file_get_contents('https://oauth.vk.com/access_token' '?' urldecode(http_build_query($params))), true);

    if (isset(
$token['access_token'])) {
        
$params=array(
            
'uids'=>$token['user_id'],
            
'fields'=>'uid,first_name,last_name,email',
            
'access_token'=>$token['access_token']
        );

        
$userInfo json_decode(file_get_contents('https://api.vk.com/method/users.get' '?' urldecode(http_build_query($params))), true);
        if (isset(
$userInfo['response'][0]['uid'])) {
            
$userInfo $userInfo['response'][0];
            
$result true;
        }
    }

    if (
$result) {
        echo 
"Имя: " $userInfo['first_name'] . '<br />';
        echo 
"Фамилия: " $userInfo['last_name'] . '<br />';
        echo 
"Имейл: " $userInfo['email'] . '<br />';
    }

Решение (email лежит в токене):
if (isset($userInfo['response'][0]['uid'])) {
$userInfo['response'][0]['email'] = $token['email'];
$userInfo = $userInfo['response'][0];
$result = true;
}

echo "Имейл пользователя: " . $userInfo['email'] . '<br />';

Последний раз редактировалось Yan9; 23.10.2015 в 01:34.
Yan9 вне форума Ответить с цитированием
Старый 22.10.2015, 23:28   #2
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Авторизация сайтов
4. Получение access_token:
Цитата:
Если у пользователя указан email, а приложением были запрошены соответствующие права, сервер также вернет email пользователя.
Andkorol вне форума Ответить с цитированием
Старый 23.10.2015, 00:16   #3
Yan9
Пользователь
 
Регистрация: 02.10.2015
Сообщений: 27
По умолчанию

Спасибо! Понял как это сделать.

Последний раз редактировалось Yan9; 23.10.2015 в 01:27.
Yan9 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить номер текущей страницы документа MS Word при работе через OLE Fastex C++ Builder 1 30.08.2012 19:16
сформировать массив и получить из него данные по фильтру gramp Microsoft Office Excel 9 10.04.2011 01:17
ПОЛУЧИТЬ И УСТАНОВИТЬ ЗНАЧЕНИЕ ИЗ EDIT И В НЕГО Dimarik Win Api 2 26.03.2011 16:02
Отправка email через прокси BMH Общие вопросы .NET 3 26.04.2009 03:07
Отправка Email через программу по умолчанию ScreN Общие вопросы Delphi 7 05.01.2009 23:21