• Модуль: socialservices
  • Путь к файлу: ~/bitrix/modules/socialservices/classes/general/bitrix24net.php
  • Класс: CBitrix24NetOAuthInterface
  • Вызов: CBitrix24NetOAuthInterface::getNewAccessToken
public function getNewAccessToken($refreshToken = false, $userId = 0, $save = false, $scope = array())
{
	if($this->appID == false || $this->appSecret == false)
		return false;

	if($refreshToken == false)
		$refreshToken = $this->refresh_token;

	if($scope != null)
		$this->addScope($scope);

	$http = new BitrixMainWebHttpClient(array(
		'socketTimeout' => $this->httpTimeout,
		'streamTimeout' => $this->httpTimeout,
	));

	$result = $http->get($this->networkNode . self::TOKEN_URL . '?' . http_build_query([
		'client_id' => $this->appID,
		'client_secret' => $this->appSecret,
		'refresh_token' => $refreshToken,
		'scope' => implode(',',$this->getScope()),
		'grant_type' => 'refresh_token',
	]));

	try
	{
		$arResult = Json::decode($result);
	}
	catch(BitrixMainArgumentException $e)
	{
		$arResult = array("error" => "ERROR_RESPONSE", "error_description" => "Wrong response from Network");
	}

	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"];

		if($save && intval($userId) > 0)
		{
			$dbSocservUser = UserTable::getList([
				'filter' => [
					"=USER_ID" => intval($userId),
					"=EXTERNAL_AUTH_ID" => CSocServBitrix24Net::ID
				],
				'select' => ['ID']
			]);

			$arOauth = $dbSocservUser->fetch();
			if($arOauth)
			{
				UserTable::update(
					$arOauth["ID"], array(
						"OATOKEN" => $this->access_token,
						"OATOKEN_EXPIRES" => $this->accessTokenExpires,
						"REFRESH_TOKEN" => $this->refresh_token,
					)
				);
			}
		}

		return true;
	}
	return false;
}