Скрипт обрабатывает исходящий из Битрикс24 вебхук. По идентификатору сделки получаем стадию сделки вебхуком, методом crm.deal.get, далее устанавливаем на сайте соответствующий статус заказа.
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
CModule::IncludeModule("sale");
function crmPostDeal($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;
}
if($_REQUEST['auth']['application_token'] == '0o3i00000cb000q600000z0') //проверка токена(у каждого свой)
{
$token = 'токен входящего вебхука';
$metod = "crm.deal.get";
$queryData = http_build_query(array(
'id' => $_REQUEST["data"]["FIELDS"]["ID"]
));
$result = crmPostDeal($token, $metod, $queryData);
$obj = json_decode($result);
$STATUS_ID = "";
if($obj->result->STAGE_ID == "NEW") //В обработке (принят)
{
$STATUS_ID = "N"; //Принят
}
if($obj->result->STAGE_ID == "DETAILS") //Уточнение информации
{
$STATUS_ID = "R"; // В обработке
}
if($obj->result->STAGE_ID == "3") //Отказ от заказа
{
$STATUS_ID = "Z"; //Отказ от заказа
}
if($obj->result->STAGE_ID == "4") //Самовывоз
{
$STATUS_ID = "E"; //Самовывоз
}
if($obj->result->STAGE_ID == "1") // Отгружен
{
$STATUS_ID = "G"; // Отгружен
}
if($obj->result->STAGE_ID == "WON") // Завершение сделки
{
$STATUS_ID = "F"; // Выполнен
}
//получаем по ID сделки
$arFilter = array('PROPERTY_VAL_BY_CODE_DEALCRM' => $_REQUEST["data"]["FIELDS"]["ID"]);
$rsOrders = CSaleOrder::GetList(array('ID' => 'DESC'), $arFilter, array('ID',"STATUS_ID"));
if ($arSales = $rsOrders->GetNext())
{
if($STATUS_ID && ($STATUS_ID != $arSales[STATUS_ID]))
{
CSaleOrder::StatusOrder($arSales['ID'], $STATUS_ID);
file_put_contents($_SERVER["DOCUMENT_ROOT"]."/log_dealUpdateFromCrm.txt",
date('d m o, H:i:s') ." ".serialize($arSales). ' STATUS_ID = ' .$STATUS_ID. PHP_EOL,
FILE_APPEND
);
}
if($STATUS_ID == "Z") // Отказ от заказа
{
$orderToChange = \Bitrix\Sale\Order::load($arSales["ID"]);
$orderToChange->setField("CANCELED","Y");
$orderToChange->save();
}
elseif($arSales[STATUS_ID] == "Z")
{
$orderToChange = \Bitrix\Sale\Order::load($arSales["ID"]);
$orderToChange->setField("CANCELED","N");
$orderToChange->save();
}
}
}
Теги: crm.deal.get, Битрикс24, вебхукТеги: crm.deal.get, Битрикс24, вебхук
13.03.2020