Вход Регистрация
Файл: sngine-v2.8/Script/includes/libs/HybridAuth/Provider/Vkontakte.php
Строк: 162
<?php
/*!
* Hybridauth
* https://hybridauth.github.io | https://github.com/hybridauth/hybridauth
*  (c) 2017 Hybridauth authors | https://hybridauth.github.io/license.html
*/

namespace HybridauthProvider;

use 
HybridauthAdapterOAuth2;
use 
HybridauthExceptionUnexpectedApiResponseException;
use 
HybridauthDataCollection;
use 
HybridauthUserProfile;
use 
HybridauthData;
use 
HybridauthUser;

/**
 * Vkontakte provider adapter.
 *
 * Example:
 *
 *   $config = [
 *       'callback'  => HybridauthHttpClientUtil::getCurrentUrl(),
 *       'keys'      => ['id' => '', 'secret' => ''],
 *   ];
 *
 *   $adapter = new HybridauthProviderVkontakte($config);
 *
 *   try {
 *       if (!$adapter->isConnected()) {
 *           $adapter->authenticate();
 *       }
 *
 *       $userProfile = $adapter->getUserProfile();
 *   }
 *   catch(Exception $e) {
 *       print $e->getMessage() ;
 *   }
 */
class Vkontakte extends OAuth2
{

    const 
API_VERSION '5.95';

    const 
URL 'https://vk.com/';

    
/**
     * {@inheritdoc}
     */
    
protected $apiBaseUrl 'https://api.vk.com/method/';

    
/**
     * {@inheritdoc}
     */
    
protected $authorizeUrl 'https://api.vk.com/oauth/authorize';

    
/**
     * {@inheritdoc}
     */
    
protected $accessTokenUrl 'https://api.vk.com/oauth/token';

    
/**
     * {@inheritdoc}
     */
    
protected $scope 'email,offline';

    
/**
     * {@inheritdoc}
     */
    
protected function initialize()
    {
        
parent::initialize();

        
// The VK API requires version and access_token from authenticated users
        // for each endpoint.
        
$accessToken $this->getStoredData($this->accessTokenName);
        
$this->apiRequestParameters[$this->accessTokenName] = $accessToken;
        
$this->apiRequestParameters['v'] = static::API_VERSION;
    }

    
/**
     * {@inheritdoc}
     */
    
protected function validateAccessTokenExchange($response)
    {
        
$data parent::validateAccessTokenExchange($response);

        
// Need to store email for later use.
        
$this->storeData('email'$data->get('email'));
    }

    
/**
     * {@inheritdoc}
     */
    
public function hasAccessTokenExpired()
    {
        
// As we using offline scope, $expired will be false.
        
$expired $this->getStoredData('expires_in')
            ? 
$this->getStoredData('expires_at') <= time()
            : 
false;

        return 
$expired;
    }

    
/**
     * {@inheritdoc}
     */
    
public function getUserProfile()
    {
        
$photoField 'photo_' . ($this->config->get('photo_size') ?: 'max_orig');

        
$response $this->apiRequest('users.get''GET', [
            
'fields' => 'screen_name,sex,education,bdate,has_photo,' $photoField,
        ]);

        if (
property_exists($response'error')) {
            throw new 
UnexpectedApiResponseException($response->error->error_msg);
        }

        
$data = new Collection($response->response[0]);

        if (!
$data->exists('id')) {
            throw new 
UnexpectedApiResponseException('Provider API returned an unexpected response.');
        }

        
$userProfile = new Profile();

        
$userProfile->identifier  $data->get('id');
        
$userProfile->email       $this->getStoredData('email');
        
$userProfile->firstName   $data->get('first_name');
        
$userProfile->lastName    $data->get('last_name');
        
$userProfile->displayName $data->get('screen_name');
        
$userProfile->photoURL    $data->get('has_photo') === $data->get($photoField) : '';

        
// Handle b-date.
        
if ($data->get('bdate')) {
            
$bday explode('.'$data->get('bdate'));
            
$userProfile->birthDay = (int) $bday[0];
            
$userProfile->birthMonth = (int) $bday[1];
            
$userProfile->birthYear = (int) $bday[2];
        }

        
$userProfile->data = [
            
'education' => $data->get('education'),
        ];

        
$screen_name = static::URL . ($data->get('screen_name') ?: 'id' $data->get('id'));
        
$userProfile->profileURL  $screen_name;

        switch (
$data->get('sex')) {
            case 
1:
                
$userProfile->gender 'female';
                break;

            case 
2:
                
$userProfile->gender 'male';
                break;
        }

        return 
$userProfile;
    }

    
/**
     * {@inheritdoc}
     */
    
public function getUserContacts()
    {
        
$response $this->apiRequest('friends.get''GET', [
            
'fields' => 'uid,name,photo_200_orig',
        ]);

        
$data = new DataCollection($response);
        if (!
$data->exists('response')) {
            throw new 
UnexpectedApiResponseException('Provider API returned an unexpected response.');
        }

        
$contacts = [];
        if (!
$data->filter('response')->filter('items')->isEmpty()) {
            foreach (
$data->filter('response')->filter('items')->toArray() as $item) {
                
$contacts[] = $this->fetchUserContact($item);
            }
        }

        return 
$contacts;
    }

    
/**
     * Parse the user contact.
     *
     * @param array $item
     *
     * @return HybridauthUserContact
     */
    
protected function fetchUserContact($item)
    {
        
$userContact = new UserContact();
        
$data = new DataCollection($item);

        
$userContact->identifier $data->get('id');
        
$userContact->displayName sprintf('%s %s'$data->get('first_name'), $data->get('last_name'));
        
$userContact->profileURL = static::URL . ($data->get('screen_name') ?: 'id' $data->get('id'));
        
$userContact->photoURL $data->get('photo_200_orig');

        return 
$userContact;
    }
}
Онлайн: 1
Реклама