• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/classes/general/vkontakte.php
  • Класс: CSocServVKontakte
  • Вызов: CSocServVKontakte::Authorize
public function Authorize()
{
	$GLOBALS["APPLICATION"]->RestartBuffer();
	$bSuccess = SOCSERV_AUTHORISATION_ERROR;

	$stateUnpacked = base64_decode($_REQUEST['state'] ?? '');
	if ($stateUnpacked)
	{
		parse_str($stateUnpacked, $stateParams);
		if ($stateParams && is_array($stateParams))
		{
			$_REQUEST = array_merge($_REQUEST, $stateParams);
		}
	}

	if ((isset($_REQUEST["code"]) && $_REQUEST["code"] <> '') && CSocServAuthManager::CheckUniqueKey())
	{
		if (IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
			$redirect_uri = self::CONTROLLER_URL . "/redirect.php";
		else
			$redirect_uri = $this->getEntityOAuth()->GetRedirectURI();

		$this->entityOAuth = $this->getEntityOAuth($_REQUEST['code']);
		if ($this->entityOAuth->GetAccessToken($redirect_uri) !== false)
		{
			$arVkUser = $this->entityOAuth->GetCurrentUser();
			if (is_array($arVkUser) && ($arVkUser['response']['0']['id'] <> ''))
			{
				$arFields = $this->prepareUser($arVkUser);
				$bSuccess = $this->AuthorizeUser($arFields);
			}
		}
	}

	$url = ($GLOBALS["APPLICATION"]->GetCurDir() == "/login/") ? "" : $GLOBALS["APPLICATION"]->GetCurDir();
	$aRemove = array("logout", "auth_service_error", "auth_service_id", "code", "error_reason", "error", "error_description", "check_key", "current_fieldset");


	if ($bSuccess === true && (isset($_REQUEST['backurl']) || isset($_REQUEST['redirect_url'])))
	{
		$parseUrl = parse_url(isset($_REQUEST['redirect_url']) ? $_REQUEST['redirect_url'] : $_REQUEST['backurl']);

		$urlPath = $parseUrl["path"];
		$arUrlQuery = explode('&', $parseUrl["query"]);

		foreach ($arUrlQuery as $key => $value)
		{
			foreach ($aRemove as $param)
			{
				if (mb_strpos($value, $param."=") === 0)
				{
					unset($arUrlQuery[$key]);
					break;
				}
			}
		}
		$url = (!empty($arUrlQuery)) ? $urlPath . '?' . implode("&", $arUrlQuery) : $urlPath;
	}

	if ($bSuccess === SOCSERV_REGISTRATION_DENY)
	{
		$url = (preg_match("/?/", $url)) ? $url . '&' : $url . '?';
		$url .= 'auth_service_id=' . self::ID . '&auth_service_error=' . $bSuccess;
	}
	elseif ($bSuccess !== true)
	{
		$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);
	}

	if (CModule::IncludeModule("socialnetwork") && mb_strpos($url, "current_fieldset=") === false)
	{
		$url = (preg_match("/?/", $url)) ? $url . "¤t_fieldset=SOCSERV" : $url . "?current_fieldset=SOCSERV";
	}

	echo '

';
	CMain::FinalActions();
}