Техническое задание на разработку дополнительного модуля для кассы
Оглавление
2. Вызов модуля с экрана кассы
3. Административный интерфейс модуля
4. Хранение информации в модуле
5. Предпочтительный метод обмена данными
Номера карточек могут быть введены в одном из 2х форматов:
1. EAN-13 (13-значная последовательность цифр где 12 значащих и одна контрольная)
2. В формате номера карты VISA записанном на 2-й дорожке.
Варианты работы модуля:
1. ПО торговой точки в зависимости от схемы подключения к Системе либо рассчитывает линейную скидку, оформляет ее и запоминает для последующего отчета. Либо при подключении по «Бонусной схеме» только запоминает параметры операции и выводит на чеке информацию о том, что покупка совершена в рамках программы «Бонусов».
2. Информация об операциях в рамках Системы накапливается в течение какого-то периода и передается в Процессинг компании оператора для обработки и расчета суммарных бонусов Держателям.
Вариант «одноуровневой» работы, при котором отсутствует прямая связь между ПО точки и Процессингом. При этом последовательность операций выглядит следующим образом:
1. Держатель обращается на Точку, совершает покупку на сумму Х руб. и при оплате идентифицируется Картой.
2. ПО Точки сохраняет информацию о сумме покупке, моменте произведения операции и номере карты в локальной БД.
3. По окончании отчетного периода (от 1 дня до 1 месяца, например) данные на Точке обрабатываются, и формируется файл отчета в соответствии с одним из Протоколов.
4. Файл отчета упаковывается архиватором WinRAR с использованием пароля назначенного Точке и пересылается по электронной почте на сервер Процессинга.
5. Сервер определяет по имени файла отправителя и, применяя соответствующий пароль, распаковывает пакет.
6. Распакованный пакет импортируется в БД Процессинга и обрабатывается.
![]() |
Вариант «одноуровневой» работы, при котором доступна прямая связь между ПО точки и Процессингом. При этом последовательность операций выглядит следующим образом:
1. Держатель Карты обращается на Точку, совершает покупку на сумму Х руб. и при оплате идентифицируется Картой.
2. ПО Точки сохраняет информацию о сумме покупке, моменте произведения операции и номере карты в локальной БД.
3. ПО точки, используя HTTP-POST запрос, отправляет на сервер Процессинга информацию об операции в соответствии с одним из Протоколов.
4. Сервер обрабатывает переданный пакет, импортирует его в БД Процессинга.
5. Сервер возвращает, в качестве ответа на запрос, результат операции обработки для записи в БД ПО Точки.

Либо 2х уровневый вариант обмена информацией, когда в торговой сети информация внутри сети передается по корпоративным каналам, а центральный сервер сети производит сеанс обмена данными со шлюзом Процессинга.
При этом последовательность операций выглядит следующим образом:
1. Держатель обращается на Точку, совершает покупку на сумму Х руб. и при оплате идентифицируется Картой.
2. ПО Точки сохраняет информацию о сумме покупке, моменте произведения операции и номере карты в локальной БД.
3. Корпоративное ПО отправляет информацию о произведенной операции на центральный сервер Торговой Сети.
4. ПО Центрального Сервера Торговой Сети точки, используя HTTP-POST запрос, отправляет на сервер Процессинга информацию об операции в соответствии с одним из Протоколов.
5. Сервер обрабатывает переданный пакет, импортирует его в БД Процессинга.
6. Сервер возвращает, в качестве ответа на запрос, результат операции обработки для записи в БД ПО Точки.

