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