• Модуль: messageservice
  • Путь к файлу: ~/bitrix/modules/messageservice/lib/Providers/Edna/WhatsApp/ExternalSender.php
  • Класс: BitrixMessageServiceProvidersEdnaWhatsAppconstants
  • Вызов: constants::callExternalMethod
public function callExternalMethod(string $method, ?array $requestParams = null, string $httpMethod = ''): HttpRequestResult
{
	if ($this->apiKey === '')
	{
		$result = new HttpRequestResult();
		$result->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_EDNARU_ERROR_SYSTEM')));

		return $result;
	}

	$url = $this->apiEndpoint . $method;
	$queryMethod = HttpClient::HTTP_GET;

	$httpClient = new HttpClient([
		'socketTimeout' => $this->socketTimeout,
		'streamTimeout' => $this->streamTimeout,
		'waitResponse' => static::WAIT_RESPONSE,
		'version' => HttpClient::HTTP_1_1,
	]);
	$httpClient->setHeader('User-Agent', static::USER_AGENT);
	$httpClient->setHeader('Content-type', static::CONTENT_TYPE);
	$httpClient->setHeader('X-API-KEY', $this->apiKey);
	$httpClient->setCharset(static::CHARSET);


	if (isset($requestParams) && $httpMethod !== HttpClient::HTTP_GET)
	{
		$queryMethod = HttpClient::HTTP_POST;
	}
	$queryMethod = $httpMethod ?: $queryMethod;

	if (isset($requestParams) && $queryMethod === HttpClient::HTTP_POST)
	{
		$requestParams = Json::encode($this->convertRequestParams($requestParams));
	}

	if (isset($requestParams) && $queryMethod === HttpClient::HTTP_GET)
	{
		$url .= '?' . http_build_query($requestParams);
	}

	$result = new HttpRequestResult();
	$result->setHttpRequest(new Request([
		'method' => $queryMethod,
		'uri' => $url,
		'headers' => method_exists($httpClient, 'getRequestHeaders') ? $httpClient->getRequestHeaders()->toArray() : [],
		'body' => $requestParams,
	]));

	if ($httpClient->query($queryMethod, $url, $requestParams))
	{
		$response = $this->parseExternalResponse($httpClient->getResult());
	}
	else
	{
		$result->setHttpResponse(new Response([
			'error' => Util::getHttpClientErrorString($httpClient)
		]));
		$error = $httpClient->getError();
		$response = ['code' => current($error)];
	}

	$result->setHttpResponse(new Response([
		'statusCode' => $httpClient->getStatus(),
		'headers' => $httpClient->getHeaders()->toArray(),
		'body' => $httpClient->getResult(),
	]));

	if (!$this->checkResponse($response))
	{
		$errorMessage = '';

		if (isset($response['title']))
		{
			$errorMessage = $response['title'];
		}

		if (isset($response['code']))
		{
			$errorMessage = $this->getErrorMessageByCode($response['code']);
		}

		if (isset($response['detail']))
		{
			$errorMessage = $response['detail'];
		}

		$result->addError(new Error($errorMessage));

		return $result;
	}
	$result->setData($response);

	return $result;
}