Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Почта в заказе.


Recommended Posts

Добрый день.
Если в оформлении заказа отключена почта, то система генерирует свой email.

Но при получении заявки в битрикс24 получается что у всех клиентов одна и таже почта

и система думает что это один и тот же клиент заказал и объединяет их в заказ.

Как сделать почту пустой или вообще выключить вывод почты при заказе?


Все заказы приходят на телефон, поэтому почта не нужна.

Надіслати
Поділитися на інших сайтах


Надо смотреть код отправки заявки в битрикс, и там менять логику подстановки почты для отправки в срм

Надіслати
Поділитися на інших сайтах


Скрытый текст
<?php

use Flamix\Plugin\General\Status;

class ControllerExtensionModuleFlamixBitrix24Integrations extends Controller
{
    /**
     * Add auto trace and UTM Handler
     *
     * @param $route
     * @param $args
     * @param $output
     * @throws Throwable
     */
    public function trace(&$route, &$args, &$output)
    {
        include_once(DIR_SYSTEM . 'library/flamix_bitrix24_integrations/vendor/autoload.php');

        /**
         * Add trace
         */
        if (isset($args['title']) && !empty($args['title']) && version_compare(PHP_VERSION, '7.4.0') > 0) {
            \Flamix\Bitrix24\Trace::init($args['title']);
        }

        /**
         * Change status
         */
        $this->load->model('setting/setting');
        $settings = $this->model_setting_setting->getSetting('fx_b24');
        if (($_REQUEST['flamix_status'] ?? null) === 'Y') {
            $b24_status = $_REQUEST['status'] ?? null;
            throw_unless($b24_status, Exception::class, 'Status is empty!');
            $b24_status = Status::key($b24_status);
            $order_id = intval($_REQUEST['order_id'] ?? 0);
            throw_unless($order_id, Exception::class, 'Order ID is empty!');
            // Check HASH!
            $hash = $_REQUEST['hash'] ?? null;
            $fx_b24_token = $settings['fx_b24_token'] ?? null;
            // dd("Need: " . md5("{$fx_b24_token}_$b24_status"));
            throw_if($hash !== md5("{$fx_b24_token}_$b24_status"), Exception::class, 'Hash is not valid!');

            $helper = new \FlamixBitrix24Helpers($this);
            $all_status = $helper->getAllStatus();
            throw_if(empty($all_status), Exception::class, 'In OpenCart not found any status!');
            foreach ($all_status as $status) {
                if ($b24_status === Status::key($status['name'])) {
                    $status_id = intval($status['order_status_id']);
                    break;
                }
            }

            if ($status_id ?? null) {
                $this->load->model('checkout/order');
                $this->model_checkout_order->addOrderHistory((int)$_REQUEST['order_id'], $status_id, 'Status changed by CRM Bitrix24', true);
                die("Status successfully changed!");
            }
        }
    }

    /**
     * Event of status change
     *
     * @param $route
     * @param $args
     * @param $out
     * @return bool
     * @throws Exception
     */
    public function status(&$route, &$args, &$out)
    {
        include_once(DIR_SYSTEM . 'library/flamix_bitrix24_integrations/vendor/autoload.php');
        $log = new \Log('flamix_status_change.log');
        $log->write($args);

        if (!isset($args['0']) || !isset($args['1']) || (int)$args['0'] <= 0 || (int)$args['1'] <= 0) return false;

        $order_id = (int)$args['0'];
        $status_id = (int)$args['1'];
        $status_code = false;
        $helper = new \FlamixBitrix24Helpers($this);
        $all_status = $helper->getAllStatus();

        /**
         **
         * Add ORDER to Bitrix24 when status changed
         */
        if (!$helper->isWeAlreadySendOrderToBitrix24($order_id)) {
            $log->write('Order #' . $order_id . ' will be CREATED!');
            $helper->saveThatWeSentOrderToBitrix24($order_id);
            $this->createOrderInBitrix24($order_id);
        } else {
            $log->write('Order #' . $order_id . ' already exist!');
        }


        if (empty($all_status)) return false;

        foreach ($all_status as $status) {
            if ($status['order_status_id'] == $status_id) {
                $status_code = $status['name'];
            }
        }

        $log->write('Status name: ' . $status_code);
        if (!$status_code) return false;

        try {
            $helper->sendStatus($order_id, $status_code);
        } catch (\Exeptions $e) {
            $log->write('Error: ' . $e->getMessage());
        }
    }

