• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/classes/general/apple.php
  • Класс: CAppleInterface
  • Вызов: CAppleInterface::GetAccessToken
public function GetAccessToken($redirect_uri = ''): bool
{
	$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;
			}

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

		$this->deleteStorageTokens();
	}

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

	//case for sign in from Bitrix24 application on iOS device
	$request = BitrixMainContext::getCurrent()->getRequest();
	$requestData = $request->toArray();
	if (
		$requestData['service'] === self::SERVICE_ID
		&& (
			$requestData['platform'] === 'ios'
			|| (empty($requestData['platform']) && mb_strpos($request->getUserAgent(), 'Darwin') !== false)
		)
	)
	{
		$this->appID = self::BITRIX_APP_BUNDLE_ID;
	}

	$query = [
		'code' => $this->code,
		'grant_type' => 'authorization_code',
		'client_secret' => $this->getClientSecret(),
		'client_id' => $this->appID,
		'redirect_uri' => $redirect_uri,
	];

	$httpClient = new HttpClient([
		'socketTimeout' => $this->httpTimeout,
		'streamTimeout' => $this->httpTimeout,
	]);

	$result = $httpClient->post(self::TOKEN_URL, $query);
	try
	{
		$result = BitrixMainWebJson::decode($result);
	}
	catch (BitrixMainArgumentException $e)
	{
		$result = [];
	}

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

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

	return false;
}