

 
 








andipas писал(а):Скопируйте папку из последней версии CMS - protected\extensions\eauth

require_once dirname(dirname(__FILE__)).'/services/VKontakteOAuthService.php';
class CustomVKService extends VKontakteOAuthService {
    protected $jsArguments = array('popup' => array('width' => 750, 'height' => 450));
    protected $scope = 'users';
    protected $client_id = '';
    protected $client_secret = '';
    protected $providerOptions = array(
        'authorize' => 'http://api.vk.com/oauth/authorize',
        'access_token' => 'https://api.vk.com/oauth/access_token',
    );
    protected $versionApi = '5.74';
    public function __construct() {
        $this->title = tt('vkontakte_label', 'socialauth');
    }
    protected function fetchAttributes() {
        if (isset($_REQUEST['captcha_sid']) && isset($_REQUEST['captcha_key'])) {
            $info = (array)$this->makeSignedRequest('https://api.vk.com/method/users.get',
                array(
                    'query' => array(
                        'v' => $this->versionApi,
                        'uids' => $this->uid,
                        'fields' => 'uid, first_name, contacts',
                        'captcha_sid' => $_REQUEST['captcha_sid'],
                        'captcha_key' => $_REQUEST['captcha_key'],
                    ),
                )
            );
        }
        else {
            $info = (array)$this->makeSignedRequest('https://api.vk.com/method/users.get', array(
                'query' => array(
                    'v' => $this->versionApi,
                    'uids' => $this->uid,
                    'fields' => 'uid, first_name, contacts',
                ),
            ));
        }
        $info = $info['response'][0];
        
        $this->attributes['id'] = (isset($info->uid)) ? $info->uid : $info->id;
        $this->attributes['firstName'] = $info->first_name;
        $this->attributes['email'] = '';
        $this->attributes['mobilePhone'] = (isset($info->mobile_phone) && $info->mobile_phone) ? $info->mobile_phone : '';
        $this->attributes['homePhone'] = (isset($info->home_phone) && $info->home_phone) ? $info->home_phone : '';
        //$this->attributes['url'] = 'http://vk.com/id'.$info->uid;
    }
    protected function fetchJsonError($json) {
        if(isset($json->error)) {
            if (isset($json->error->error_code) && $json->error->error_code == 14) {
                $this->capcthaForm($json->error);
                exit;
            }
            return array(
                'code' => $json->error->error_code,
                'message' => $json->error->error_msg,
            );
        }
        else
            return null;
    }
    protected function capcthaForm($data) {
        if (isset($data->request_params)) {
            $action = array();
            foreach($data->request_params as $param) {
                $action[$param->key] = $param->value;
            }
            parse_str(Yii::app()->getRequest()->getRequestUri(), $output);
            if (isset($output['captcha_sid']))
                unset($output['captcha_sid']);
            $action['captcha_sid'] = $data->captcha_sid;
            $action = array_merge($action, $output);
            $action = http_build_query($action);
            $action = Yii::app()->getRequest()->getHostInfo().Yii::app()->getRequest()->getRequestUri().$action;
            echo '<form action="'.$action.'" method="POST">';
                echo tc('Verify Code').': <br />';
                echo '<img src="'.$data->captcha_img.'" /> <br /> <br />';
                echo '<input type="text" name="captcha_key" size="10"> <br /> <br />';
                echo '<input type="submit" value="'.tc('Send').'">';
            echo '</form>';
        }
    }
    
        
    /**
     * Returns the url to request to get OAuth2 code.
     * @param string $redirect_uri url to redirect after user confirmation.
     * @return string url to request.
     */
    protected function getCodeUrl($redirect_uri) {
        $redirect_uri = str_replace('login?service=vkontakte', 'login/vkontakte', $redirect_uri);
                
        $this->setState('redirect_uri', $redirect_uri);
        $url = parent::getCodeUrl($redirect_uri);
        if(isset($_GET['js']))
            $url .= '&display=popup';
        
        $url .= '&v='.$this->versionApi;
        return $url;
    }
    /**
     * Returns the url to request to get OAuth2 access token.
     * @return string url to request.
     */
    protected function getTokenUrl($code) {
        return parent::getTokenUrl($code) . '&v='.$this->versionApi;
    }
}
 



Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3