Онлайн-руководство разработчика NetCat
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API
Модуль «Интернет-магазин» 12.8.1Настройка модуля 12.8.2Настройка интернет-магазина 12.8.3Валюты 12.8.4Цены для разных групп пользователей 12.8.5Минимальная цена 12.8.6Способы доставки 12.8.7Способы оплаты 12.8.8Настройка шаблонов писем 12.8.9Бланки 12.8.10Скидки 12.8.11Сиюминутные скидки 12.8.12Купоны 12.8.13Редактирование заказов 12.8.14Статистика 12.8.15Компоненты товаров 12.8.16Варианты товаров 12.8.17Коллекции объектов 12.8.18Фильтр товаров 12.8.19Списки товаров 12.8.20Корзина 12.8.21Заказ 12.8.22Выгрузка предложений в Яндекс.Маркет 12.8.23Заказ на Маркете 12.8.24Выгрузка предложений в Товары@Mail.Ru 12.8.25Выгрузка товаров в Google Merchant 12.8.26Обмен данными с 1С 12.8.27Обмен данными с 1С 8-ой версии 12.8.28Обмен данными с 1С 7-ой версии 12.8.29Обмен данными с сервисом МойСклад 12.8.30Виджеты интернет-магазина 12.8.31Классы расчёта доставки 12.8.32Интернет-магазин <5.3 12.8.33Переход с прежней версии модуля 12.8.34Справочник API

Онлайн-кассы и электронные чеки

Начиная с версии 5.8, модуль «Приём платежей» разделен на «Платёжные системы» и «Кассы и чеки». Раздел «Кассы и чеки» полностью посвящен интеграции системы с различными сервисами аренды контрольно-кассовых машин (ККМ), появившимися в связи с началом действия закона 54-ФЗ с 1 июля 2017 года (подробнее об этом можно прочитать здесь).

Кроме прямого взаимодействия системы управления с покупными или арендными кассами, возможен способ работы через платежные системы, поддерживающие онлайн-кассы. О настройке интеграций с платежными системами читайте в разделе Настройка платежей.

В разделе «Кассы и чеки» имеется три вкладки, которые описаны далее.

Кассы

На вкладке «Кассы» предлагается задать общие настройки для кассовых сервисов.

  • Выставлять чеки  — использовать ли функционал интеграции с кассовыми сервисами. Поскольку с 1 июля 2017 года законодательство обязывает все интернет-магазины выписывать чеки при онлайн оплате, необходимо оставить настройку включенной, если только ваш магазин не находится вне правового поля Российской Федерации.
  • ИНН  — укажите ИНН.
  • Система налогообложения  — выберите систему налогообложения из представленных вариантов.
  • Используемый кассовый сервис  — выберите кассовый сервис, с которым Вы заключали договор и который хотите использовать для передачи данных платежей.

Если все настройки заполнены, вы увидите ссылку «К настройкам кассового сервиса». Пройдите по ней и укажите настройки в соответствии с данными, предоставленными сервисом.

На данный момент Неткэт поддерживает интеграцию с тремя кассовыми сервисами:
АТОЛ Онлайн, KKM Server, Штрих-М: Чекопечать

АТОЛ Онлайн

Сайт сервиса: online.atol.ru

Чтобы подключить сервис, необходимо оформить подключение к кассе или кассовой ферме на сайте АТОЛ онлайн и заполнить данные для подключения в настройках кассового сервиса.

Параметр Описание
Логин Логин в системе АТОЛ онлайн
Пароль Пароль в системе АТОЛ онлайн
Группа касс Идентификатор группы касс
Адрес места расчетов Доменное имя сайта (как указано при регистрации кассового аппарата)

Класс интеграции с сервисом: nc_payment_register_atol

KKM Server

Сайт сервиса: kkmserver.ru/KkmServer

Чтобы подключить сервис, необходима подключенная и настроенная касса, которая поддерживается сервисом (список поддерживаемых устройств на официальном сайте), а также установленный и настроенный на работу с этой кассой KKM web-server, последнюю версию которого можно скачать на официальном сайте программы.