    /**
     * @param int $order_id
     */
    private function createOrderInBitrix24(int $order_id)
    {
        include_once(DIR_SYSTEM . 'library/flamix_bitrix24_integrations/vendor/autoload.php');

        $data = ['FIELDS' => FlamixBitrix24Helpers::getExtraUserSourceFields()];
        $order_info = $this->model_checkout_order->getOrder($order_id);

        $log = new \Log('flamix_send_order.log');
        $log->write('Order Info:');
        $log->write($order_info);

        $products = $this->getProduct($order_id);
        $log->write('Product Info:');
        $log->write($products);

        if (!empty($order_info)) {
            $data['FIELDS']['ORDER_ID'] = $order_info['order_id'];
            $data['FIELDS']['FIRST_NAME'] = $order_info['firstname'];
            $data['FIELDS']['LAST_NAME'] = $order_info['lastname'];
            $data['FIELDS']['EMAIL'] = $order_info['email'];
            $data['FIELDS']['PHONE'] = $order_info['telephone'];
            $data['FIELDS']['COMMENT'] = $order_info['comment'];

            if (!empty($order_info['custom_field'])) {
                foreach ($order_info['custom_field'] as $key => $val) {
                    $data['FIELDS'][strtoupper($key)] = $val;
                }
            }

            // Shipping & Payment
            foreach ($order_info as $key => $val) {
                if (str_contains($key, 'shipping') || str_contains($key, 'payment')) {
                    if (!is_array($val)) {
                        $data['FIELDS'][strtoupper($key)] = $val;
                    } else {
                        foreach ($val as $custom_key => $custom_val) {
                            $data['FIELDS'][strtoupper($custom_key)] = $custom_val;
                        }
                    }
                }
            }
            $data['FIELDS']['SHIPPING_PRICE'] = floatval($this->session->data['shipping_method']['cost'] ?? 0);

            $data['CURRENCY_ID'] = $order_info['currency_code'];
        }

        if (!empty($products)) {
            $data['PRODUCTS'] = $products;
        }

        $helper = new \FlamixBitrix24Helpers($this);
        try {
            $result = $helper->send($data);
            $log = new \Log('flamix_bitrix24_send.log');
            $log->write($result);
        } catch (\Exception $e) {
            $log = new \Log('flamix_bitrix24_error.log');
            $log->write($e->getMessage());
            $log->write($order_info);
            $log->write($products);
            $helper->sendError($e->getMessage());
        }

//        $this->shipping->getCost($this->session->get('shipping_method'));
//        var_dump($data);
//        var_dump($order_info);
//        var_dump($products);
//        exit();
    }


