Сегодня мы с вами рассмотрим как можно перехватить информацию о заказах в Турбо Магазине от Яндекса. Сайт использует 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 - информация о покупателе