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