    /**
     * Get Product
     * Taked in MAIL
     *
     * @param int $order_id
     * @return array
     */
    private function getProduct(int $order_id): array
    {
        $this->load->model('catalog/product');
        $this->load->model('tool/upload');
        $this->load->model('setting/setting');
        $this->load->model('account/order');
        $return = [];
        $i = 0;

        // Load Products
        if (version_compare(VERSION, '3.0.0', '>=')) {
            $order_products = $this->model_checkout_order->getOrderProducts($order_id);
        } else {
            $order_products = $this->model_account_order->getOrderProducts($order_id);
        }

        foreach ($order_products as $order_product) {
            $i++;
            $option_data = [];
            // Load Product Option
            if (version_compare(VERSION, '3.0.0', '>=')) {
                $order_options = $this->model_checkout_order->getOrderOptions($order_id, $order_product['order_product_id']);
            } else {
                $order_options = $this->model_account_order->getOrderOptions($order_id, $order_product['order_product_id']);
            }

            // Merge options
            foreach ($order_options as $order_option) {
                if ($order_option['type'] != 'file') {
                    $value = $order_option['value'];
                } else {
                    $upload_info = $this->model_tool_upload->getUploadByCode($order_option['value']);
                    $value = $upload_info ? $upload_info['name'] : '';
                }

                $option_data[] = array(
                    'name' => $order_option['name'],
                    'value' => (utf8_strlen($value) > 20 ? utf8_substr($value, 0, 20) . '..' : $value)
                );
            }

            $product_id = intval($order_product['product_id']);
            $product_item = $this->model_catalog_product->getProduct($order_product['product_id']);

            // Name
            $name = $order_product['name'];

            if (!empty($order_product['model'])) {
                $name .= ' ' . $order_product['model'];
            }

            // Options
            if (!empty($option_data)) {
                $name .= ' (';

                foreach ($option_data as $option) {
                    $name .= $option['name'] . ': ' . $option['value'];
                }

                $name .= ')';
            }

            $return[$i] = [
                'ID' => $product_id,
                'NAME' => $name,
                'QUANTITY' => $order_product['quantity'],
            ];

            // Price
            if (!empty($product_item) && $product_item['price']) {
                $regular_price = (float)$product_item['price'];
            }

            $price = round($order_product['total'] / $order_product['quantity'], 2);
            $return[$i]['PRICE'] = $price;

            // TAX
            if (!empty($order_product['tax'] ?? null)) {
                $return[$i]['TAX_INCLUDED'] = 'Y';
                $return[$i]['TAX_RATE'] = round(($order_product['tax'] / $return[$i]['PRICE']) * 100);
                $return[$i]['PRICE'] = $return[$i]['PRICE'] + $order_product['tax'];
            }

            // Discount
            if (isset($regular_price) && $regular_price > $price) {
                $return[$i]['DISCOUNT_TYPE_ID'] = 1;
                $return[$i]['DISCOUNT_SUM'] = round($regular_price - $price, 2);
            }

            if (!empty($product_item['sku'] ?? null)) {
                $return[$i]['XML_ID'] = $product_item['sku'];
            }

            // Find BY
            $settings = $this->model_setting_setting->getSetting('fx_b24');
            if (!empty($settings['fx_b24_find_by'])) {
                if ($settings['fx_b24_find_by'] == 'NO') {
                    unset($return[$i]['FIND_BY']);
                } else if ($settings['fx_b24_find_by'] !== 'CUSTOM') {
                    $return[$i]['FIND_BY'] = $settings['fx_b24_find_by'];
                } else {
                    $product_find_by_bitrix24 = $settings['fx_b24_find_by_custom_bitrix24'] ?? false;
                    $product_find_by_opencart = $settings['fx_b24_find_by_custom_opencart'] ?? false;

                    if ($product_find_by_opencart === 'NAME') {
                        $product_find_by_opencart_val = $return[$i]['NAME'];
                    } else if ($product_find_by_opencart === 'SKU') {
                        $product_find_by_opencart_val = $return[$i]['XML_ID'];
                    } else if ((int)$product_find_by_opencart > 0) {
                        $helper = new \FlamixBitrix24Helpers($this);
                        $product_find_by_opencart_val = $helper->getAttributeValByProductID($product_id, (int)$product_find_by_opencart);
                    }

                    if (empty($product_find_by_bitrix24) || empty($product_find_by_opencart_val)) continue;

                    // Dynamic FIND_BY && B24 Option
                    $return[$i]['FIND_BY'] = $product_find_by_bitrix24;
                    $return[$i][$product_find_by_bitrix24] = $product_find_by_opencart_val;

                }
            }

            /**
             * Log
             *
             * $attributes = $this->model_catalog_product->getProductAttributes($order_product['order_product_id']);
             * $log_prod = new \Log('flamix_order_product.log');
             * $log_prod->write($order_product);
             * $log_prod->write($attributes);
             * $log_prod->write($product_item);
             *
             * var_dump($return);
             * //            var_dump($this->model_catalog_product->getProduct($order_product['product_id']));
             * exit();*/
        }

//        var_dump($order_products);
//        var_dump($this->config->get('config_tax'));

//        var_dump($return);
//        exit();

        return $return;
    }
}

 

 

Это контроллер из каталога модуля интеграции битрикс24

Только почту то опенкарт генерирует. В опенкарте что-то изменить нет вариантов?

 

Змінено користувачем Allaur
Надіслати
Поділитися на інших сайтах


Можно и в опенкарте смотреть. Например симпла генерит уникальные почты заглушки. Если другая страница оформления то смотреть туда. Вы же программист)

  • +1 1
Надіслати
Поділитися на інших сайтах


@Allaur Створіть окрему функцію в кацапському модулі інтеграції, для потрібної генерації email і все. Сайт на кацапському домені не жме нічого?

Надіслати
Поділитися на інших сайтах

В 11.07.2025 в 22:56, Flint2000 сказав:

Сайт на кацапському домені не жме нічого?

 Мабуть гроші не пахнуть

Надіслати
Поділитися на інших сайтах

11.07.2025 в 14:22, jeka3342 сказал:

Вы же программист)

Да нее, я не программист, я верстальщик )))

 

11.07.2025 в 14:22, jeka3342 сказал:

Например симпла генерит уникальные почты заглушки. 


Точно, симпла ведь...
Буду копать, спасибо :)

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
Гість
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.