- Модуль: pull
- Путь к файлу: ~/bitrix/modules/pull/classes/general/pull_channel.php
- Класс: CPullChannel
- Вызов: CPullChannel::SendCommand
static function SendCommand($channelId, $message, $options = array())
{
if (!is_array($channelId))
$channelId = Array($channelId);
$channelId = implode('/', array_unique($channelId));
if ($channelId == '' || $message == '')
return false;
$defaultOptions = array(
"method" => "POST",
"timeout" => 5,
"dont_wait_answer" => true
);
$options = array_merge($defaultOptions, $options);
if (!in_array($options["method"], Array('POST', 'GET')))
return false;
$nginx_error = COption::GetOptionString("pull", "nginx_error", "N");
if ($nginx_error != "N")
{
$nginx_error = unserialize($nginx_error, ["allowed_classes" => false]);
if (intval($nginx_error['date'])+120 < time())
{
COption::SetOptionString("pull", "nginx_error", "N");
CAdminNotify::DeleteByTag("PULL_ERROR_SEND");
$nginx_error = "N";
}
else if ($nginx_error['count'] >= 10)
{
$ar = Array(
"MESSAGE" => GetMessage('PULL_ERROR_SEND'),
"TAG" => "PULL_ERROR_SEND",
"MODULE_ID" => "pull",
);
CAdminNotify::Add($ar);
return false;
}
}
$postdata = CHTTP::PrepareData($message);
$httpClient = new BitrixMainWebHttpClient([
"socketTimeout" => (int)$options["timeout"],
"streamTimeout" => (int)$options["timeout"],
"waitResponse" => !$options["dont_wait_answer"]
]);
if ((int)$options["expiry"])
{
$httpClient->setHeader("Message-Expiry", (int)$options["expiry"]);
}
$url = BitrixPullConfig::getPublishUrl($channelId);
if(CPullOptions::IsServerShared())
{
$signature = static::GetSignature($postdata);
$url = CHTTP::urlAddParams($url, ["signature" => $signature]);
}
$httpClient->disableSslVerification();//todo: remove
$sendResult = $httpClient->query($options["method"], $url, $postdata);
if ($sendResult)
{
$result = $options["dont_wait_answer"] ? '{}': $httpClient->getResult();
}
else
{
if ($nginx_error == "N")
{
$nginx_error = Array(
'count' => 1,
'date' => time(),
'date_increment' => time(),
);
}
else if (intval($nginx_error['date_increment'])+1 < time())
{
$nginx_error['count'] = intval($nginx_error['count'])+1;
$nginx_error['date_increment'] = time();
}
COption::SetOptionString("pull", "nginx_error", serialize($nginx_error));
$result = false;
}
return $result;
}