ovi8 5 01/30/2016 06:53 AM Здравствуйте, как получить емайл от пользователя регистрирующегося через Вконтакте? На некоторых форумах я замечаю то что емайл передается автоматически (не надо в ручную набирать), понятно что они все доделывали сами. Наверное этим никто не хочет делиться, своими силами у меня не получилось: если в файл conect.php добавить в scope email, то вконтакте его отдает, но форум не принимает, пробовал сделать под фэйсбук скопировал conect.php (там поля емайл есть), но видимо не все так просто... Я так понимаю там нужно править два файла, connect и oauth2 или намного больше? Сколько это может стоить и кто может сделать? Share this post Link to post Share on other sites
siv1987 2,623 01/30/2016 07:54 AM Все верно, нужно запросить email в scope и, если вк его вернет, указать его при создание пользователя. Share this post Link to post Share on other sites
ovi8 5 01/30/2016 09:06 AM Если я правильно понимаю, этот код используется при создании пользователя, добавил $_userData['email'], но не было толку. /* From reg, so create new account properly */ $toSave = array( 'core' => array( 'name' => $safeName, 'members_display_name' => $displayName, 'members_created_remote' => 1, 'member_group_id' => ( $this->settings['vk_mgid'] ) ? $this->settings['vk_mgid'] : $this->settings['member_group'], 'email' => $_userData['email'], 'vk_uid' => $_userData['uid'], 'time_offset' => $_userData['timezone'], 'vk_token' => $rToken ), 'extendedProfile' => array( 'vk_bwoptions' => $vk_bwoptions ) ); Где то читал, что емайл отдается с токеном, это имеет значение? Share this post Link to post Share on other sites
siv1987 2,623 01/30/2016 10:18 AM Да, в scope нужно указать email. Если не помогло возможно вк его не вернул. При авторизации приложение спрашивает разрешение доступа к емайлу. Share this post Link to post Share on other sites
siv1987 2,623 02/01/2016 12:56 PM Открыть \ips_kernel\vkontakte\oauth2.php Найти: private $_allowed_scopes = array( Ниже добавить: 'email', // Доступ к электронной почте. Найти $session['user_id'] = isset($access_token['user_id']) ? $access_token['user_id'] : 0; Ниже добавить: $session['email'] = isset($access_token['email']) ? $access_token['email'] : ''; Открыть \admin\sources\classes\vkontakte\connect.php Найти 'scope' => 'wall',Заменить на 'scope' => 'offline,email', Найти /* Generate oAuth token */ $rToken = $this->_api->getAccessToken(); Ниже добавить $session = $this->_api->getSession(); Найти 'email' => '', Заменить на 'email' => isset( $session['email'] ) ? $session['email'] : '', 1 Share this post Link to post Share on other sites
ovi8 5 02/22/2016 03:59 PM Эх, к сожалению всё также: появляются поля ввода имэйл и в админке у пользователя имя и цифры вместо электронного ящика. У кого-нибудь способ предложенный siv1987 работает? Может дело во мне.. Share this post Link to post Share on other sites
siv1987 2,623 02/22/2016 05:02 PM Еще раз обратите внимание на то, что вконтакте должен вернуть емайл пользователя и для этого должно быть соответствующие разрешение с его стороны при авторизации. Share this post Link to post Share on other sites
ovi8 5 02/22/2016 05:25 PM Еще раз обратите внимание на то, что вконтакте должен вернуть емайл пользователя и для этого должно быть соответствующие разрешение с его стороны при авторизации. Вы имеете ввиду это разрешение? Я конечно же разрешаю, пробую зарегистрировать свою учетную запись вк. Share this post Link to post Share on other sites
siv1987 2,623 02/22/2016 06:45 PM Если есть возможность дайте доступ на фтп, к сожелению у меня нет рабочего форума с интеграцией вконтакте чтобы проверить. Share this post Link to post Share on other sites
ovi8 5 03/11/2016 07:08 PM Может здесь нужны какие-то изменения? Заметил, что в connect.php от Фейсбука поля для емайл есть /* A little gymnastics */ $this->_userData = $_userData; $_userData = $this->fetchUserData( $rToken ); /* Got a member linked already? */ $_member = IPSMember::load( $_userData['id'], 'all', 'fb_uid' ); /* Not connected, check email address */ if ( ! $_member['member_id'] AND $_userData['email'] ) { $_member = IPSMember::load( $_userData['email'], 'all', 'email' ); /* We do have an existing account, so trash email forcing user to sign up with new */ if ( $_member['member_id'] ) { /* Update row */ IPSMember::save( $_member['member_id'], array( 'core' => array( 'fb_uid' => $_userData['id'], 'fb_token' => $rToken ) ) ); } } if ( $_member['member_id'] ) { $memberData = $_member; А это уже от Вконтакте /* A little gymnastics */ $this->_userData = $_userData; $this->_userData['photo']=$_userData['photo_big']; /* Got a member linked already? */ $_member = IPSMember::load( $_userData['uid'], 'all', 'vk_uid' ); if ( $_member['member_id'] ) { $memberData = $_member; Пробовал копировать на ВК, но не было толку.. Если есть время взгляните пожалуйста. Share this post Link to post Share on other sites
siv1987 2,623 03/11/2016 07:37 PM Пожалуйста, не прикрепляйте даром файлы форума и не приводите ненужные куски кода. Инструкцию обновил. 1 Share this post Link to post Share on other sites
ovi8 5 03/23/2016 04:55 AM Всё работает! Есть небольшие моменты: страница выдает ошибку при первой попытке, т.е. если нажать обновить или назад в браузере то все становиться нормально и сразу заходишь под своим именем, ну и второе: нельзя выбрать имя отличное от вконтакте, хотя для кого=то это и плюс :) Спасибо,siv1987! Share this post Link to post Share on other sites
siv1987 2,623 03/26/2016 06:28 PM Какую ошибку?Имя пользователя можно удалить из кода, тогда форум предоставит возможность пользователю ввести его самому. При необхадимости можно создать настройку для управления этим поведением. /admin/sources/classes/vkontakte/connect.php $safeName = IPSText::convertCharsets( $_userData['first_name'] .' '. $_userData['last_name'], 'utf-8', IPS_DOC_CHAR_SET ) ; Заменить на $safeName = ( $this->settings['vk_realname'] ) ? IPSText::convertCharsets( $_userData['first_name'] .' '. $_userData['last_name'], 'utf-8', IPS_DOC_CHAR_SET ) : ''; в группе настроек "Интеграция с вконтакте" создать новую настройку vk_realname, или добавить ее в conf_global.php если нужно использовать реальное имя пользователя из вконтакте. 1 Share this post Link to post Share on other sites
ovi8 5 03/27/2016 04:36 PM Круто! С этим изменением ошибка исчезла, а была: просто белый экран и всё при обновлении страницы пользователь появлялся. Ещё раз спасибо :) Share this post Link to post Share on other sites