$queryData = [
'fields' => [
"TITLE" => "lid 1",
"NAME" => "name name",
'PHONE' => [
[
"VALUE" => "654654",
"VALUE_TYPE" => "WORK"
]
]
],
'params' => ["REGISTER_SONET_EVENT" => "Y"]
];
echo sendToBitrix('crm.lead.add', $queryData);
function sendToBitrix( $method, $data )
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://**********/'.$method,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>json_encode($data),
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
),
));
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
// Выключаем кеширование, запоминая предыдущее значение
$oldCacheTime = \CCalendar::CacheTime();
\CCalendar::CacheTime(0);
// ... Делаем необходимые действия
// Возвращаем все как было
\CCalendar::CacheTime($oldCacheTime);
unset($oldCacheTime);
use \Bitrix\Main,
\Bitrix\Tasks
;
/**
* Оборачиваем наш код в try-catch потому что мы не хотим
* чтобы упавшее действие подвесело нам ход бизнес-процесса.
*
* Обращаю внимание: в catch блоке ловим именно Throwable, а не Exception.
*/
try
{
/**
* Подключаем модуль Задачи (tasks) через requireModule
* он в случае отсутствия модуля выкинет нам Exception
*/
Main\Loader::requireModule('tasks');
/**
* Лучше избегать магических подстановок в c использованием фигурных скобок
* Если там по какой-то причине будет экранирующий символ это больно ударит по системе
*
* Для этого используем 2 хака:
* 1. Используем ParseValue метод, который из подобного синтаксиса достанет значение
* 2. Чтобы мы сами не попали в автозамену регулярок разделим выражение так, чтобы мы
* не прошли по маске
*
* Ну и само-собой выражения на русском не парсятся, поэтому придется использовать
* старые выражения из технических полей.
*/
$actionUserId = (int) mb_substr(
$this->ParseValue("{"."=Document:AssigneById}"),
5
);
if ( empty($actionUserId) )
{
throw new \Exception("Employee identifier is empty!");
}
$taskId = (int) $this->ParseValue("{"."=Template:TaskId}");
if ( empty($taskId) )
{
throw new \Exception("Task identifier is empty!");
}
/**
* Воспользуемся недокументированной функцией по обновлению задачи
* В целом она дает то же самое - т.е. меняет статус, но дополнительно
* метод вызывает необходимые push-уведомления, записи в логи, очистки
* кешей и т.п.
*/
$updateData = Tasks\Manager\Task::update(
$actionUserId,
$taskId,
[
'STATUS' => \CTasks::STATE_PENDING
]
);
if ( $updateData['ERRORS']->checkHasErrors() )
{
throw new \Exception( $updateData['ERRORS']->getMessages() );
}
/* Сигнализируем что все ок */
$this->WriteToTrackingService(
"Task renewed",
0,
\CBPTrackingType::Custom
);
}
catch( \Throwable $e )
{
/* Если что-то поймали - запишем в лог */
$this->WriteToTrackingService(
sprintf(
"Error '%s' in file %s on line %i",
$e->getMessage(),
$e->getFile(),
$e->getLine(),
),
0,
\CBPTrackingType::Error
);
}
Из интернет магазина заказыв летят в битрикс24.
use \Bitrix\Main,
\Bitrix\Crm;
Main\Loader::requireModule('crm');
$entityRequisite = Crm\EntityRequisite::getSingleInstance();
$requisiteList = $entityRequisite->getList([
'select' => ['*', 'UF_*'],
'filter' => [
'=CREATED_BY_ID' => 1,
'><DATE_CREATE' => [
Main\Type\DateTime::createFromTimestamp( strtotime("28.09.2022 00:00:00") ),
Main\Type\DateTime::createFromTimestamp( strtotime("01.10.2022 00:00:00") )
]
],
]);
foreach ($requisiteList as $requisite)
{
var_dump($requisite);
}
Если что, коробок Битрикс.
{"error":"NO_AUTH_FOUND","error_description":"Wrong authorization data"}
/home/bitrix/www/bitrix/activities/bitrix/crmgetpaymenturlactivity/crmgetpaymenturlactivity.php
use \Bitrix\Main,
\Bitrix\Salescenter\Builder,
\Bitrix\Salescenter\Integration
;
/**
* @var int
*/
$dealId = 1;
try
{
Main\Loader::requireModule('crm');
$deal = \CCrmDeal::GetByID($dealId, false);
if (!$deal)
{
throw new \Exception("Deal not found");
}
$builder = Builder\Manager::getBuilder(
Builder\SettingsContainer::BUILDER_SCENARIO_PAYMENT
);
$builder->build(
$this->getBuilderData($deal)
);
$order = $builder->getOrder();
$r = $order->save();
if (!$r->isSuccess())
{
throw new \Exception("Order update error:".implode(', ', $r->getErrorMessages()));
}
$foundPayment = null;
foreach ($order->getPaymentCollection() as $payment)
{
$foundPayment = $payment;
}
if ( is_null($foundPayment) )
{
throw new \Exception("Payment not found");
}
$urlInfo = Integration\LandingManager::getInstance()->getUrlInfoByOrder(
$payment->getOrder(),
['paymentId' => $payment->getId()]
);
// Payment url: $urlInfo['shortUrl']
}
catch( \Throwable $e )
{
var_dump($e);
}
Возможно ли с помощью Push&Pull обновить страницу лида/сделки, которую просматривает пользователь?