$user_id, 'tg_id' => $tg_username, ); } add_action('wp_ajax_blogauth_form', function() { $enabledHandlers = ['b24', 'email', 'tg']; $user_data = get_current_user_data(); $formData = json_decode($_POST['formData']); $crmData = array( 'phone' => $formData['phone'], 'name' => $formData['name'], 'email' => $formData['email'], 'msg' => $formData['msg'], 'url' => $formData['url'], 'stage' => 'C4:NEW', 'fName' => 4, 'order_total' => 0, 'user_id' => $user_data['user_id'], 'method' => 'crm.deal.add', 'form_title' => 'Предложить статью или стать автором', 'is_subscribe' => false, 'order_id' => '', ); process_form($enabledHandlers, $crmData); }); add_action('wp_ajax_nopriv_blogauth_form', function() { $enabledHandlers = ['b24', 'email', 'tg']; $user_data = get_current_user_data(); $formData = json_decode($_POST['formData']); $crmData = array( 'phone' => null, 'name' => $formData['name'], 'email' => $formData['email'], 'msg' => $formData['msg'], 'url' => $formData['url'], 'stage' => 'C4:NEW', 'fName' => 4, 'order_total' => 0, 'user_id' => $user_data['user_id'], 'method' => 'crm.deal.add', 'form_title' => 'Предложить статью или стать автором', 'is_subscribe' => false, 'order_id' => '', ); process_form($enabledHandlers, $crmData); }); add_action('wp_ajax_contact_form', function() { $enabledHandlers = ['b24', 'email', 'tg']; $user_data = get_current_user_data(); $formData = json_decode($_POST['formData']); $crmData = array( 'phone' => null, 'name' => $formData['name'], 'email' => $formData['email'], 'msg' => $formData['msg'], 'url' => $formData['url'], 'stage' => 'C7:NEW', 'fName' => 0, 'order_total' => 0, 'user_id' => $user_data['user_id'], 'method' => 'crm.lead.add', 'form_title' => 'Форма в футере', 'is_subscribe' => false, 'order_id' => '', ); process_form($enabledHandlers, $crmData); }); add_action('wp_ajax_nopriv_contact_form', function() { $enabledHandlers = ['b24', 'email', 'tg']; $user_data = get_current_user_data(); $formData = json_decode($_POST['formData']); $crmData = array( 'phone' => null, 'name' => $formData['name'], 'email' => $formData['email'], 'msg' => $formData['msg'], 'url' => $formData['url'], 'stage' => 'C7:NEW', 'fName' => 0, 'order_total' => 0, 'user_id' => $user_data['user_id'], 'method' => 'crm.lead.add', 'form_title' => 'Форма в футере', 'is_subscribe' => false, 'order_id' => '', ); process_form($enabledHandlers, $crmData); }); add_action('wp_ajax_subscribe_form', function() { $enabledHandlers = ['b24', 'email', 'tg']; $user_data = get_current_user_data(); $formData = json_decode($_POST['formData']); $crmData = array( 'phone' => null, 'name' => null, 'email' => $formData['email'], 'msg' => null, 'url' => $formData['url'], 'stage' => 'C2:NEW', 'fName' => 2, 'order_total' => 0, 'user_id' => $user_data['user_id'], 'method' => 'crm.deal.add', 'form_title' => 'Подписка на предложения', 'is_subscribe' => true, 'order_id' => '', ); process_form($enabledHandlers, $crmData); }); add_action('wp_ajax_nopriv_subscribe_form', function() { $enabledHandlers = ['b24', 'email', 'tg']; $user_data = get_current_user_data(); $formData = json_decode($_POST['formData']); $crmData = array( 'phone' => null, 'name' => null, 'email' => $formData['email'], 'msg' => null, 'url' => $formData['url'], 'stage' => 'C2:NEW', 'fName' => 2, 'order_total' => 0, 'user_id' => $user_data['user_id'], 'method' => 'crm.deal.add', 'form_title' => 'Подписка на предложения', 'is_subscribe' => true, 'order_id' => '', ); process_form($enabledHandlers, $crmData); }); add_action('wp_ajax_to_know_form', function() { $enabledHandlers = ['b24', 'tg']; $user_data = get_current_user_data(); $raw = "sub_product=...&email=...&url=..."; parse_str($_POST['formData'], $formData); $crmData = array( 'phone' => null, 'name' => null, 'email' => $formData['email'], 'msg' => 'Пользователь заинтересовался отсутсвующим продуктом' . $formData['sub_product'], 'url' => $formData['url'], 'stage' => 'C2:UC_QJ1M9Z', 'fName' => 2, 'order_total' => 0, 'user_id' => $user_data['user_id'], 'method' => 'crm.deal.add', 'form_title' => 'Подписка на отсутствующий продукт', 'is_subscribe' => false, 'order_id' => '', ); process_form($enabledHandlers, $crmData); }); add_action('wp_ajax_nopriv_to_know_form', function() { $enabledHandlers = ['b24', 'tg']; $user_data = get_current_user_data(); $raw = "sub_product=...&email=...&url=..."; parse_str($_POST['formData'], $formData); $crmData = array( 'phone' => null, 'name' => null, 'email' => $formData['email'], 'msg' => 'Пользователь заинтересовался отсутсвующим продуктом' . $formData['sub_product'], 'url' => $formData['url'], 'stage' => 'C2:UC_QJ1M9Z', 'fName' => 2, 'order_total' => 0, 'user_id' => $user_data['user_id'], 'method' => 'crm.deal.add', 'form_title' => 'Подписка на отсутствующий продукт', 'is_subscribe' => false, 'order_id' => '', ); process_form($enabledHandlers, $crmData); process_form($enabledHandlers, $crmData); }); function process_form($enabledHandlers, $crmData = array()) { $formData = $_POST['formData']; $handler = FormHandlerFactory::getHandler($enabledHandlers); $response = $handler->handle($formData, $crmData); wp_send_json($response); } // Отправляем данные в Bitrix24 при создании заказа add_action('woocommerce_checkout_order_created', 'send_order_to_bitrix_on_create', 10, 1); function send_order_to_bitrix_on_create($order) { $order_id = $order->get_id(); $already_sent = $order->get_meta('_order_sent'); if (!$already_sent) { send_order_data($order_id); // Помечаем заказ как отправленный $order->update_meta_data('_order_sent', '1'); $order->save(); } } function send_order_data($order_id) { $order = wc_get_order($order_id); // 1. Получаем данные заказа $customer_name = $order->get_billing_first_name() . ' ' . $order->get_billing_last_name(); $customer_phone = $order->get_billing_phone(); $customer_email = $order->get_billing_email(); $order_total = $order->get_total(); $order_comment = ''; $utm = get_utm_data()['utm_source']; $url = ''; $fName = 2; // 2. Формируем список товаров foreach ($order->get_items() as $item) { $product = $item->get_product(); $order_comment .= sprintf( "%s x %s = %s\n", $product->get_name(), $item->get_quantity(), wc_price($item->get_total()) ); } $order_comment .= "\n=== ДАННЫЕ ДОСТАВКИ ===\n"; $order_comment .= "Город: " . $order->get_billing_city() . "\n"; $order_comment .= "Адрес: " . $order->get_billing_address_1() . "\n"; if ($order->get_billing_address_2()) { $order_comment .= "Доп. адрес: " . $order->get_billing_address_2() . "\n"; } $order_comment .= "Способ доставки: " . $order->get_shipping_method() . "\n"; $order_comment .= "Комментарий к заказу: " . $order->get_customer_note() . "\n"; if (is_user_logged_in()) { $user_id = get_current_user_id(); } else{ $user_id = ''; } $form_title = 'Покупка на сайте'; $formData = [ // Основные данные 'TITLE' => 'Заказ #' . $order_id, 'NAME' => $customer_name, 'PHONE' => $customer_phone, 'EMAIL' => $customer_email, 'USER_ID' => $user_id, 'ORDER_ID' => $order_id, 'ORDER_TOTAL' => $order_total, 'PAYMENT_METHOD' => $order->get_payment_method_title(), 'COMMENTS' => $order_comment, // Адрес (префикс ADDR_) 'ADDR_CITY' => $order->get_billing_city(), 'ADDR_STREET' => $order->get_billing_address_1(), 'ADDR_STREET2' => $order->get_billing_address_2(), // UTM-метки (префикс UTM_) 'UTM_SOURCE' => $utm, 'UTM_MEDIUM' => get_utm_data()['utm_medium'] ?? '', 'UTM_CAMPAIGN' => get_utm_data()['utm_campaign'] ?? '', // Системные поля 'SOURCE' => 'WooCommerce', 'FNAME' => $fName, ]; // Добавляем товары (префикс PRODUCT_1_, PRODUCT_2_ и т.д.) $product_index = 1; $product_summary = "🛒 Состав заказа:\n\n"; foreach ($order->get_items() as $item) { $product = $item->get_product(); $formData["PRODUCT_{$product_index}_NAME"] = $product->get_name(); $formData["PRODUCT_{$product_index}_QTY"] = $item->get_quantity(); $formData["PRODUCT_{$product_index}_PRICE"] = $item->get_total(); $formData["PRODUCT_{$product_index}_SKU"] = $product->get_sku(); // Добавляем в текстовую сводку $product_summary .= "{$product_index}) {$name}\n"; $product_summary .= " Кол-во: {$qty}\n"; $product_summary .= " Сумма: {$total}\n"; if ($sku) { $product_summary .= " Артикул: {$sku}\n"; } $product_summary .= "\n"; $product_index++; } $message = "📋 Данные формы:\n\n"; foreach ($formData as $key => $value) { if (is_array($value)) { $value = implode(', ', $value); // на случай, если в значении массив } $message .= sprintf("%s: %s\n", $key, $value); } $crmData = array( 'phone' => $customer_phone, 'name' => $customer_name, 'email' => $customer_email, 'msg' => $product_summary, 'url' => null, 'stage' => 'C2:UC_ZMY1QV', 'fName' => 2, 'order_total' => $order_total, 'user_id' => $user_data['user_id'], 'method' => 'crm.deal.add', 'form_title' => 'Заказ на сайте', 'is_subscribe' => false, 'order_id' => $order_id, ); $handler = FormHandlerFactory::getHandler(['tg', 'b24']); $response = $handler->handle($formData, $crmData); } add_action('woocommerce_payment_complete', 'notify_order_paid', 10, 1); function notify_order_paid($order_id) { $order = wc_get_order($order_id); $formData = [ 'TITLE' => 'Заказ #' . $order_id . ' оплачен', 'ORDER_ID' => $order_id, 'PAYMENT_METHOD' => $order->get_payment_method_title(), 'ORDER_TOTAL' => $order->get_total(), 'SOURCE' => 'WooCommerce', ]; $handler = FormHandlerFactory::getHandler(['tg']); $handler->handle($formData, []); global $site_env; if ($site_env->site_revion == 'ru'){ $b24Handler = new b24Handler(); $b24Handler->b24_update_deal_stage_by_order_id($order_id); } } ?>