После этого на компьютере, к которому физически подключена касса, устанавливается программа KKM-Server. С сервера на компьютер с кассой прокладывается соединение так, чтобы магазин, расположенный на сервере, мог отправлять KKM серверу запросы на печать чеков.

Если у компьютера, к которому подключен кассовый аппарат, нет постоянного публичного IP-адреса, а также для безопасности можно о настроить подключение через VPN-туннель между сервером и кассовым компьютером (например, при помощи программы SoftEther VPN).

Настройки кассового сервиса:

Параметр Описание
Название организации для заголовка чека Юридическое наименование продавца
Адрес KKM сервера Адрес компьютера, к которому подключена касса, например, http://205.31.55.178:5893
Логин Логин для авторизации на KKM сервере, по умолчанию - admin
Пароль Пароль для авторизации на KKM сервере, по умолчанию пустой (обязательно установите пароль в настройках KKM Server)
Номер устройства Если не заполнено, то первое не блокированное на сервере
ИНН ККМ Если не заполнено, то ККМ ищется только по номеру устройства, если он равен 0, а заводской номер ККМ заполнен, то ККМ ищется только по ИНН
Заводской номер ККМ Если не заполнено, то ККМ ищется только по номеру устройства
Время (сек) ожидания выполнения команды По умолчанию 30 секунд
ФИО кассира (тег ОФД 1021) Имя продавца (например, фамилия и инициалы), которое будет отпечатано на чеке
Время снятия Z-отчёта и открытия новой смены (в формате ЧЧ:ММ) В указанное время будет отправлена команда на закрытие текущей и открытие новой смены (по правилам работы с ККМ длительность смены не должна превышать 24 часа).
Если поле не заполнено, или не настроен запуск скрипта управления задачами, открытие новой смены должно производиться ежедневно вручную или другими средствами автоматизации, иначе будут нарушены правила работы с ККМ.
Если при попытке регистрации чека KKMServer сообщит, что смена открыта более 24 часов, будет предпринята попытка открытия новой смены.

Класс интеграции с сервисом: nc_payment_register_kkmserver

Штрих-М: Чекопечать

Сайт сервиса: shtrih-m.ru

Чтобы подключить сервис, необходима подключенная и настроенная касса, которая поддерживается сервисом (сервис поддерживает кассы как моделей Штрих, так и Атол), установленная и настроенная на работу с этой кассой программа "Штрих‑М: Чекопечать".

Принцип работы программы в том, что она обращается к указанной в настройках папке, ищет в ней файлы с данными для печати чеков и печатает их.

Для ее корректной работы необходима настроеная папка, общая между сервером, где установлен интернет-магазин, и компьютером, к которому подключена касса. Сделать это можно настроив туннель соединения между сервером и кассовым компьютером через VPN, например, при помощи программы SoftEther VPN

Если вы выбрали печать чеков при помощи кассового сериса Штрих, данные для печати чеков будут сохраняться в папке /netcat_files/checks/. Именно она и должна быть настроена как общая.

Класс интеграции с сервисом: nc_payment_register_shtrih

Чеки

На странице «Чеки» можно увидеть список всех проведённых чеков.

При нажатии на ID чека вы сможете просмотреть все имеющиеся данные по нему. При нажатии на ID заказа вы перейдёте на страницу полного отображения заказа, к которому относится этот чек. На этой странице также можно осуществить возврат: напротив нужного чека нажмите на ссылку «Сделать возврат», чек возврата будет автоматически выписан и появится в списке.

Чеки, проведенные с ошибками, выделены в таблице красным цветом. Текст ошибки и другие данные, которые вернул сервер кассового сервиса, можно уточнить на вкладке «Журнал событий».

Журнал событий

На вкладке «Журнал событий» представлен список всех событий, относящихся к проведению чеков. События, относящиеся к ошибкам проведения чеков, подсвечены красным цветом, а сообщение содержит полный ответ сервера.

Добавление пользовательских сервисов