Вызов модуля с экрана ПО торговой точки
Вызов модуля идентификации должен осуществляться либо из пункта меняю, либо нажатием "горячей" комбинации. При активации модуля на экран должно быть выведено окошко с заголовком "Бонусно - скидочная система " и полем для ввода номера карты.
Номер карты может быть считан с карты, либо введен вручную.
После ввода номера и оплаты чека транзакция сохраняется в базе модуля и передается на сервер компании оператора в зависимости от того как подключена торговая точка.
Административный интерфейс модуля
А административной части модуля должны настраиваться следующие параметры:
- ID торговой точки (терминала) в системе Валлет - VARCHAR(255)
- Пароль торговой точки - VARCHAR(255)
- Тип подключения (в настоящий момент доступен только вариант "Бонус") - VARCHAR(255)
- путь отправки HTTP-POST запроса - VARCHAR(255)
Административные операции
- Экспорт транзакций в файл за период.
Выбирается период времени, за который экспортируются данные о транзакциях в файл. Исключительно с целью "ручной сверки" при необходимости.
- Экспорт не отправленных транзакций в файл.
При этом экспортированные операции помечаются как "отправленные, в процессе доставки", но если происходит сеанс связи с сервером - они все равно отправляются в обычном порядке. Т.е. экспорт - это не замена отправки автоматически в общем случае, а подстраховка, на случай отсутствия возможности автоматической передачи.
- Импорт результатов обработки
При импорте разбирается "ответный" XML и статус записей устанавливается результат как будто сеанс связи прошел в автоматическом режиме.
Хранение информации на стороне клиента
На стороне клиента при каждой операции необходимо сохранять следующую информацию:
Номер «Карты»
Момент операции с точностью до секунды
Сумма операции в копейках
ID транзакции в базе торговой точки или номер чека (для возможности проведения сверки).
ID транзакции в базе компании оператора - для возможности проведения сверки
Предпочтительный метод обмена информацией
Непосредственно после совершения торговой операции модуль делает попытку отправить данные на сервер компании оператора.
В отправку входят данные по текущей операции и данные по всем операциям, не отправленным до настоящего момента, оформленные как пакет платежей в соответствии с протоколом передачи.
Если отправка проходит успешно, то переданные записи отмечаются как "отправленные и доставленные".
В случае, если отправка невозможна - данные по текущей транзакции сохраняются для отправки в дальнейшем и помечается как "не отправленные".
Описание протоколов
Протокол Wallet - XML 1.0
Список операций:
Передача информации по платежу
Передача информации по группе платежей
Передача информации по платежу:
Запрос:
<?xml version="1.0" encoding="UTF-8"?>
<request version="1.0">
<merchant>
<id>XXXX</id>
<signature>YYYY</signature>
</merchant>
<data>
<oper>payment</oper>
<payment id="QQQQ">
<cardnumber >ZZZZZZZZZZZZZ</cardnumber>
<timestamp>YYYYMMDDHHmmSS</timestamp>
<sum>0000000</sum>
</payment>
</data>
</request>
Где:
XXXX – уникальный идентификатор торговой точки,
YYYY – «цифровая подпись»,текстовая 16-ричная строка, вычисляемая по формуле:
Signature=sha1(DATA+PASSWORD).
DATA = участок запроса от тега <data> включая его, и до тега </data> включая его, из которой удалены все символы пробелов, табуляций, возврата каретки и перевода строки (\t\r\n).
PASSWORD = строка пароля торговой точки
DATA+PASSWORD – конкатенация строк.
QQQQ – уникальный идентификатор платежа в системе торговой точки. (ID в базе или что угодно позволяющее проводить сверку при необходимости)
ZZZZZZZZZZZZZ – номер «Карты»
0000000 – сумма покупки в копейках.
Ответ:
<?xml version="1.0" encoding="UTF-8"?>
<request version="1.0">
<merchant>
<id>XXXX</id>
<signature>YYYY</signature>
</merchant>
<data>
<payment id="QQQQ">
<result>ERROR_CODE</result>
<check>WALLET_CHECK_NUMBER</check>
</payment>
</data>
</request>
Где:
XXXX – уникальный идентификатор торговой точки,
YYYY – «цифровая подпись»,текстовая 16 ричная строка, вычисляемая по формуле:
Signature=sha1(DATA+PASSWORD).
DATA = участок запроса от тега <data> включая его, и до тега </data> включая его, из которой удалены все символы пробелов, табуляций, возврата каретки и перевода строки (\t\r\n).
PASSWORD = строка пароля торговой точки
DATA+PASSWORD – конкатенация строк.
QQQQ – уникальный идентификатор платежа в системе торговой точки. (ID в базе или что угодно позволяющее проводить сверку при необходимости)
ERROR_CODE - 0 или код ошибки, если больше 0
WALLET_CHECK_NUMBER - уникальный идентификатор операции в базе компании оператора
Передача информации по блоку платежей:
Запрос:
<?xml version="1.0" encoding="UTF-8"?>
<request version="1.0">
<merchant>
<id>XXXX</id>
<signature>YYYY</signature>
</merchant>
<data>
<oper>payblock</oper>
<payments>
<payment id="QQQQ1">
<cardnumber >ZZZZZZZZZZZZZ</cardnumber>
<timestamp>YYYYMMDDHHmmSS</timestamp>
<sum>0000000</sum>
</payment>
...
<payment id="QQQQN">
<cardnumber >ZZZZZZZZZZZZZ</cardnumber>
<timestamp>YYYYMMDDHHmmSS</timestamp>
<sum>0000000</sum>
</payment>
</payments>
</data>
</request>
Где:
XXXX – уникальный идентификатор торговой точки,
YYYY – «цифровая подпись»,текстовая 16-ричная строка, вычисляемая по формуле:
Signature=sha1(DATA+PASSWORD).
DATA = участок запроса от тега < payments > включая его, и до тега </ payments > включая его из которой удалены все символы пробелов, табуляций, возврата каретки и перевода строки (\t\r\n).
PASSWORD = строка пароля торговой точки
DATA+PASSWORD – конкатенация строк.
QQQQ1,…,QQQQN – уникальные идентификаторы платежей в системе торговой точки. (ID в базе или что угодно позволяющее проводить сверку при необходимости)
ZZZZZZZZZZZZZ – номер «Карты»
0000000 – сумма покупки в копейках.
Ответ:
<?xml version="1.0" encoding="UTF-8"?>
<request version="1.0">
<merchant>
<id>XXXX</id>
<signature>YYYY</signature>
</merchant>
<data>
<payment id=”QQQQ1”>
<result>ERROR_CODE</result>
<check>WALLET_CHECK_NUMBER</check>
</payment>
...
<payment id=”QQQQN”>
<result>ERROR_CODE</result>
<check>WALLET_CHECK_NUMBER</check>
</payment>
</data>
</request>
XXXX – уникальный идентификатор торговой точки,
YYYY – «цифровая подпись»,текстовая 16-ричная строка, вычисляемая по формуле:
Signature=sha1(DATA+PASSWORD).
DATA = участок запроса от тега < data > включая его, и до тега </ data > включая его из которой удалены все символы пробелов, табуляций, возврата каретки и перевода строки (\t\r\n).
PASSWORD = строка пароля торговой точки
DATA+PASSWORD – конкатенация строк.
QQQQ1,…,QQQQN – уникальные идентификаторы платежей в системе торговой точки. (ID в базе или что угодно позволяющее проводить сверку при необходимости)
ERROR_CODE - 0 или код ошибки, если больше 0
WALLET_CHECK_NUMBER - уникальный идентификатор операции в базе компании оператора
Запрос:
<?xml version="1.0" encoding="UTF-8"?>
<request version="1.0">
<merchant>
<id>XXXX</id>
<signature>YYYY</signature>
</merchant>
<data>
<oper>bonusback</oper>
<payment id="QQQQ">
<timestamp>YYYYMMDDHHmmSS</timestamp>
<sum>0000000</sum>
</payment>
</data>
</request>
Где:
XXXX – уникальный идентификатор торговой точки,
YYYY – «цифровая подпись»,текстовая 16-ричная строка, вычисляемая по формуле:
Signature=sha1(DATA+PASSWORD).
DATA = участок запроса от тега <data> включая его, и до тега </data> включая его, из которой удалены все символы пробелов, табуляций, возврата каретки и перевода строки (\t\r\n).
PASSWORD = строка пароля торговой точки
DATA+PASSWORD – конкатенация строк.
QQQQ – уникальный идентификатор платежа в системе торговой точки. (ID в базе или что угодно позволяющее проводить сверку при необходимости)
0000000 – сумма покупки в копейках.
Если сумма равна 0, то выполняется удаление транзакции из системы компании оператора.
Ответ:
<?xml version="1.0" encoding="UTF-8"?>
<request version="1.0">
<merchant>
<id>XXXX</id>
<signature>YYYY</signature>
</merchant>
<data>
<payment id="QQQQ">
<result>ERROR_CODE</result>
<check>WALLET_CHECK_NUMBER</check>
</payment>
</data>
</request>
Где:
XXXX – уникальный идентификатор торговой точки,
YYYY – «цифровая подпись»,текстовая 16-ричная строка, вычисляемая по формуле:
Signature=sha1(DATA+PASSWORD).
DATA = участок запроса от тега <data> включая его, и до тега </data> включая его, из которой удалены все символы пробелов, табуляций, возврата каретки и перевода строки (\t\r\n).
PASSWORD = строка пароля торговой точки
DATA+PASSWORD – конкатенация строк.
QQQQ – уникальный идентификатор платежа в системе торговой точки. (ID в базе или что угодно позволяющее проводить сверку при необходимости)
ERROR_CODE - 0 или код ошибки, если больше 0
WALLET_CHECK_NUMBER - уникальный идентификатор операции в базе компании оператора.
В случае, если заказывается удаление транзакции то WALLET_CHECK_NUMBER возвращается == 0
| < Предыдущая | Следующая > |
|---|



