• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/classes/general/office365.php
  • Класс: COffice365OAuthInterface
  • Вызов: COffice365OAuthInterface::GetAccessToken
public function GetAccessToken($redirect_uri = false)
{
	$tokens = $this->getStorageTokens();

	if(is_array($tokens))
	{
		$this->access_token = $tokens["OATOKEN"];
		$this->accessTokenExpires = $tokens["OATOKEN_EXPIRES"];

		if(!$this->code)
		{
			if($this->checkAccessToken())
			{
				return true;
			}
			elseif(isset($tokens["REFRESH_TOKEN"]))
			{
				if($this->getNewAccessToken($tokens["REFRESH_TOKEN"], $this->userId, true))
				{
					return true;
				}
			}
		}

		$this->deleteStorageTokens();
	}

	if($this->code === false)
	{
		return false;
	}

	if($redirect_uri === false)
	{
		if(IsModuleInstalled('bitrix24') && defined('BX24_HOST_NAME'))
		{
			$redirect_uri = CSocServOffice365OAuth::CONTROLLER_URL."/redirect.php";
		}
		else
		{
			$redirect_uri = $this->getRedirectUri();
		}
	}

	$httpClient = new BitrixMainWebHttpClient();

	$requestData = http_build_query([
		"code" => $this->code,
		"client_id" => $this->appID,
		"client_secret" => $this->appSecret,
		"redirect_uri" => $redirect_uri,
		"grant_type" => "authorization_code",
		"scope" => implode(' ', array_unique($this->getScope())),
	], '', '&', PHP_QUERY_RFC3986);

	$result = $httpClient->post(static::TOKEN_URL, $requestData);

	$arResult = BitrixMainWebJson::decode($result);

	if(isset($arResult["access_token"]) && $arResult["access_token"] <> '')
	{
		$this->access_token = $arResult["access_token"];
		$this->accessTokenExpires = $arResult["expires_in"];
		if(isset($arResult["refresh_token"]) && $arResult["refresh_token"] <> '')
		{
			$this->refresh_token = $arResult["refresh_token"];
		}
		$_SESSION["OAUTH_DATA"] = array("OATOKEN" => $this->access_token);
		return true;
	}
	return false;
}