- Модуль: messageservice
- Путь к файлу: ~/bitrix/modules/messageservice/lib/Providers/Edna/SMS/ExternalSender.php
- Класс: Bitrix\MessageService\Providers\Edna\SMS\ExternalSender
- Вызов: ExternalSender::callExternalMethod
public function callExternalMethod(string $method, ?array $requestParams = null, string $httpMethod = ''): HttpRequestResult
{
if ($this->apiKey === '')
{
$result = new HttpRequestResult();
$result->addError(new Error('Missing API key when requesting a service.'));
return $result;
}
$url = $this->apiEndpoint . $method;
$queryMethod = HttpClient::HTTP_GET;
$httpClient = new HttpClient([
'socketTimeout' => $this->socketTimeout,
'streamTimeout' => $this->streamTimeout,
'waitResponse' => true,
'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 (is_array($requestParams))
{
$queryMethod = HttpClient::HTTP_POST;
$requestParams = Json::encode($requestParams);
}
$result = new HttpRequestResult();
$result->setHttpRequest(new DTO\Request([
'method' => $queryMethod,
'uri' => $url,
'headers' => method_exists($httpClient, 'getRequestHeaders') ? $httpClient->getRequestHeaders()->toArray() : [],
'body' => $requestParams
]));
$answer = [];
$errorInfo = [];
if ($httpClient->query($queryMethod, $url, $requestParams))
{
$answer = $this->parseExternalAnswer($httpClient->getResult());
if ($httpClient->getStatus() !== 200)
{
$errorInfo = [
'code' => $httpClient->getStatus(),
'error' => $this->getMessageByErrorCode('error-' . $httpClient->getStatus()),
];
}
}
else
{
$error = $httpClient->getError();
$errorInfo = [
'code' => key($error),
'error' => current($error),
];
}
$result->setHttpResponse(new DTO\Response([
'statusCode' => $httpClient->getStatus(),
'headers' => $httpClient->getHeaders()->toArray(),
'body' => $httpClient->getResult(),
'error' => Util::getHttpClientErrorString($httpClient)
]));
$result->setData($answer);
if (array_key_exists('code', $errorInfo) && $errorInfo['code'] !== 'ok')
{
$result->addError(new Error($errorInfo['error'], $errorInfo['code'], $errorInfo));
}
return $result;
}