• Модуль: messageservice
  • Путь к файлу: ~/bitrix/modules/messageservice/lib/sender/sms/dummyhttp.php
  • Класс: BitrixMessageServiceSenderSmsDummyHttp
  • Вызов: DummyHttp::sendMessage
public function sendMessage(array $messageFields): SenderResultSendMessage
{
	$messageFields['MESSAGE_BODY'] = $this->prepareMessageBodyForSend($messageFields['MESSAGE_BODY']);
	$result = new SenderResultSendMessage();
	$host = $this->getOption('remoteHost');
	if (!$host)
	{
		return $result->addError(new Error('Provider is not configured'));
	}
	$requestBody = Json::encode($messageFields);

	$result->setServiceRequest(new DTORequest([
		'method' => HttpClient::HTTP_POST,
		'uri' => $host,
		'body' => $requestBody,
	]));
	$httpClient = new HttpClient();
	$queryResult = $httpClient->query(HttpClient::HTTP_POST, $host, $requestBody);
	if (!$queryResult)
	{
		$error = $httpClient->getError();
		$errorCode = array_key_first($error);
		$result->setServiceResponse(new DTOResponse([
			'error' => SenderUtil::getHttpClientErrorString($httpClient)
		]));
		return $result->addError(new Error($error[$errorCode], $errorCode));
	}

	$result->setServiceResponse(new DTOResponse([
		'statusCode' => $httpClient->getStatus(),
		'headers' => $httpClient->getHeaders()->toArray(),
		'body' => $httpClient->getResult(),
	]));
	$responseCode = $httpClient->getStatus();
	if ($responseCode !== 200)
	{
		return $result->addError(new Error("HTTP response code {$responseCode}", "HTTP_{$responseCode}"));
	}

	$responseBody = $httpClient->getResult();
	if ($responseBody == '')
	{
		return $result->addError(new Error("Empty response", "EMPTY_RESPONSE"));
	}

	try
	{
		$decoded = Json::decode($responseBody);
		$result->setExternalId($decoded['message_id']);
		$result->setAccepted();
	}
	catch (Throwable $e)
	{
		$result->addError(new Error("JSON decode error", "JSON_ERROR"));
	}
	return $result;
}