6 const ID =
"VKontakte";
14 array(
"vkontakte_appid",
GetMessage(
"socserv_vk_id"),
"", Array(
"text", 40)),
15 array(
"vkontakte_appsecret",
GetMessage(
"socserv_vk_key"),
"", Array(
"text", 40)),
28 return '<a href="javascript:void(0)
" onclick="BX.util.popup(\
'' .
htmlspecialcharsbx(CUtil::JSEscape(
$url)) .
'\', 660, 425)
" class="bx-ss-button vkontakte-button
"></a><span class="bx-spacer
"></span><span>' . $phrase . '</span>';
31 public function GetOnClickJs($arParams)
33 $url = $this->getUrl($arParams);
35 return "BX.util.popup(
'" . CUtil::JSEscape($url) . "', 660, 425)
";
38 public function getUrl($arParams)
42 if (IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
44 $redirect_uri = self::CONTROLLER_URL . "/redirect.php
";
45 // error, but this code is not working at all
46 $state = \CHTTP::URN2URI("/bitrix/tools/oauth/liveid.php
") . "?state=
";
47 $backurl = urlencode($APPLICATION->GetCurPageParam('check_key=' . \CSocServAuthManager::getUniqueKey(), array("logout
", "auth_service_error
", "auth_service_id
", "backurl
")));
48 $state .= urlencode(urlencode("backurl=
" . $backurl));
52 $backurl = $APPLICATION->GetCurPageParam(
53 'check_key=' . \CSocServAuthManager::getUniqueKey(),
54 array("logout
", "auth_service_error
", "auth_service_id
", "backurl
")
57 $state = 'site_id=' . SITE_ID . '&backurl=' . urlencode($backurl) . (isset($arParams['BACKURL']) ? '&redirect_url=' . urlencode($arParams['BACKURL']) : '');
58 $redirect_uri = $this->getEntityOAuth()->GetRedirectURI();
62 return $this->getEntityOAuth()->GetAuthUrl($redirect_uri, $state);
65 public function getEntityOAuth($code = false)
67 if (!$this->entityOAuth)
69 $this->entityOAuth = new CVKontakteOAuthInterface();
74 $this->entityOAuth->setCode($code);
77 return $this->entityOAuth;
80 public function prepareUser($arVkUser, $short = false)
82 $first_name = $last_name = $gender = "";
84 if ($arVkUser['response']['0']['first_name'] <> '')
86 $first_name = $arVkUser['response']['0']['first_name'];
89 if ($arVkUser['response']['0']['last_name'] <> '')
91 $last_name = $arVkUser['response']['0']['last_name'];
94 if (isset($arVkUser['response']['0']['sex']) && $arVkUser['response']['0']['sex'] != '')
96 if ($arVkUser['response']['0']['sex'] == '2')
98 elseif ($arVkUser['response']['0']['sex'] == '1')
103 'EXTERNAL_AUTH_ID' => self::ID,
104 'XML_ID' => $arVkUser['response']['0']['id'],
105 'LOGIN' => "VKuser
" . $arVkUser['response']['0']['id'],
106 'EMAIL' => $this->entityOAuth->GetCurrentUserEmail(),
107 'NAME' => $first_name,
108 'LAST_NAME' => $last_name,
109 'PERSONAL_GENDER' => $gender,
110 'OATOKEN' => $this->entityOAuth->getToken(),
111 'OATOKEN_EXPIRES' => $this->entityOAuth->getAccessTokenExpires(),
114 if (isset($arVkUser['response']['0']['photo_max_orig']) && self::CheckPhotoURI($arVkUser['response']['0']['photo_max_orig']))
118 $arPic = CFile::MakeFileArray($arVkUser['response']['0']['photo_max_orig']);
121 $arFields["PERSONAL_PHOTO
"] = $arPic;
125 if (isset($arVkUser['response']['0']['bdate']))
127 if ($date = MakeTimeStamp($arVkUser['response']['0']['bdate'], "DD.MM.YYYY
"))
129 $arFields["PERSONAL_BIRTHDAY
"] = ConvertTimeStamp($date);
133 $arFields["PERSONAL_WWW
"] = self::getProfileUrl($arVkUser['response']['0']['id']);
137 $arFields["SITE_ID"] = SITE_ID;
144 public function Authorize()
146 $GLOBALS["APPLICATION
"]->RestartBuffer();
147 $bSuccess = SOCSERV_AUTHORISATION_ERROR;
149 $stateUnpacked = base64_decode($_REQUEST['state'] ?? '');
152 parse_str($stateUnpacked, $stateParams);
153 if ($stateParams && is_array($stateParams))
155 $_REQUEST = array_merge($_REQUEST, $stateParams);
159 if ((isset($_REQUEST["code
"]) && $_REQUEST["code
"] <> '') && CSocServAuthManager::CheckUniqueKey())
161 if (IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
162 $redirect_uri = self::CONTROLLER_URL . "/redirect.php
";
164 $redirect_uri = $this->getEntityOAuth()->GetRedirectURI();
166 $this->entityOAuth = $this->getEntityOAuth($_REQUEST['code']);
167 if ($this->entityOAuth->GetAccessToken($redirect_uri) !== false)
169 $arVkUser = $this->entityOAuth->GetCurrentUser();
170 if (is_array($arVkUser) && ($arVkUser['response']['0']['id'] <> ''))
172 $arFields = $this->prepareUser($arVkUser);
173 $bSuccess = $this->AuthorizeUser($arFields);
178 $url = ($GLOBALS["APPLICATION
"]->GetCurDir() == "/login/
") ? "" : $GLOBALS["APPLICATION
"]->GetCurDir();
179 $aRemove = array("logout
", "auth_service_error
", "auth_service_id
", "code
", "error_reason
", "error
", "error_description
", "check_key
", "current_fieldset
");
182 if ($bSuccess === true && (isset($_REQUEST['backurl']) || isset($_REQUEST['redirect_url'])))
184 $parseUrl = parse_url(isset($_REQUEST['redirect_url']) ? $_REQUEST['redirect_url'] : $_REQUEST['backurl']);
186 $urlPath = $parseUrl["path"];
187 $arUrlQuery = explode('&', $parseUrl["query
"]);
189 foreach ($arUrlQuery as $key => $value)
191 foreach ($aRemove as $param)
193 if (mb_strpos($value, $param."=
") === 0)
195 unset($arUrlQuery[$key]);
200 $url = (!empty($arUrlQuery)) ? $urlPath . '?' . implode("&
", $arUrlQuery) : $urlPath;
203 if ($bSuccess === SOCSERV_REGISTRATION_DENY)
205 $url = (preg_match("/\?/
", $url)) ? $url . '&' : $url . '?';
206 $url .= 'auth_service_id=' . self::ID . '&auth_service_error=' . $bSuccess;
208 elseif ($bSuccess !== true)
210 $url = (isset($urlPath)) ? $urlPath . '?auth_service_id=' . self::ID . '&auth_service_error=' . $bSuccess : $GLOBALS['APPLICATION']->GetCurPageParam(('auth_service_id=' . self::ID . '&auth_service_error=' . $bSuccess), $aRemove);
213 if (CModule::IncludeModule("socialnetwork
") && mb_strpos($url, "current_fieldset=
") === false)
215 $url = (preg_match("/\?/
", $url)) ? $url . "¤t_fieldset=SOCSERV
" : $url . "?current_fieldset=SOCSERV
";
222 window.opener.location = \'' . CUtil::JSEscape($url) . '\';
227 CMain::FinalActions();
230 public function setUser($userId)
232 $this->getEntityOAuth()->setUser($userId);
235 public function getFriendsList($limit, &$next)
237 if (IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
238 $redirect_uri = self::CONTROLLER_URL . "/redirect.php
";
240 $redirect_uri = $this->getEntityOAuth()->GetRedirectURI();
242 $vk = $this->getEntityOAuth();
243 if ($vk->GetAccessToken($redirect_uri) !== false)
245 $res = $vk->getCurrentUserFriends($limit, $next);
246 if (is_array($res) && is_array($res['response']))
248 foreach ($res['response'] as $key => $contact)
250 $res['response'][$key]['name'] = $contact["first_name
"];
251 $res['response'][$key]['url'] = "https:
252 $res[
'response'][
$key][
'picture'] = $contact[
'photo_200_orig'];
255 return $res[
'response'];
267 $redirect_uri = self::CONTROLLER_URL .
"/redirect.php";
271 if ($vk->GetAccessToken($redirect_uri) !==
false)
281 return "http://vk.com/id" .
$uid;
295 const APP_URL =
"https://api.vk.com/method/apps.get";
325 return \CHTTP::URN2URI(
"/bitrix/tools/oauth/vkontakte.php");
332 $state = base64_encode($state);
335 return self::AUTH_URL .
336 "?client_id=" . urlencode($this->appID) .
337 "&redirect_uri=" . urlencode($redirect_uri) .
339 "&response_type=code" .
340 ($state <>
'' ?
'&state=' . urlencode($state) :
'');
346 if (is_array($token))
348 $this->access_token = $token[
"OATOKEN"];
353 if ($this->code ===
false)
359 "client_id" => $this->appID,
360 "client_secret" => $this->appSecret,
361 "code" => $this->code,
362 "redirect_uri" => $redirect_uri,
365 $h = new \Bitrix\Main\Web\HttpClient(
array(
366 "socketTimeout" => $this->httpTimeout,
367 "streamTimeout" => $this->httpTimeout,
375 }
catch (\
Bitrix\Main\ArgumentException $e)
382 if (mb_strpos(
$key,
'access_token_') === 0)
384 $this->access_token = $value;
385 $this->userID =
null;
386 $this->userEmail =
null;
388 $_SESSION[
"OAUTH_DATA"] =
array(
"OATOKEN" => $this->access_token);
395 $this->access_token =
$arResult[
"access_token"];
399 $_SESSION[
"OAUTH_DATA"] =
array(
"OATOKEN" => $this->access_token);
409 if ($this->access_token ===
false)
414 $h = new \Bitrix\Main\Web\HttpClient(
array(
415 "socketTimeout" => $this->httpTimeout,
416 "streamTimeout" => $this->httpTimeout,
420 $result = $h->get(self::CONTACTS_URL .
'?v='.self::API_VERSION.
'&fields=uid,first_name,last_name,nickname,screen_name,sex,bdate,city,country,timezone,photo,photo_medium,photo_max_orig,photo_rec,email&access_token=' . urlencode($this->access_token));
425 }
catch (\
Bitrix\Main\ArgumentException $e)
435 if ($this->access_token ===
false)
438 $h = new \Bitrix\Main\Web\HttpClient();
439 $h->setTimeout($this->httpTimeout);
441 $result = $h->get(self::APP_URL .
'?v='.self::API_VERSION.
'&fields=id&access_token=' . urlencode($this->access_token));
446 }
catch (\
Bitrix\Main\ArgumentException $e)
451 return $result[
'response'][
'items'][0];
461 if ($this->access_token ===
false)
466 $url = self::FRIENDS_URL .
'?v='.self::API_VERSION.
'&uids=' . $this->userID .
'&fields=uid,first_name,last_name,nickname,screen_name,photo_200_orig,contacts,email&access_token=' . urlencode($this->access_token);
470 $url .=
"&count=" . intval($limit) .
"&offset=" . intval($next);
473 $h = new \Bitrix\Main\Web\HttpClient();
474 $h->setTimeout($this->httpTimeout);
481 }
catch (\
Bitrix\Main\ArgumentException $e)
486 $next = $limit + $next;
493 if ($this->access_token ===
false)
498 $url = self::MESSAGE_URL;
502 "access_token" => $this->access_token,
506 $ob = new \Bitrix\Main\Web\HttpClient();
508 return $ob->post(
$url, $arPost);
change_password_forgot_link login popup forget pas AUTH_GOTO_FORGOT_FORM login btn wrap change_password_button login popup link login popup return auth javascript
sendMessage($uid, $message)
getEntityOAuth($code=false)
__construct($appID=false, $appSecret=false, $code=false)
GetAccessToken($redirect_uri)
GetCurrentUserFriends($limit, &$next)
sendMessage($uid, $message)
GetAuthUrl($redirect_uri, $state='')
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
IsModuleInstalled($module_id)
htmlspecialcharsbx($string, $flags=ENT_COMPAT, $doubleEncode=true)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
if(empty($signedUserToken)) $key