• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/classes/general/mailru2.php
  • Класс: CMailRu2Interface
  • Вызов: CMailRu2Interface::GetAccessToken
public function GetAccessToken($redirect_uri)
{
	$token = $this->getStorageTokens();
	if (is_array($token))
	{
		$this->access_token = $token["OATOKEN"];
		$this->accessTokenExpires = $token["OATOKEN_EXPIRES"];

		if (!$this->code)
		{
			if ($this->checkAccessToken())
			{
				return true;
			}
			else if (isset($token['REFRESH_TOKEN']))
			{
				if ($this->getNewAccessToken($token['REFRESH_TOKEN'], $this->userId, true))
				{
					return true;
				}
			}
		}

		$this->deleteStorageTokens();
	}

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

	$query = array(
		"code" => $this->code,
		"grant_type" => "authorization_code",
		"redirect_uri" => $redirect_uri,
	);

	$h = new BitrixMainWebHttpClient(array(
		"socketTimeout" => $this->httpTimeout,
		"streamTimeout" => $this->httpTimeout,
	));
	$h->setAuthorization($this->appID, $this->appSecret);
	$h->setHeader('User-Agent', 'Bitrix'); // Mail.ru requires User-Agent to be set

	$result = $h->post(self::TOKEN_URL, $query);

	try
	{
		$arResult = BitrixMainWebJson::decode($result);
	}
	catch (BitrixMainArgumentException $e)
	{
		$arResult = array();
	}

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

		$_SESSION["OAUTH_DATA"] = array(
			"OATOKEN" => $this->access_token,
			"OATOKEN_EXPIRES" => $this->accessTokenExpires,
			"REFRESH_TOKEN" => $this->refresh_token
		);
		return true;
	}

	return false;
}