Как осуществить регистрацию и авторизацию в vk.com api?

Всем привет!

Имеется некое приложение для мобильных устройств (android, ios), в котором нужно сделать авторизацию через соц.сеть vk.com.
Перечитал кучу документации по api vk, но так и ничего не вышло.
Там сказано создать приложение у себя в профиле на сайте vk.com, это у меня уже готово, а именно параметры:
client_secret, client_id, code.

Логика работы должна быть такой:
1)Клиент заходит в приложение на мобилке, жмет авторизация с помощью вк.
2)Далее данные поступают на наш сервер(сайт/обработчик), где скрипт на php проверяет на наличие этот user_id vkontakte пользователя, ну и соответственно если нет добавляет его в базу со всеми токенами и прочее если есть просто авторизует.

В качестве примера выкладываю скрипт где реализована регистрация/логин только для фейсбука, мне нужно сделать похожее но только для vk.com.

public function action_fblogin()
    {
        $token = $this->request->query('access_token');
        if ($token && is_string($token))
        {
            $response = json_decode(
                $this->create_request('https://graph.facebook.com/me/?access_token='.$token.'&locale=ru_RU')
                    ->execute()
                    ->body()
            );

            if (isset($response->error)) {
                $this->response_json = array('fb_error' => $response->error);
                return;
            }

            if (!isset($response->id)) {
                $this->response_json = array('error' => 'Не удалось получить ID учётной записи в Facebook');
                return;
            }

            $_email = isset($response->email) ? $response->email : '';

            $user = ORM::factory('User')->where('facebook_id', '=', $response->id);

            if ($_email)
                $user = $user->or_where('email', '=', $_email);

            $user->find();

            if ($user->loaded()) {
                $this->response_json = array(
                    'user_id'   => $user->id,
                    'token'     => $user->create_token($this->request->headers('User-Agent')),
                    'name'      => $user->name,
                    'email'     => $user->email,
                    'gender'    => $user->gender,
                    'phone'     => $user->phone,
                    'avatar'    => $user->avatar->full_url(),
                );
            }
            else {
                $_gender = 0;
                if (isset($response->gender)) {
                    if ($response->gender == 'male' || $response->gender == 'мужской')
                        $_gender = 1;
                    elseif ($response->gender == 'female' || $response->gender == 'женский')
                        $_gender = 2;
                }
       }
}


Надеюсь, понятно объяснил, буду рад любой помощи!
P.s В качестве фреймворка используется Kohana, если это чем-то поможет.
  • Вопрос задан
  • 4188 просмотров
Пригласить эксперта
Ответы на вопрос 1
sanchezzzhak
@sanchezzzhak
Ля ля ля...
'http://api.vk.com/oauth/authorize?client_id=' . $config['vk']['app_id'] .
            '&response_type=code'. 
            '&scope=notify,friends'.
            '&redirect_uri=' . urldecode( $config['vk']['redirect_url'])


Перекидываем на сайт ВК тот жмет кнопку авторизоваться и разрешает права

Дальше на вашем сайте из Гет переменных получаем CODE и usser_id
public function http($url){
        $ci = curl_init();
        /* Curl settings */
        curl_setopt($ci, CURLOPT_USERAGENT, 'dev-php');
        curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 10);
        curl_setopt($ci, CURLOPT_TIMEOUT, 20);
        curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:'));
        curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, false );
        curl_setopt($ci, CURLOPT_HEADER, false);
        curl_setopt($ci, CURLOPT_URL, $url);
        $response = curl_exec($ci);
        curl_close($ci);
        return $response;
    }

    /**
     * Получить по коду access_token
     * @param  string $code секретный код от пользователя...
     * @return  array|false  получаем данные в виде массива или false
     **/
    public function getAccessToken($code){
        $response = json_decode($this->http('https://api.vk.com/oauth/access_token?client_id=' . $this->app_id .
        '&client_secret=' . $this->app_key . '&code=' . $code . '&redirect_uri='.  urldecode($this->app_redirect_url)   ),true);
        return $response;
    }


++ Наверное вам нужно вроде уровень прав просить offline ( вечный токен)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы