• Модуль: ml
  • Путь к файлу: ~/bitrix/modules/ml/lib/client.php
  • Класс: BitrixMlClient
  • Вызов: Client::performRequest
protected function performRequest($action, array $parameters)
{
	$result = new Result();

	$httpClient = new HttpClient([
		"socketTimeout" => 10,
		"streamTimeout" => 30,
		"disableSslVerification" => true
	]);

	$url = $this->serverAddress . "/api/?action=".$action;

	$request = [
		"action" => $action,
		"serializedParameters" => base64_encode(gzencode(Json::encode($parameters))),
	];

	//$request += $parameters;

	$request["BX_TYPE"] = static::getPortalType();
	$request["BX_LICENCE"] = static::getLicenseCode();
	$request["SERVER_NAME"] = static::getServerName();
	$request["BX_HASH"] = static::signRequest($request);

	$queryResult = $httpClient->query(HttpClient::HTTP_POST, $url, $request);

	if(!$queryResult)
	{
		$errors = $httpClient->getError();
		foreach ($errors as $code => $message)
		{
			$result->addError(new Error($message, $code));
		}
		return $result;
	}
	$returnCode = $httpClient->getStatus();
	if($returnCode != 200)
	{
		$result->addError(new Error("Server returned " . $returnCode . " code", "WRONG_SERVER_RESPONSE"));
		return $result;
	}

	$response = $httpClient->getResult();
	if($response == "")
	{
		$result->addError(new Error("Empty server response", "EMPTY_SERVER_RESPONSE"));
		return $result;
	}

	try
	{
		$parsedResponse = Json::decode($response);
	}
	catch (Exception $e)
	{
		$result->addError(new Error("Could not parse server response. Raw response: " . $response));
		return $result;
	}

	if($parsedResponse["status"] === "error")
	{
		foreach ($parsedResponse["errors"] as $error)
		{
			$result->addError(new Error($error["message"], $error["code"], $error["customData"]));
		}
	}
	else if(is_array($parsedResponse["data"]))
	{
		$result->setData($parsedResponse["data"]);
	}

	return $result;
}