• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/classes/general/googleproxy.php
  • Класс: CGoogleProxyOAuthInterface
  • Вызов: CGoogleProxyOAuthInterface::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;
			}

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

		$this->deleteStorageTokens();
	}

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

	$http = new HttpClient([
		"socketTimeout" => $this->httpTimeout
	]);

	$params = array_merge(
		$this->getLicenseParams(),
		[
			"client_id" => $this->appID,
			"code" => $this->code,
			"redirect_uri" => $this->getRedirectUri(),
			"grant_type" => "authorization_code",
		]
	);

	try
	{
		$result = BitrixMainWebJson::decode($http->post(static::TOKEN_URL, $params));
		if (isset($result['APP_ID'], $result['API_KEY']))
		{
			$params['client_id'] = $result['APP_ID'];
			$this->appID = $result['APP_ID'];
			CSocServGoogleOAuth::SetOption("google_proxy_appid", trim($result['APP_ID']));
			CSocServGoogleOAuth::SetOption("google_proxy_api_key", trim($result['API_KEY']));

			$result = BitrixMainWebJson::decode($http->post(static::TOKEN_URL, $params));
		}

		$this->arResult = $result;
	}
	catch(BitrixMainArgumentException $e)
	{
		$this->arResult = [];
	}

	if(isset($this->arResult["access_token"]) && $this->arResult["access_token"] <> '')
	{
		if(isset($this->arResult["refresh_token"]) && $this->arResult["refresh_token"] <> '')
		{
			$this->refresh_token = $this->arResult["refresh_token"];
		}
		$this->access_token = $this->arResult["access_token"];
		$this->accessTokenExpires = $this->arResult["expires_in"] + time();

		$_SESSION["OAUTH_DATA"] = [
			"OATOKEN" => $this->access_token,
			"OATOKEN_EXPIRES" => $this->accessTokenExpires,
			"REFRESH_TOKEN" => $this->refresh_token,
		];

		return true;
	}

	return false;
}