// ========== ОТПРАВКА ЗАКАЗОВ В CRM (ФИНАЛЬНАЯ ВЕРСИЯ) ========== AddEventHandler('sale', 'OnSaleOrderSaved', 'SendOrderToCRMFinal'); function SendOrderToCRMFinal(Bitrix\Main\Event $event) { $order = $event->getParameter('ENTITY'); if (!$order || !$order->isSaved()) { return; } // Отправляем в фоне, чтобы не тормозить заказ и не влиять на почту \Bitrix\Main\Application::getInstance()->addBackgroundJob( ['CRMHandlerFinal', 'processOrder'], [$order->getId()], \Bitrix\Main\Application::JOB_PRIORITY_LOW ); } class CRMHandlerFinal { public static function processOrder($orderId) { try { $order = \Bitrix\Sale\Order::load($orderId); if (!$order) { self::log("Заказ {$orderId} не найден"); return; } // Собираем свойства заказа $propertyCollection = $order->getPropertyCollection(); $props = []; foreach ($propertyCollection as $property) { $code = $property->getField('CODE'); $value = $property->getValue(); if ($code && $value) { $props[$code] = $value; } } self::log("Заказ {$orderId}, свойства: " . print_r($props, true)); // Базовый URL вебхука (без параметров) $baseUrl = 'https://smarthook.redhamsites.ru/9146f32c-51b5-4bf7-bb10-c707b307461a/286/0/1/'; // Формируем параметры для подстановки вместо ##SourceValue## $params = [ // Телефон и Email (общие параметры) 'Phone' => $props['PHONE'] ?? '', 'Email' => $props['EMAIL'] ?? '', // Поля контакта 'Contact[NAME]' => $props['ORDER_USER'] ?? '', 'Contact[SECOND_NAME]' => '', 'Contact[LAST_NAME]' => '', // Поля сделки (те, что в вебхуке) 'Deal[UF_CRM_1741023640349]' => $props['ADDRESS'] ?? '', // Адрес доставки 'Deal[UF_CRM_1741026027722]' => $props['DATE_ORDERS_CUS'] ?? '', // Дата, когда нужен заказ 'Deal[UF_CRM_1753884718308]' => '', // Дополнительное поле 'Deal[UF_CRM_1758704380]' => $props['ORDER_SURPRIZE_CU'] ?? '', // Заказ сюрпризом 'Deal[UF_CRM_1758704520]' => $props['PHONE_SURPRIZ_CU'] ?? '', // Телефон получателя сюрприза 'Deal[UF_CRM_1758704617]' => $props['PODEZD'] ?? '', // Подъезд 'Deal[UF_CRM_1758705448]' => $props['ETAZH'] ?? '', // Этаж 'Deal[UF_CRM_1758705564]' => $props['DOMOFON'] ?? '', // Домофон 'Deal[UF_CRM_1764925550925]' => '', // Дополнительное поле 'Deal[UF_CRM_DEAL_1758562323005]' => $props['ORDER_DESCRIPTION'] ?? '', // Комментарий // Обязательные поля сделки 'Deal[TITLE]' => 'Заказ №' . $orderId, 'Deal[OPPORTUNITY]' => $order->getPrice(), ]; // Формируем полный URL с параметрами $fullUrl = $baseUrl . '?' . http_build_query($params); self::log("Заказ {$orderId}, URL: " . $fullUrl); // Отправляем GET-запрос $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $fullUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $response = curl_exec($ch); $error = curl_error($ch); $info = curl_getinfo($ch); curl_close($ch); if ($error) { self::log("Заказ {$orderId}, ОШИБКА CURL: " . $error); } else { self::log("Заказ {$orderId}, HTTP код: " . $info['http_code'] . ", ответ: " . substr($response, 0, 200)); } } catch (Exception $e) { self::log("Заказ {$orderId}, ИСКЛЮЧЕНИЕ: " . $e->getMessage()); } } private static function log($message) { file_put_contents('/home/bitrix/crm_final.log', date('Y-m-d H:i:s') . " - " . $message . "\n", FILE_APPEND); } }
[RuntimeException] Could not start session because headers have already been sent. "/home/bitrix/www/bitrix/php_interface/init.php":316. (0) /home/bitrix/www/bitrix/modules/main/lib/session/session.php:143 #0: Bitrix\Main\Session\Session->start /home/bitrix/www/bitrix/modules/main/lib/session/kernelsessionproxy.php:47 #1: Bitrix\Main\Session\KernelSessionProxy->start /home/bitrix/www/bitrix/modules/main/include.php:176 #2: require_once(string) /home/bitrix/www/bitrix/modules/main/include/prolog_before.php:19 #3: require_once(string) /home/bitrix/www/bitrix/modules/main/include/prolog.php:10 #4: require_once(string) /home/bitrix/www/bitrix/header.php:1 #5: require(string) /home/bitrix/ext_www/site/catalog/index.php:2 #6: include_once(string) /home/bitrix/www/bitrix/modules/main/include/urlrewrite.php:128 #7: include_once(string) /home/bitrix/www/bitrix/urlrewrite.php:2 ----------