Перейти к содержанию

Интеграция Roistat с OpenCart 1.x

Внимание!

Интеграция подходит для OpenCart версий 1.x.

Как работает интеграция

При оформлении заявки на сайте автоматически создается новая сделка в CRM, в которую передается номер визита из куки браузера roistat_visit в дополнительное поле с именем roistat. Если менеджер принимает заказ по телефону, он может спросить промокод (настраивается отдельно) и ввести этот код в поле roistat.

Настройка интеграции

Шаг 1. Настройте OpenCart на сервере

  1. Скачайте архив по ссылке и скопируйте файлы из архива в соответствующие папки на сервере, где установлен OpenCart.

  2. Откройте файл catalog/model/checkout/order.php и найдите в начале файла следующий код:

    public function addOrder($data) {
    

    Строчкой ниже добавьте:

    // Получаем промокод из cookie
    $roistat_visit = ( ! empty($_COOKIE['roistat_visit'])) ? $_COOKIE['roistat_visit'] : null;
    
  3. Ниже строчки, которую вы только что добавили, найдите строчку:

    $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($data['invoice_prefix']) . "', store_id = '" . (int)$data['store_id'] . "', store_name = '" . $this->db->escape($data['store_name']) . "', store_url = '" . $this->db->escape($data['store_url']) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($data['payment_country']) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($data['payment_zone']) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($data['payment_address_format']) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($data['shipping_country']) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($data['shipping_zone']) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($data['shipping_address_format']) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', total = '" . (float)$data['total'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', commission = '" . (float)$data['commission'] . "', language_id = '" . (int)$data['language_id'] . "', currency_id = '" . (int)$data['currency_id'] . "', currency_code = '" . $this->db->escape($data['currency_code']) . "', currency_value = '" . (float)$data['currency_value'] . "', ip = '" . $this->db->escape($data['ip']) . "', forwarded_ip = '" . $this->db->escape($data['forwarded_ip']) . "', user_agent = '" . $this->db->escape($data['user_agent']) . "', accept_language = '" . $this->db->escape($data['accept_language']) . "', date_added = NOW(), date_modified = NOW()");
    

    Замените её на:

    $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($data['invoice_prefix']) . "', store_id = '" . (int)$data['store_id'] . "', store_name = '" . $this->db->escape($data['store_name']) . "', store_url = '" . $this->db->escape($data['store_url']) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', fax = '" . $this->db->escape($data['fax']) . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_company_id = '" . $this->db->escape($data['payment_company_id']) . "', payment_tax_id = '" . $this->db->escape($data['payment_tax_id']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($data['payment_country']) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($data['payment_zone']) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($data['payment_address_format']) . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($data['shipping_country']) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($data['shipping_zone']) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($data['shipping_address_format']) . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', total = '" . (float)$data['total'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', commission = '" . (float)$data['commission'] . "', language_id = '" . (int)$data['language_id'] . "', currency_id = '" . (int)$data['currency_id'] . "', currency_code = '" . $this->db->escape($data['currency_code']) . "', currency_value = '" . (float)$data['currency_value'] . "', ip = '" . $this->db->escape($data['ip']) . "', forwarded_ip = '" . $this->db->escape($data['forwarded_ip']) . "', user_agent = '" . $this->db->escape($data['user_agent']) . "', accept_language = '" . $this->db->escape($data['accept_language']) . "', roistat_visit = '" . $this->db->escape($roistat_visit) . "', date_added = NOW(), date_modified = NOW()");
    
  4. Откройте файл admin/view/template/sale/order_form.tpl и найдите:

    <tr> <td><?php echo $entry_fax; ?></td> <td><input type="text" name="fax" value="<?php echo $fax; ?>" /></td> </tr>
    

    Добавьте ниже:

    <!-- ROIstat --> <tr> <td>ROIstat ID</td> <td><input type="text" name="roistat_visit" value="<?php echo $roistat_visit; ?>" /></td> </tr> <!-- END ROIstat -->
    
    5. Откройте файл admin/view/template/sale/order_info.tpl и найдите:

    <tr> <td><?php echo $text_date_modified; ?></td> <td><?php echo $date_modified; ?></td> </tr>
    

    Добавьте ниже перед < /table>:

    <tr> <td>ROIstat:</td> <td><?php echo $roistat_visit; ?></td> </tr>
    
  5. Откройте файл admin/model/sale/order.php и найдите:

    'date_modified' => $order_query->row['date_modified']
    

    Замените эту строчку на:

    'date_modified' => $order_query->row['date_modified'], 'roistat_visit' => $order_query->row['roistat_visit'],
    
  6. Откройте файл admin/controller/sale/order.php и найдите:

    if (isset($this->request->post['email'])) { $this->data['email'] = $this->request->post['email']; } elseif (!empty($order_info)) { $this->data['email'] = $order_info['email']; } else { $this->data['email'] = ''; }
    
    Добавьте ниже:

    // roistat_visit
    if (isset($this->request->post['roistat_visit'])) { $this->data['roistat_visit'] = $this->request->post['roistat_visit']; } elseif ( ! empty($order_info)) { $this->data['roistat_visit'] = $order_info['roistat_visit']; } else { $this->data['roistat_visit'] = ''; }
    
  7. В этом же файле admin/controller/sale/order.php найдите следующие строки:

    $this->data['store_name'] = $order_info['store_name']; $this->data['store_url'] = $order_info['store_url']; $this->data['firstname'] = $order_info['firstname']; $this->data['lastname'] = $order_info['lastname'];
    

    Добавьте ниже:

    // ROIstat
    $this->data['roistat_visit'] = $order_info['roistat_visit'];
    

Шаг 2. Настройте OpenCart в панели администратора

  1. В панели администратора OpenCart зайдите в Дополнения → Модули, найдите Экспорт информации Roistat и нажмите Установить:

    1.png

  2. После установки модуля нажмите Изменить.

  3. На следующем экране укажите:

    • ID проекта – номер вашего проекта в Roistat, который можно увидеть в адресной строке браузера (например, http://cloud.roistat.com/project/1288, где 1288 – номер вашего проекта).
    • Имя пользователя и Пароль придумайте самостоятельно.

    2.png

    После указания ID проекта счетчик Roistat автоматически установливается в поле для счетчика Google Analytics. Если этого не произошло:

    1. В панели администратора OpenCart откройте Система → Настройки.
    2. Напротив нужного магазина нажмите Изменить:

      3.png

    3. Перейдите на закладку Сервер.

    4. В поле Код Google Analytics вставьте код счетчика Roistat, код которого вы найдете в Roistat в разделе Настройки → Код для сайта.

      4.png

Шаг 3. Подключите OpenCart в каталоге интеграций

  1. В проекте Roistat откройте раздел Интеграции.

  2. Нажмите Добавить интеграцию. Найдите и добавьте интеграцию с OpenCart и нажмите кнопку Настроить интеграцию:

    5.png   3. В поле URL сайта введите URL-адрес вашего сайта. Например, http://mysite.ru.

  3. В полях Логин и Пароль введите то же, что вы ввели в полях Имя пользователя и Пароль в пункте 3 Шага 2.

  4. Нажмите кнопку Сохранить.

    Загрузятся статусы сделок из OpenCart.

  5. Перетаскивая статусы сделок, распределите их по группам. Подробнее читайте в статье Распределение статусов сделок.