яндекс турбо страницы

Как перехватить заказ из Турбо-магазина в Bitrix

Сегодня мы с вами рассмотрим как можно перехватить информацию о заказах в Турбо Магазине от Яндекса. Сайт использует CMS Bitrix и для перехвата мы будет использовать родной D7.

И так для начала нам нужно понять логику! Мы будем ставить обработчик событий создания заказа. При очередном создание заказа у нас будет запускаться функция, которая проверяет «Источник заказа» и отправляет сообщение если это заказ «Турбо».

В Bitrix вы можете использовать бесплатный модуль «Яндекс маркет для бизнеса» который подключает Яндекс турбо магазин.

В данной записи мы с вами не будем разговаривать о том как подключить турбо страницы, так как вы это можете прочитать в «Вебмастере».

Сегодня мы с вами поговорим о том как перехватить заказ когда он создан, чтобы отправить сообщение менеджеру в телеграмм или отправить заказ в CRM.

Скрипт для получения информации о Турбо заказе

Всю работу мы будем проводить в init.php. Здесь мы подключаем основные модули и создаём обработчик событий.

use Bitrix\Main;
use Bitrix\Sale;

/* создаём обработчик событий создания заказа */
Main\EventManager::getInstance()->addEventHandler(
    'sale',
    'OnSaleOrderSaved', /* указываем нашу функцию */
    'myFunction'
);

/* функция которая будет запускаться после создания заказа */
function myFunction(Main\Event $event) {
/* здесь мы будем прописывать основные моменты */
}

Теперь получим информацию по созданному заказу. Данный код нам нужно прописать в функцию которую мы создали выше. Здесь мы получаем id нашего заказа, цену и дату создания.

$order = $event->getParameter("ENTITY");
    
/* получаем id созданного заказа */
$idOrder = $order->getId();
/* цена */
$price = $order->getPrice();
/* дата создания */
$dateOrder = $order->getDateInsert();

Ниже будем доставать всю оставшуюся информацию по заказу. Нам нужна будет информация о контакта указанных при оформление заказа, о товарах которые были заказаны, о описание заказа и т.д.

Для этого мы прописываем ниже, в той же функции следующий код.

/* делаем запрос и вытаскиваем информацию по id заказа */
/* $idOrder - ранее полученный идентификатор заказа */
$order = \Bitrix\Sale\Order::load($idOrder);

/* проверяем есть ли такой заказ */
if(!empty($order)) {
   /* получаем информацию о полях "Свойства заказа" */
   $tradeBindingCollection = $order->getTradeBindingCollection();

   /** @var Bitrix\Sale\TradeBindingEntity $item */
   /* получаем значение свойства "Источник заказа" */
   foreach ($tradeBindingCollection as $item) {

       /* записываем id источника заказа в переменную $tpId */
       $tpId = $item->getField('TRADING_PLATFORM_ID');
   }

   /* проверяем "это турбо-заказ"? */
   if($tpId == 2) {
   ...
   }

}

В моём случае источник заказа «Яндекс Турбо» имеет id = 2. Поэтому ниже мы будем прописывать проверку. Вы можете на отдельной странице получить товар, который вы точно знаете что пришёл с «Турбо магазина» и проверить его значение свойства «Источник заказа».

Отлично! Теперь у нас остался последний этап, нам нужно получить оставшуюся информацию по заказу.

/* получаем корзину */
$basket = $order->getBasket();
$basketItems = $basket->getBasketItems();

/* пробегаемся по значениям корзины и записываем информацию о товарах */
$i = 0;
foreach($basketItems as $basketItem) {
  $basketPropertyCollection = $basketItem->getPropertyCollection();
        
  $arrInfoBasket[$i]["NAME"] = $basketItem->getField('NAME')." ".$basketItem->getQuantity()."шт.";
  $arrInfoBasket[$i]["PRICE"] = $basketItem->getPrice();
        
  foreach($basketPropertyCollection->getPropertyValues() as $key=>$prop) {
    $arrInfoBasket[$i]["PROP"][$key]["NAME"] = $prop["NAME"];
    $arrInfoBasket[$i]["PROP"][$key]["VALUE"] = $prop["VALUE"];
  }
  $i++;
}

/* создаём массив названий свойств которые нам НЕ НУЖНЫ*/
$arrException = [
   "CATALOG.XML_ID",
   "PRODUCT.XML_ID"
];

/* создаём строку с перечисленными товара которые участвуют в заказе */
$descProduct .= "ОПИСАНИЕ ЗАКАЗА \n";
            
foreach($arrInfoBasket as $product) {
  $descProduct .= $product["NAME"]."\n";
  $descProduct .= "Цена - " . $product["PRICE"]."р \n";
  foreach($product["PROP"] as $key=>$prop) {
     /* проверяем не находится ли это свойство в исключение */
     if(!in_array($key, $arrException)) {
         $descProduct .= $prop["NAME"] ." - ". $prop["VALUE"] ."\n";
     }
   }
   $descProduct .= "\n";
}

/* ПОЛУЧАЕМ ИНФОРМАЦИЮ ИЗ ПОЛЕЙ ЗАЯВКИ */
$propertyCollection = $order->getPropertyCollection();
$arrFields = $propertyCollection->getArray();

foreach($arrFields["properties"] as $field) {
  if($field["VALUE"][0]) {
    $strInfoFields .= $field["NAME"]." - ".$field["VALUE"][0]."\n";
  }
}

Далее вы можете работать с этими данными. Вы можете их передавать в сообщение или использовать для заполнения полей CRM системы.

В моём случаем я отправляю эту информацию в телеграмм менеджеров + оформляю заявку в amoCRM
У меня есть код готовых интеграций которые вы можете поместить на свой сайт и без каких либо затруднений подключить их самостоятельно или я могу это сделать за вас

Отправка сообщений в Телеграммhttps://prog-time.ru/telegram_integration/

/* В ИТОГЕ В САМОМ КОНЦЕ ВЫ ПОЛУЧАЕМ СЛЕДУЮЩИЕ СВОЙСТВА */
$idOrder - номер заказа
$price - цена товара
$dateOrder - дата создания заказа
$textMessage - описание заказа

$textMessage - информация о покупателе
На этом всё!
Если у вас есть вопросы, пишите их в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
В ней мы делимся своим опытом с другими начинающими программистами, поэтому обязательно ответим на ваш вопрос.
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime