- Модуль: 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;
}