В системе существует возможность добавления собственных кассовых сервисов. Чтобы это сделать, необходимо:

  • Создать класс, наследующий nc_payment_register_provider, и организовать его подключение при необходимости.
    В названии класса используйте префикс, уникальный для разработчика класса (например, название компании-разработчика или имя сайта). Далее для примера будет использоваться название класса my_register_provider_test.
  • Добавить новый элемент в список «Кассы» (Classificator_PaymentRegister), указав в поле Дополнительное значение имя класса для интеграции с кассовым сервисом (например, my_register_provider_test).

Структура класса:

<?php

class my_register_provider_test extends nc_payment_register_provider {

    /**
     * @var array массив с перечислением параметров кассового сервиса
     *   [ название_настройки => описание ]
     *   Для названий настроек (ключ массива) используйте префикс
     *   'MyCompany_PaymentRegister' (вместо 'MyCompany' подставьте префикс
     *   разработчика класса).
     *   Указанные в self::$settings параметры можно будет настроить в панели
     *   управления. Значения можно получить внутри класса при помощи метода
     *   get_setting(), например:
     *   $this->get_setting('MyCompany_PaymentRegisterTestFirstParam');
     */
    static protected $settings = array(
        'MyCompany_PaymentRegisterTestFirstParam' => 'Параметр 1',
        'MyCompany_PaymentRegisterTestAnotherParam1' => 'Параметр 2',
    );

    /**
     * Обработка нового чека (отправка запроса на создание чека в ККМ)
     *
     * @param nc_payment_receipt $receipt
     */
    public function process_receipt(nc_payment_receipt $receipt) {
        // Метод должен отправить в кассовый сервис данные чека.

        // Получение типа операции:
        $operation = $receipt->get('operation');
        if ($operation === nc_payment::OPERATION_SELL) {
            echo 'признак расчёта: приход';
        } else if ($operation === nc_payment::OPERATION_SELL_REFUND) {
            echo 'признак расчёта: возврат приход';
        }

        // Получение счёта, по которому осуществляется оплата:
        $invoice = $receipt->get_invoice();

        // Получение информации о покупателе:
        // — адрес электронной почты, а если его нет — номер телефона;
        //   если нет никаких контактных данных, то адрес unclaimed-receipts@домен.сайта
        $customer_contacts = $invoice->get_customer_contact_for_receipt();
        // — адрес электронной почты
        $customer_email = $invoice->get('customer_email');
        // — телефон в нормализованном международном формате (E.164 — с «+», без пробелов)
        $customer_phone = $invoice->get('customer_phone');

        // Получение списка позиций в счёте (чеке):
        $items = $receipt->get_items();
        /** @var nc_payment_invoice_item $item */
        foreach ($items as $item) {
            echo 'Название:      ' . $item->get('name');
            echo 'Цена за 1 шт.: ' . $item->get('item_price'); // с учётом скидок, включая НДС
            echo 'Количество:    ' . $item->get('qty');
            echo 'Стоимость:     ' . $item->get('total_price');
            echo 'Ставка НДС, %: ' . $item->get('vat_rate'); // NULL, если не облагается
            echo 'Сумма НДС:     ' . $item->get('total_vat_amount');
        }
    }

    /**
     * Обработка обратного запроса от кассового сервиса
     */
    public function process_callback() {
        // Если кассовый сервис выполняет обратный запрос (например, для подтверждения
        // создания чека), используйте в качестве адреса для него скрипт
        // /netcat/modules/payment/register/callback.php с необходимыми параметрами
        // (например, идентификатором чека). При запросе на данный адрес
        // будет выполнен метод process_callback() класса выбранного для сайта
        // кассового сервиса.
    }

    /**
     * Выполнение задач при периодическом запуске скрипта из планировщика:
     * например, закрытие и открытие смены, запрос статуса
     */
    public function execute_cron_tasks() {
    }

}

Пример добавления автозагрузки класса в /netcat/modules/default/function.inc.php:

<?php
// Файл /netcat/modules/default/function.inc.php
// (класс кассового сервиса — my_register_provider_test, находится в
// файле /netcat/modules/default/my_register_provider_test.php)
spl_autoload_register(function($class) {
    if ($class == 'my_register_provider_test') {
        include __DIR__ . '/my_register_provider_test.php';
    }
});
Описание проекта