События при изменении статуса заказа, оплаты заказа, отмены заказа. Создают вебхук в Битрикс24 для установки соответствующих стадий сделок в CRM.
function fn_Post2crm($token, $metod, $queryData){
$queryUrl = 'https://[ваше_название].bitrix24.ru/rest/[идентификатор_пользователя]/'.$token.'/'.$metod;
// обращаемся к Битрикс24 при помощи функции curl_exec
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $queryUrl,
CURLOPT_POSTFIELDS => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
// Изменение статуса заказа
AddEventHandler("sale", 'OnSaleStatusOrder', 'changeStatus');
function changeStatus($order_id, $status) {
$db_props = CSaleOrderPropsValue::GetList(array(), array("ORDER_ID" => $order_id, "ORDER_PROPS_ID"=>10) );
if ($arProps = $db_props->Fetch())
{
$STATUS_ID = false;
if($status == "R") $STATUS_ID = "DETAILS";
if($status == "N") $STATUS_ID = "NEW";
if($status == "Z") $STATUS_ID = "3";
if($status == "E") $STATUS_ID = "4";
if($status == "G") $STATUS_ID = "1";
if($status == "F"){
$STATUS_ID = "WON";
// Проверим, если заказ оплачен и статус выполнен, в CRM устанавливаем этап сделки Заказ оплачен
$db_sales = CSaleOrder::GetList(array("DATE_INSERT" => "ASC"), Array("ID" => $order_id));
if ($ar_sales = $db_sales->Fetch())
{
if($ar_sales[PAYED] == "Y")
{
$STATUS_ID = "2";
}
}
}
if($STATUS_ID)
{
$token = 'токен входящего вебхука';
$metod = "crm.deal.update";
$queryData = http_build_query(array(
'id' => $arProps[VALUE],
'fields' => array(
"STAGE_ID" => $STATUS_ID,
),
'params' => array("")
));
$r = fn_Post2crm($token, $metod, $queryData);
file_put_contents($_SERVER["DOCUMENT_ROOT"]."/log_changeStatus.txt",
date('d m o, H:i:s') ." DEAL_ID = ".$arProps[VALUE]. ' ORDER_ID = '.$order_id. ' - '.$status.' '." STAGE_ID =". $STATUS_ID ." ".serialize($r). PHP_EOL,
FILE_APPEND
);
}
}
}
// Изменение статуса заказа
AddEventHandler("sale", 'OnSalePayOrder', 'changePayOrder');
function changePayOrder($order_id, $val)
{
$db_props = CSaleOrderPropsValue::GetList(array(), array("ORDER_ID" => $order_id, "ORDER_PROPS_ID"=>10) );
if ($arProps = $db_props->Fetch())
{
$STATUS_ID = false;
if($val == "Y")
{
$STATUS_ID = "2"; // стадия сделки - Заказ оплачен
}
elseif($val == "N")
{
$STATUS_ID = "NEW";
}
if($STATUS_ID != false)
{
$token = 'токен входящего вебхука';
$metod = "crm.deal.update";
$queryData = http_build_query(array(
'id' => $arProps[VALUE],
'fields' => array(
"STAGE_ID" => $STATUS_ID,
),
'params' => array("")
));
$r = fn_Post2crm($token, $metod, $queryData);
file_put_contents($_SERVER["DOCUMENT_ROOT"]."/log_changePayOrder.txt",
date('d m o, H:i:s') ." DEAL_ID = ".$arProps[VALUE]. ' ORDER_ID = '.$order_id. ' - '.$status.' '." STAGE_ID =". $STATUS_ID ." ".serialize($r). PHP_EOL,
FILE_APPEND
);
}
}
}
// Отмена заказа на сайте
AddEventHandler("sale", 'OnSaleCancelOrder', 'changeCancelOrder');
function changeCancelOrder($order_id, $value, $description)
{
$db_props = CSaleOrderPropsValue::GetList(array(), array("ORDER_ID" => $order_id, "ORDER_PROPS_ID"=>10) );
if ($arProps = $db_props->Fetch())
{
$STATUS_ID = false;
if($value == "Y")
{
$STATUS_ID = "3"; // стадия сделки - Отказ от заказа
}
elseif($value == "N")
{
$STATUS_ID = "NEW";
}
if($STATUS_ID != false)
{
$text = '';
if(strlen($description)>0) $text = "Причина отмены заказа: ".$description;
$token = 'токен входящего вебхука';
$metod = "crm.deal.update";
$queryData = http_build_query(array(
'id' => $arProps[VALUE],
'fields' => array(
"STAGE_ID" => $STATUS_ID,
"UF_CRM_10000000000" => $text." ".$STATUS_ID
),
'params' => array("")
));
$r = fn_Post2crm($token, $metod, $queryData);
}
}
}
Теги: crm.deal.update, Битрикс24, вебхук, событие изменения статуса заказа, событие оплаты заказа, событие отмены заказа