• Модуль: messageservice
  • Путь к файлу: ~/bitrix/modules/messageservice/lib/sender/sms/rest.php
  • Класс: BitrixMessageServiceSenderSmsRest
  • Вызов: Rest::sendMessage
public function sendMessage(array $messageFields): ResultSendMessage
{
	$sendResult = new ResultSendMessage();

	if (!$this->canUse())
	{
		$sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_APP_NOT_FOUND')));
		return $sendResult;
	}

	[$appId, $code] = explode('|', $messageFields['MESSAGE_FROM']);
	$restSender = null;

	if ($appId && $code)
	{
		$restSender = RestAppTable::getList(
			['filter' =>
				[
					'=APP_ID' => $appId,
					'=CODE' => $code
				]
			]
		)->fetch();
	}

	if (!$restSender)
	{
		$sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_APP_NOT_FOUND')));
		return $sendResult;
	}
	/*
	$session = BitrixRestEventSession::get();
	if(!$session)
	{
		$sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_SESSION')));
		return $sendResult;
	}
	*/
	$dbRes = BitrixRestAppTable::getList([
		'filter' => [
			'=CLIENT_ID' => $restSender['APP_ID'],
		]
	]);
	$application = $dbRes->fetch();

	if (!$application)
	{
		$sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_APP_NOT_FOUND')));
		return $sendResult;
	}

	$appStatus = BitrixRestAppTable::getAppStatusInfo($application, '');
	if($appStatus['PAYMENT_ALLOW'] === 'N')
	{
		$sendResult->addError(new Error(Loc::getMessage('MESSAGESERVICE_SENDER_SMS_REST_ERROR_PAYMENT_ALLOW')));
		return $sendResult;
	}

	$auth = $messageFields['AUTHOR_ID'] > 0 ? [
		'CODE' => $restSender['CODE'],
		BitrixRestEventSession::PARAM_SESSION => BitrixRestEventSession::get(),
		BitrixRestOAuthAuth::PARAM_LOCAL_USER => $messageFields['AUTHOR_ID'],
		"application_token" => CRestUtil::getApplicationToken($application),
	] : [];

	$messageId = $messageFields['EXTERNAL_ID'] ?? 0;
	if (!$messageId)
	{
		$messageId = md5(($messageFields['ID'] ?? 0).'|'.uniqid());
		$this->setExternalMessageId((int)$messageFields['ID'], $messageId);
	}

	$restData = is_array($messageFields['MESSAGE_HEADERS']) ? $messageFields['MESSAGE_HEADERS'] : array();
	//compatible parameters
	$restData['properties'] = [
		'phone_number' => $messageFields['MESSAGE_TO'],
		'message_text' => $this->prepareMessageBodyForSend($messageFields['MESSAGE_BODY']),
	];
	$restData['type'] = $restSender['TYPE'];
	$restData['code'] = $restSender['CODE'];
	$restData['message_id'] = $messageId;
	$restData['message_to'] = $messageFields['MESSAGE_TO'];
	$restData['message_body'] = $this->prepareMessageBodyForSend($messageFields['MESSAGE_BODY']);
	$restData['ts'] = time();

	$queryItems = [
		Sqs::queryItem(
			$restSender['APP_ID'],
			$restSender['HANDLER'],
			$restData,
			$auth,
			[
				"sendAuth" => (bool)$auth,
				"sendRefreshToken" => false,
				"category" => Sqs::CATEGORY_DEFAULT,
			]
		),
	];

	BitrixRestOAuthService::getEngine()->getClient()->sendEvent($queryItems);
	$sendResult->setExternalId($messageId);
	$sendResult->setStatus(MessageServiceMessageStatus::SENT);

	if ($application['CODE'])
	{
		AddEventToStatFile(
			'messageservice',
			'sendRest' . $restSender['TYPE'],
			uniqid($application['CODE'], true),
			$application['CODE']
		);
	}

	if (is_callable(['BitrixRestUsageStatTable', 'logMessage']))
	{
		BitrixRestUsageStatTable::logMessage($application['CLIENT_ID'], $restSender['TYPE']);
		BitrixRestUsageStatTable::finalize();
	}

	return $sendResult;
}