- Модуль: messageservice
- Путь к файлу: ~/bitrix/modules/messageservice/lib/sender/sms/twilio.php
- Класс: BitrixMessageServiceSenderSmsTwilio
- Вызов: Twilio::callExternalMethod
private function callExternalMethod($httpMethod, $apiMethod, array $params = array(), $sid = null, $token = null): SenderResultHttpRequestResult
{
$url = $this->getRequestUrl($apiMethod);
$httpClient = new HttpClient(array(
"socketTimeout" => $this->socketTimeout,
"streamTimeout" => $this->streamTimeout,
"waitResponse" => true,
));
$httpClient->setHeader('User-Agent', 'Bitrix24');
$httpClient->setCharset('UTF-8');
if (!$sid || !$token)
{
$sid = $this->getOption('account_sid');
$token = $this->getOption('account_token');
}
$httpClient->setAuthorization($sid, $token);
$isUtf = Application::getInstance()->isUtfMode();
if (!$isUtf)
{
$params = BitrixMainTextEncoding::convertEncoding($params, SITE_CHARSET, 'UTF-8');
}
$result = new SenderResultHttpRequestResult();
$answer = array();
$result->setHttpRequest(new MessageServiceDTORequest([
'method' => HttpClient::HTTP_POST,
'uri' => $url,
'headers' => method_exists($httpClient, 'getRequestHeaders') ? $httpClient->getRequestHeaders()->toArray() : [],
'body' => $params,
]));
if ($httpClient->query($httpMethod, $url, $params))
{
try
{
$answer = Json::decode($httpClient->getResult());
}
catch (ArgumentException $e)
{
$result->addError(new Error('Service error'));
}
$httpStatus = $httpClient->getStatus();
if ($httpStatus >= 400)
{
$errorInformant = new ErrorInformant($answer['message'], $answer['code'], $answer['more_info'], $httpStatus);
$result->addError($errorInformant->getError());
// if (isset($answer['message']) && isset($answer['code']))
// {
// $result->addError(new Error($answer['message'], $answer['code']));
// }
// else
// {
// $result->addError(new Error('Service error (HTTP Status '.$httpStatus.')'));
// }
}
}
$result->setHttpResponse(new MessageServiceDTOResponse([
'statusCode' => $httpClient->getStatus(),
'headers' => $httpClient->getHeaders()->toArray(),
'body' => $httpClient->getResult(),
'error' => SenderUtil::getHttpClientErrorString($httpClient)
]));
if ($result->isSuccess())
{
$result->setData($answer);
}
return $result;
}