Николай Ланец
27 сент. 2013 г., 19:21

Добавить вход через Одноклассники и Вконтакте

Народ, а кто добавит Одноклассники и Вконтакте в modHybridAuth? Вот zenlab добавил Яшу, за что ему, кстати, огромное спасибо!
Публикую скрипт
<?php class Hybrid_Providers_vk extends Hybrid_Provider_Model_OAuth2 { function initialize() { parent::initialize(); $this->api->authorize_url = "http://oauth.vk.com/authorize"; $this->api->token_url = "https://oauth.vk.com/access_token"; $this->api->sign_token_name = "code"; if( $this->token( "access_token" ) ){ $this->api->access_token = $this->token( "access_token" ); $this->api->refresh_token = $this->token( "refresh_token" ); $this->api->access_token_expires_in = $this->token( "expires_in" ); $this->api->access_token_expires_at = $this->token( "expires_at" ); $this->api->token_user_id = $this->token( "user_id" ); $this->api->email = $this->token( "email" ); } } function getUserProfile() { if ( $this->api->access_token ) { $params = array( 'uids' => $this->api->token_user_id, 'fields' => 'uid,first_name,last_name,screen_name,sex,bdate,photo_big', 'access_token' => $this->api->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) { $this->user->profile->identifier = $userInfo['uid']; $this->user->profile->firstName = $userInfo['first_name']; $this->user->profile->displayName = $userInfo['screen_name']; $this->user->profile->photoURL = $userInfo['photo_big']; $this->user->profile->gender = $userInfo['sex']; $this->user->profile->email = $this->api->email; $this->user->profile->emailVerified = $this->api->email; return $this->user->profile; } else { throw new Exception( "User profile request failed! {$this->providerId} returned an invalide response.", 6 ); } } }
Такой вопрос только остался открытым все работает, но не получается подтянуть к профилю email. Так и не понял почему $this->user->profile->email. В первичном запросе к vk api указал параметр scope=email как указано в букваре api. Теперь поидее он должен подтянуться в массиве токена $this->token( «email» ); Но почему то не работает. Может у кого-то есть идеи как исправить
Не буду утверждать наверняка, но некоторые соцсети сейчас в принципе не отдают емейлы, типа по политикам безопасности. Может и ВК перестал отдавать. Чуть позже Лев Вербицкий посмотрит, он у нас специалист по соцсетям.
Николай, Вк как раз сейчас стал отдавать, я тестово запускал скрипт без привязки к modHybridAuth. Прекрасно подтянулся он в массив токена. Здесь причина глубже. Буду рад если кто-то сможет помочь. Допилим до конца — вещь полезная)
Думаю допилим. Просто уже после праздников.
Не страшно как бы ) Все не к спеху
Нашел еще более обширное решение github.com — немного подправил классы и email цепляет и в принципе больше ничего не надо ), но с остальными данными — упорно не грузит их. Пол, дату рождения, фото профиля и тд

Добавить комментарий