Интеграция с кассовыми аппаратами

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (115)

просмотр истории страницы
h3. Схема взаимодействия биллинга с кассовым аппаратом:
{toc:maxLevel=3}

У кассира на рабочем компьютере должен быть запущен специальное приложение (tray_proxy). Биллинг, при авторизации кассира, запоминает его ip адрес и далее все команды для ККМ отправляются на этот ip адрес и обрабатывается приложением tray_proxy.
h1. Схема взаимодействия биллинга с кассовым аппаратом

h2. Настройка кассового аппарата ПИРИТ
У кассира на рабочем компьютере должно быть запущено специальное приложение (tray_proxy). Биллинг, при авторизации кассира, запоминает его ip адрес и далее все команды для ККМ отправляются на этот ip адрес и обрабатывается приложением tray_proxy.
{INFO}
По умолчанию при печати чека для *наличной* оплаты биллинг отправляет команды на печать только 1 чека. В случае, если необходимо распечатать повторно тот же самый чек и отдать абоненту - используйте опцию *Повторить последний документ* на вкладке ККМ
{INFO}

Сайт производителя аппарата: [http://www.crystals.ru/fiskalnyj-registrator]
h1. Операции с кассовым аппаратом

!ATOL2.png|border=0,width=400!

Работа проверялась на аппарате *ПИРИТ ФР01К*
Доступны операции:
* Отчёт с гашением
* Отчёт без гашения
* Запустить ККМ
* Открыть смену
* Повтрорить последний документ
* Внесение средств - корректировка содержимого кассы, чтобы счетчик ККМ совпадал с фактическим количеством наличных денег в кассе, не добавляет средства на счёт абонента;
* Выемка средств - корректировка содержимого кассы, аналогично "Внесению средств";
* Проверка связи
* Получить ID терминала
* Закрыть день

Теоретически, поддерживаются все устройства, поддерживающие _протокол пирит_.
h1. Установка и настройка

h2. Установка tray_proxy

h3. Установка и настройка tray_proxy:
Скачать приложение можно по ссылке: [Интеграция с кассовыми аппаратами^tray_proxy_v3.1.zip]

Скачать приложение можно по ссылке: [^tray_proxy_v2.2.zip]
h3. tray_proxy под Windows (XP, 7, 10)

Для работы необходимо:
* *Python 2.7* [Сайт|https://www.python.org/downloads/] (прямая ссылка на 32-битный инсталлятор: [python-2.7.10.msi|https://www.python.org/ftp/python/2.7.10/python-2.7.10.msi])
* *PyGTK 2.24* [Сайт|http://www.pygtk.org/downloads.html] (прямая ссылка на 32-битный инсталлятор: [pygtk-all-in-one-2.24.2.win32-py2.7.msi|http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/pygtk-all-in-one-2.24.2.win32-py2.7.msi])
* *PySerial 2.7* [Сайт|https://pythonhosted.org/pyserial/] (прямая ссылка на 32-битный инсталлятор: [pyserial-2.7.win32.exe|https://pypi.python.org/packages/47/c9/7802e11ab388ad1539de716649add8bb8ca8bdff660364b3a404f79c27b7/pyserial-2.7.win32.exe#md5=21555387937eeb79126cde25abee4b35])
* *PyWin32 build 221* [Сайт|https://sourceforge.net/projects/pywin32/] (ссылка на 32-битный инсталлятор: [pywin32-221.win32-py2.7.exe|https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/pywin32-221.win32-py2.7.exe/download])
* *zope.interface 4.1.3* [Сайт|https://zopeinterface.readthedocs.io] (прямая ссылка на 32-битный инсталлятор: [zope.interface-4.1.3.win32-py2.7.exe|https://pypi.python.org/packages/49/5f/ed5ea875af4e802198d035efe985d341d9b50edddbc22b785d2ef4b9eb66/zope.interface-4.1.3.win32-py2.7.exe#md5=e0a5bbc762126157b63d0233e26cc751])
* *Twisted 15.4.0* [Сайт|http://twistedmatrix.com/trac/wiki/Downloads] (прямая ссылка на 32-битный инсталлятор: [Twisted-15.4.0.win32-py2.7.msi|http://twistedmatrix.com/Releases/Twisted/15.4/Twisted-15.4.0.win32-py2.7.msi])

h3. tray_proxy под Ubuntu, Debian

Далее, открываете файл main.py и в начале файла меняете параметры:
Для работы необходимо:

* BILLING_IP - ip биллинга (команды будут приниматься только с этого ip)
* DEVICE - порт, к которому подключен кассовый аппарат
* PIRIT_PASSWORD - 4х символьный пароль для кассового аппарата
* *Python 2.7*: _apt install python2.7 python-pip python-dev build-essential_
* *PyGTK 2.24*: _apt install python-gtk2_
* Обновить *pip*: _pip install \--upgrade pip_
* *PySerial 2.7*: \_pip install pyserial==2.7
* *zope.interface 4.1.3*: _pip install zope.interface==4.1.3_
* *Twisted 15.4.0*: _pip install Twisted==15.4.0_

Далее его можно будет запускать (для запуска требуются права администратора)
Скрипт установки:

h2. Настройка кассового аппарата АТОЛ
{code}
#!/bin/bash
apt install python2.7 python-pip python-dev build-essential python-gtk2
pip install --upgrade pip
pip install pyserial==2.7 zope.interface==4.1.3 Twisted==15.4.0
{code}

Сайт производителя аппарата: [http://www.atol.ru/products/kkt/]
h2. Настройка tray_proxy и ККМ

Описание протокола:
Откройте файл _settings.py_ и укажите параметры:

* [Описание протокола АТОЛ версии 3.1|Установка tray_proxy для интеграции с ККМ. POS-терминал Verifone^Протокол_ККТ_3.1.pdf]
* *BILLING_IP* - IP биллинга (команды будут приниматься только с этого ip)
* *DEVICE_TYPE* - тип устройства: 0 - COM-порт, 1 - USB
* *DEVICE* - порт, к которому подключен кассовый аппарат, например: 'COM3'
* *BAUDRATE* - скорость соединения с портом, например: 115200
* *KKM* - протокол работы
* *DEBUG* - следует выставить "0", если запускаете двойным кликом по "main.pyw", или "1", если через командную строку.
* *AUTOSTART* - следует выставить "1", если после запуска скрипта нужно сразу запускать веб-сервер и соединение с ККМ.

* [Описание протокола АТОЛ версии 3.0|Установка tray_proxy для интеграции с ККМ. POS-терминал Verifone^Протокол_ККТ_3.0.pdf]
+Опционально+: возможность передать все настройки (их может быть много) в виде строки json
* *ATOL_SETTINGS* = параметры для ККМ, например:
{code}r'{"Port":"1"}'{code}

* [Описание протокола АТОЛ версии 2.4|Установка tray_proxy для интеграции с ККМ. POS-терминал Verifone^Protokol_KKM_2.4_040614.pdf]
Далее можно запускать *main.pyw* двойным кликом или через консоль (для запуска могут потребоваться права администратора).
Под Ubuntu есть возможность запуска приложения через иконку *TrayProxy* (файл иконки *tray_proxy.desktop*)
Правый клик по иконке в системном трее, пункт "Start Server" запустит веб-сервер, который будет принимать запросы на печать чеков от биллинга.
Для этого нужно убедиться, что порт 8080 открыт на компьютере кассира.

h3. Протокол "Атол Протокол ККТ 3.1"
h3. Настройки для ШТРИХ-М

По данному протоколу осуществляется поддержка 54-ФЗ аппаратами Атол с ФФД 1.0.5.
Для работы с данными ККМ нужно установить "ШТРИХ-М: Драйвер ККТ", скачать который можно по ссылке [https://www.shtrih-m.ru/support/download/] , и настроить взаимодействие с ККМ в драйвере.

Работа проверялась на аппарате *Fprint-22ПТК*
В файлер settings.py укажите:

h3. Протокол "Атол Протокол ККТ 2.4"
* *KKM* - 'SHTRIH_COM'
* *DEVICE* - 0, где 0 - номер устройства в драйвере

Работа проверялась на аппаратах *Fprint-03K* и *Fprint-22K*
h3. Настройки для ПИРИТ

Теоретически, поддерживаются ККТ FPrint-55K, FPrint-22K, FPrint-11ПТК и FPrint-77ПТК, поддерживающие _протокол Атол версии 2.4 с включенным режимом совместимости 1.0_
Если Ваше устройство работает по протоколу версии 3, то переключить его на протокол 2 версии можно через Сервисный режим.
Сайт производителя аппарата: [http://www.crystals.ru/fiskalnyj-registrator]

h3. Настройка биллинга:
Работа проверялась на аппарате *ПИРИТ ФР01К*

Нужно указать протокол, в данном случае "atol", в настройках веб-кассы:
{code} Платежные системы -> Настройки веб-кассы, поле "ККМ (PIRIT, ATOL И Т.П.)" {code}
Каких-либо специфичных настроек интеграция с ПИРИТ не имеет.

У Атол есть пароли оператора (_ККМ ПАРОЛЬ ДОСТУПА_) (по умолчанию "30") и смены режима (_ККМ ПАРОЛЬ СМЕНЫ РЕЖИМА_) (по умолчанию "0").
Теоретически, поддерживаются все устройства, работающие по протоколу ПИРИТ.

h3. Установка и настройка tray_proxy:
h3. Настройка кассового аппарата АТОЛ

Скачать приложение можно по ссылке: [Установка tray_proxy для интеграции с ККМ. POS-терминал Verifone^tray_proxy_v2.2.zip]
Сайт производителя аппарата: [http://www.atol.ru/products/kkt/]
Описание протокола:
* [Описание протокола АТОЛ версии 3.1|Интеграция с кассовыми аппаратами^Протокол_ККТ_3.1.pdf]
* [Описание протокола АТОЛ версии 3.0|Интеграция с кассовыми аппаратами^Протокол_ККТ_3.0.pdf]
* [Описание протокола АТОЛ версии 2.4|Интеграция с кассовыми аппаратами^Protokol_KKM_2.4_040614.pdf]

h4. Протокол АТОЛ ККТ 3.1

Далее, открываете файл settings.py и в меняете параметры:
По данному протоколу осуществляется поддержка 54-ФЗ аппаратами Атол с ФФД 1.0.5. Работа проверялась на аппарате *АТОЛ 30Ф*

* BILLING_IP - ip биллинга (команды будут приниматься только с этого ip)
* DEVICE - порт, к которому подключен кассовый аппарат
* BAUDRATE - скорость соединения с портом
* KKM - протокол работы, в данном случае "ATOL"
* DEBUG - следует выставить "0", если запускаете двойным кликом по "main.pyw", или "1", если через командную строку.
* AUTOSTART - следует выставить "1", если после запуска скрипта нужно сразу запускать веб-сервер и соединение с ККМ.
Как настроить:
# Для работы нужен драйвер АТОЛ версии 10 или выше, его можно скачать в [центре загрузки АТОЛ|http://fs.atol.ru/SitePages/Центр загрузки.aspx] в разделе "*Контрольно-кассовая техника*".
Прямая ссылка на версию драйвера 10.6.0.0: [http://fs.atol.ru/...|http://fs.atol.ru/_layouts/15/atol.templates/Handlers/FileHandler.ashx?guid=d225fe2b-37a7-4251-ad72-9621eae7bc3b&webUrl=]
{note}Если используется Windows - обязательно устанавливайте 32-битную версию (архив/версия/installer/exe/KKT10-версия-windows32-setup.exe).{note}
# После скачивания архива скопируйте *libfptr10.py* (файл архив/версия/wrappers/python/) в папку с TrayProxy.
# Укажите в _settings.py_:
#* *KKM* - ATOL3
# Дополнительные опции для TrayProxy: возможность передать все настройки (их может быть много) в виде строки json
#* *ATOL_SETTINGS* - параметры для ККМ, например:
{code}r'{"Port":"1"}'{code}

Далее можно запускать *main.pyw* двойным кликом или через консоль (для запуска могут потребоваться права администратора).
Под Ubuntu есть возможность запуска приложения через иконку *TrayProxy* (файл иконки *tray_proxy.desktop*)
Правый клик по иконке в системном трее, пункт "Start Server" запустит веб-сервер, который будет принимать запросы на печать чеков от биллинга.
Для этого нужно убедиться, что порт 8080 открыт на компьютере кассира.
Если настройки не подошли, адаптер попытается вызвать окно настроек драйвера. Если после этого соединение удастся - успешные настройки будут записаны в лог.

h3. tray_proxy под Windows (XP, 7, 10)
h4. Протокол АТОЛ ККТ 2.4

Для работы необходимо:
Работа проверялась на аппаратах *Fprint-03K* и *Fprint-22K*
{info}
Внимание: У названия ККТ Fprint в конце должна быть буква *K*. Например в названии FPrint-55K. Оборудование FPrint-55 (без буквы *К*) является принтером а не ККТ и не поддерживается для интеграции с биллингом
{info}

# *Python 2.7* [Сайт|https://www.python.org/downloads/] (прямая ссылка на 32-битный инсталлятор: [python-2.7.10.msi|https://www.python.org/ftp/python/2.7.10/python-2.7.10.msi])
# *PyGTK 2.24* [Сайт|http://www.pygtk.org/downloads.html] (прямая ссылка на 32-битный инсталлятор: [pygtk-all-in-one-2.24.2.win32-py2.7.msi|http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/pygtk-all-in-one-2.24.2.win32-py2.7.msi])
# *PySerial 2.7* [Сайт|https://pythonhosted.org/pyserial/] (прямая ссылка на 32-битный инсталлятор: [pyserial-2.7.win32.exe|https://pypi.python.org/packages/47/c9/7802e11ab388ad1539de716649add8bb8ca8bdff660364b3a404f79c27b7/pyserial-2.7.win32.exe#md5=21555387937eeb79126cde25abee4b35])
# *PyWin32 build 221* [Сайт|https://sourceforge.net/projects/pywin32/] (ссылка на 32-битный инсталлятор: [pywin32-221.win32-py2.7.exe|https://sourceforge.net/projects/pywin32/files/pywin32/Build%20221/pywin32-221.win32-py2.7.exe/download])
# *zope.interface 4.1.3* [Сайт|https://zopeinterface.readthedocs.io] (прямая ссылка на 32-битный инсталлятор: [zope.interface-4.1.3.win32-py2.7.exe|https://pypi.python.org/packages/49/5f/ed5ea875af4e802198d035efe985d341d9b50edddbc22b785d2ef4b9eb66/zope.interface-4.1.3.win32-py2.7.exe#md5=e0a5bbc762126157b63d0233e26cc751])
# *Twisted 15.4.0* [Сайт|http://twistedmatrix.com/trac/wiki/Downloads] (прямая ссылка на 32-битный инсталлятор: [Twisted-15.4.0.win32-py2.7.msi|http://twistedmatrix.com/Releases/Twisted/15.4/Twisted-15.4.0.win32-py2.7.msi])
Теоретически, поддерживаются ККТ FPrint-55K, FPrint-22K, FPrint-11ПТК и FPrint-77ПТК, поддерживающие _протокол Атол версии 2.4 с включенным режимом совместимости 1.0_
Если Ваше устройство работает по протоколу версии 3, то переключить его на протокол 2 версии можно через Сервисный режим.

h3. tray_proxy под Ubuntu, Debian
h4. Режим совместимости для протокола 2.4 и ФФД 1.0

Для работы необходимо:
Для оборудования с версией протокола 3\+ необходимо включить режим совместимости через драйвер идущий в поставке
!kkm_sec_kod.png|border=0,width=450!

# *Python 2.7*: _apt install python2.7 python-pip python-dev build-essential_
# *PyGTK 2.24*: _apt install python-gtk2_
# Обновить *pip*: _pip install \--upgrade pip_
# *PySerial 2.7*: \_pip install pyserial==2.7
# *zope.interface 4.1.3*: _pip install zope.interface==4.1.3_
# *Twisted 15.4.0*: _pip install Twisted==15.4.0_
На 4 шаге установите значения:
* Таблица 2 Ряд 1 Поле 109
* Значение установите 001

Скрипт установки:
h3. Verifone vx820. Безналичная оплата с терминалов
Для того, чтобы биллинг мог отправлять команды на терминал Verifone для списания конкретной суммы с абонентов, необходимо провести следующую настройку:

{code}
#!/bin/bash
apt install python2.7 python-pip python-dev build-essential python-gtk2
pip install --upgrade pip
pip install pyserial==2.7 zope.interface==4.1.3 Twisted==15.4.0
{code}
# TrayProxy
{code}POS = 'PILOTNT'
POS_PATH = r'C:\sc552'{code}
#* *POS* - включение поддержки POS-терминала, PILOTNT -- имя адаптера (в данный момент единственный)
#* *POS_PATH* - путь где искать файл _pilot_nt.dll_. Чаще всего ПО Сбербанка располагается в папке _C:\sc552_ \\ \\
# Перейти на вкладку *Платежные системы - Настройки веб-кассы* и выставить опцию *ИСПОЛЬЗОВАТЬ POS-ТЕРМИНАЛ*
!kassa1.png|border=0,width=760! \\ \\
# Для того, чтобы можно было отправить команды на терминал, необходимо перейти в меню *Веб-касса*, найти нужного абонента и добавить *Безналичный* приход, выставив данную опцию.
!kassa2.png|border=0,width=370! \\ \\
# После добавления прихода, он будет отображен у абонента. Для того, чтобы данную сумму списать с карты абонента, необходимо рядом с платежом выбрать пункт *Оплатить картой*
!kassa3.png|border=0,width=230!

h3. Режим совместимости для протокола 2.4 и ФФД 1.0
После этого команды будут отправлены на терминал и абоненту будет предложено вставить/приложить карту.
Как только списание завершится, биллинг автоматически отправит команды на печать чека.

Для оборудования с версией протокола 3\+ необходимо включить режим совместимости через драйвер идущий в поставке
!kkm_sec_kod.png|border=1!
{warning}
Внимание: Опция *Оплатить картой* будет доступна только для безналичных платежей!
{warning}

На 4 шаге установите значения:
{color:#000000}Таблица 2 Ряд 1 Поле 109{color}
h2. Настройка биллинга

{color:#000000}Значение установите {color}{color:#000000}001{color}
В [настройках веб-кассы|CarbonBilling:Веб-интерфейс кассира] в поле "*ККМ (PIRIT, ATOL И Т.П.)*" нужно указать протокол:
{info} Для всех новых инсталяций и инсталяций на Linux используется Атол версии 3{info}
* +Оставьте пустым+ для _АТОЛ версии 3_
* *ATOL* - для АТОЛ версий 1 и 2
* *SHTRIH_COM* - для ШТРИХ-М
* *PIRIT* - для ПИРИТ

h1. Решение проблем с tray_proxy
У АТОЛ есть пароли оператора и смены режима:
* *ККМ ПАРОЛЬ ДОСТУПА* - по умолчанию "0"
* *ККМ ПАРОЛЬ СМЕНЫ РЕЖИМА* - по умолчанию "30".

h1. Решение проблем с TrayProxy

Для работы с ККМ необходимо:
1) Перейти на вкладку "Веб - касса" из меню основной платформы

!BASE.png|border=1!
# Перейти на вкладку "Веб - касса" из меню основной платформы
!BASE.png|border=0,width=100! \\ \\
2) # Выбрать вкладку "ККМ"
!KKT.png|border=0,width=350! \\ \\
# В открывшемся меню нажать на кнопку "Запустить ККМ"

Если биллинг выдаст ошибку необходимо:
# Открыть файл *settings.py* и выставить в поле *"DEBUG"* значение *"1"*
# запустить файл *main.pyw* из командной строки с помощью _python_.
# Для запуска из командной строки необходимо перейти в каталог с установленным питоном и выполнить команду *python 'путь до файла main.pyw"*, напирмер:
{code}python C:\tray_proxy\main.pyw{code}
# После этого откроется окно с подробным логом
# Ещё раз нажмите кнопку *"Запустить ККМ"* и увидите какую именно ошибку выдает tray_proxy

!KKT.png|border=1!

3) В открывшемся меню нажать на кнопку "Запустить ККМ"

{info}
В случае, если биллинг выдаст ошибку необходимо открыть файл *settings.py* и выставить в поле *"DEBUG"* значение *"1"* и запустить файл *main.pyw* из командной строки с помощью python. Для запуска из командной строки необходимо перейти в каталог с установленным питоном и выполнить команду *python 'путь до файла main.pyw"*. После этого откроется окно с подробным логированием. Чтобы увидеть какую именно ошибку выдает tray_proxy, необходимо ещё раз нажать кнопку *"Запустить ККМ"* и проверить какая именно ошибка появляется.{info}

h32. Нет связи с ККМ
Убедитесь что с биллинга доступен порт 8080 компьютера оператора, на котором запущен TrayProxy.
Если компьютер находится за NAT, пробросьте порт на маршрутизаторе.
В момент нажатии кнопки *Открыть смену* биллинг пытается отправить команду на tray_proxy, который находится на компьютере оператора, поэтому, если у биллинга нет доступа до компьютера оператора - связи не будет.
{info}
h1. Verifone vx820. Безналичная оплата с терминалов.
Для того, чтобы биллинг мог отправлять команды на терминал Verifone для списания конкретной суммы с абонентов, необходимо провести следующую настройку:
1) Перейти на вкладку *Платежные системы - Настройки веб-кассы* и выставить опцию *ИСПОЛЬЗОВАТЬ POS-ТЕРМИНАЛ*

!kassa1.png|border=1!
h2. Некорректный ответ API от ККМ
Возможно указаны неверные пароли. Необходимо перейти на вкладку *Платежные системы - Настройки веб-кассы* и поменять значения 30 и 0 у полей *ККМ ПАРОЛЬ ДОСТУПА* и *ККМ ПАРОЛЬ СМЕНЫ РЕЖИМА*

2) Для того, чтобы можно было отправить команды на терминал, необходимо перейти в меню *Веб-касса*, найти нужного абонента и добавить *Безналичный* приход, выставив данную опцию.
h2. Произошла ошибка api: Неверная длина
У ККМ есть ограничение длины строки, у некоторых моделей это значение немного отличается. По умолчанию задано 48 символов. Ошибка "Произошла ошибка api: Неверная длина" означает, что для Вашего аппарата необходимо указать другое значение этого параметра. Изменить можно с помощью файла /app/asr_billing/cfg/kkm_atol_webcash.json , записав туда:
{code}
{"stringMax": 32}
{code}
Вместо "32" необходимо указать длину строки для Вашего аппарата.

!kassa2.png|border=1!
h2. Выполняется другая команда
Если биллинг выдает ошибку "Выполняется другая команда" - скорее всего драйвер не может запуститься, либо не закрыли диалог настроек АТОЛ.

3) После добавления прихода, он будет отображен у абонента. Для того, чтобы данную сумму списать с карты абонента, необходимо рядом с платежом выбрать пункт *Оплатить картой*
h2. Драйвер не готов
Если Вы используете Windows и АТОЛ версии 3, убедитесь что установлен 32-битный драйвер +даже если ОС 64-битная+ - это можно посмотреть в оснастке "[Установка и удаление программ|https://support.microsoft.com/ru-ru/help/4028054/windows-10-repair-or-remove-programs]"

!kassa3.png|border=1!
h2. Если все выше не помогло, что дать техподдержке чтобы мне помогли?

{warning}
Внимание: Опция *Оплатить картой* будет доступна только для безналичных платежей!
{warning}

h5. После этого команды будут отправлены на терминал и абоненту будет предложено вставить/приложить карту. Как только списание завершится, биллинг автоматически отправит команды на печать чека.
# Включите _DEBUG_ в settings.py: *DEBUG = 1*
# Запустите TrayProxy
# Выполните команду с биллинга
# Если в интерфейсе кассы появилась ошибка, сделайте скриншот
# Создайте заявку и приложите к ней:
#* Файл _debug.log_
#* Файл настроек _settings.py_
#* Скриншот ошибки