Доля безналичных оплат в торговле неуклонно растет и сегодня уже существует законодательное требование к торговым точкам, согласно которому наличие POS-терминала является обязательным требованием. Это создает проблемы в скорости обслуживания клиентов и как следствие к увеличению кассовых мест для удовлетворения покупателей. Большая часть моих проектов это надежная интеграция различных систем, и в этой статье будет описан опыт совмещения на примере компании: КТС.
Вводные данные:
- 10 областей Украины, 15 городов, 24 магазина;
- банка-эквайрер — «Приватбанк», POS-терминалы Ingenico iCT220, iCT250;
- автоматическое разнесение эквайринговых платежей из «Приват24» для юридических лиц;
- срок запуска 3-4 недели.
Прежде чем переходить к описанию интеграции, хотелось бы отметить огромный плюс работы с POS-терминалами Ingenico — возможность загружать настройки POS-терминала онлайн из банка. Это полезно когда, например, необходимо добавить в терминал новую организацию или услугу, но если присутствует системная ошибка, к сожалению, вызова техника из банка не избежать.
Проблематика
Если POS-терминал не интегрирован с регистратор расчетных операций (РРО) или учетной системой, возникают проблемы в скорости обслуживания клиентов и некоторые неудобства:
- кассир вбивает данные об покупке в учетную систему или РРО;
- вбивает сумму покупки в один из доступных POS-терминалов;
- берет платежную карту в руки и проводит ее в POS-терминале (не честные на руку кассиры могут сделать дамп карты, что в дальнейшем могут обернутся проблемами для торговой точки);
- выбирает один из доступных сервисов оплаты и просит клиента ввести ПИН-код;
- в случае успеха, из чека вводит последний 4 цифры карты в учетную систему или РРО;
- кассир мог ошибиться и могут возникнуть проблемы со сдачей кассы или проведением выписки банка, или вообще выполнить двойной возврат по карте.
В случае интеграции, кассир вносит данные только в учетную систему или РРО и выбирает способ оплаты: наличными или картой (так же могут быть доступны множество других типов\сервисов оплаты связанных с спецификой организации). Клиенту только остается воспользоваться POS-терминалом, который стоит в удобном месте для покупателя. В случае успешной оплаты, кассиру остается только выдать кассовый чек.
Интеграция
Подключение POS-терминала
На терминалах используется программное обеспечение (приложение) T-Master TE7E от компании «Банкомсвязь».
Компания предоставляет унифицированные средства интеграции, которые можно получить обратившись по адресу: support@bkc.com.ua, а так же варианты интеграции с кассовыми аппаратами.
Терминалы имеют несколько вариантов подключения:
- USB — для подключения вам понадобится от 2 до 4 кабелей (кабель питания, USB-кабель в компьютер, USB-кабель для PIN-pad и Ethernet-кабель). Для связи с банком можно использовать GPRS и/или Ethernet-кабель. Как правило, транзакции проходят быстрее и без повторных попыток, если для связи с банком использовать Ethernet.
Основная проблема USB это то, что подключение неудобно администрировать и не оставляет возможности использовать мобильные кассы на планшете или смартфоне. Реакция на сломанный терминал возникает только тогда, когда клиент решил расплатится картой. - Ethernet — для подключения вам понадобится от 2 до 3 кабелей (кабель питания, Ethernet-кабель и USB-кабель для PIN-pad). Для связи с банком можно использовать GPRS и/или Ethernet-кабель. Как правило, транзакции проходят быстрее и без повторных попыток, если для связи с банком использовать Ethernet.
Этот вариант подключения хорош тем, что можно организовать работу POS-терминала с планшетом, смартфоном, облачной системой (например, 1С-fresh) или подключить на основной сервер организации (вариантов очень много). В автоматическом режиме производить мониторинг состояния POS-терминала и при появлении проблемы сразу начинать ее решать.
Для реализации проекта, было выбрано подключение с помощью Ethernet. Для осуществления данного типа подключения необходимо подать заявки в банк с указанием таких данных:
- мерчант торговой точки и/или терминала, можно узнать у сотрудника банка который занимается обслуживанием организации;
- IP — IP-адрес POS-терминала в сети предприятия;
- mask — маска сети в которой будет находиться POS-терминал;
- gateway — шлюз;
- жесткий режим — если указан, с терминалом возможна работа только из кассовой программы. На терминале будет доступны: «Z-отчет», «X-отчет» и «Загрузить параметры»;
- указать список доступных сервисов, которые будут использоваться торговой точкой. «Приватбанк» предлагает такие сервисы:
- Оплата картой (S***0***) — торговый мерчант;
- Бонус+ основной (L***2***);
- Бонус+ бонусный (L***3***);
- Оплата Частями в периоде (X***0***);
- Оплата Частями (X***1***);
- Мгновенная Рассрочка (X***2***);
- Оплата Частями Льготная (X***4***) — на данный момент не используется;
- Мгновенная Рассрочка Акция (X***9***);
- Мобильное пополнение Картой (P***C***);
- AirPay оплата по коду (Y***B***);
- Связь с банком (G***0***);
- Табелирование (S***T***);
- Инкассация (I1**0***);
- Инкассация (IG**0***);
- Финансовый телефон (S***0***);
- Вызов банка (CALLBANK) — позволяет заказать бумагу для POS-терминала в банке;
- Подтверждение инкассации (IP**0***);
- Сервис возврат (REFUND) — позволяет делать возврат оплаты клиенту с контролем банком суммы возврата и повторного возврата клиенту.
После обработки ваших запросов и загрузки новых параметров, можно попытаться достучатся до POS-терминал и проверить его работоспособность.
Сервис интеграции
Ознакомившись с доступными решениями на рынке, мне стало понятно, что они жутко неудобные и связывают руки в плане привнесения инноваций в процес обслуживания клиентов. Со своей стороны, я реализовал сервис который является фасадом и скрывает сложность всей интеграции, а так же создает REST-интерфейс для каждого POS-терминала, что в итоге получилось:
- возможность инициировать оплату с любого устройства что имеет доступ в сеть будь-то смартфон, планшет или умная лампочка;
- возможность общаться с POS-терминалами с помощью JSON или XML;
- удобный инсталятор (x86-64), нет необходимости регистрировать компоненты или что-то еще, а так же скачивать с интернета другие необходимые программы для работы;
- после установки сервиса, POS-терминалы уже доступны через REST;
- для больше надежности присутствует возможность подключения сервиса очередей RabbitMQ.
Основные команды сервиса интеграции
-
Оплата картой
REQUEST URL Production Base URL: http://Host:Port Operation: POST /POS/v1/Purchase Accept: application/json Content-type: application/json
REQUEST BODY
SAMPLE REQUEST { "Connection": { "IP": "192.168.50.18", "Port": "2000", // Non mandatory "TerminalId": "S1RO0E58", "ErrorLanguage": 2, // Non mandatory "LogLevel": 0 // Non mandatory }, "MerchantId": 1, "Amount": 1, "AddAmount" : 0 }
RETURNS
SAMPLE RESPONSE { "transaction": { "Amount": 691701, "AddAmount": 0, "IssuerName": "Privat VISA", "CardHolder": "JOHN/DOE", "Pan": "4119XXXXXXXX2682", "ExpDate": "18/12", "MerchantId": "S1RO0D0E", "TerminalId": "S1RO0D0E", "DateTime": "1492131313", "InvoiceNumber": 83, "AuthCode": "451354", "RRN": "023011279174", "AddData": "" }, "success": true }
-
Оплата сервисом
REQUEST URL Production Base URL: http://Host:Port Operation: POST /POS/v1/PurchaseService Accept: application/json Content-type: application/json
REQUEST BODY
SAMPLE REQUEST { "Connection": { "IP": "192.168.50.18", "Port": "2000", // Non mandatory "TerminalId": "S1RO0E58", "ErrorLanguage": 2, // Non mandatory "LogLevel": 0 // Non mandatory }, "MerchantId": 1, "Amount": 1, "ServiceParams" : "0054//022759561493" }
RETURNS
SAMPLE RESPONSE { "transaction": { "Amount": 691701, "AddAmount": 0, "IssuerName": "Privat VISA", "CardHolder": "JOHN/DOE", "Pan": "4119XXXXXXXX2682", "ExpDate": "18/12", "MerchantId": "S1RO0D0E", "TerminalId": "S1RO0D0E", "DateTime": "1492131313", "InvoiceNumber": 83, "AuthCode": "451354", "RRN": "023011279174", "AddData": " I am DOE JOHN..." }, "success": true }
-
Получить данные терминала
REQUEST URL Production Base URL: http://Host:Port Operation: POST /POS/v1/RequestPOSInfo Accept: application/json Content-type: application/json
REQUEST BODY
SAMPLE REQUEST { "IP": "192.168.50.18", "Port": "2000", // Non mandatory "TerminalId": "S1RO0E58", "ErrorLanguage": 2, // Non mandatory "LogLevel": 0 // Non mandatory }
RETURNS
SAMPLE RESPONSE { "terminalInfo": { "sofwareVersion": "TE7E123", "profileId": "S1RO0E5800CT21449104", "acquirers": [ "S1RO0E58", "S1RO0E59", "Y1ROBE58", "Y1ROBE59", "P1ROCE58", "I1RO0E58", "I1RO0E58", "IGRO0E58", "S1RO0E58", "IPRO0E58", "S1RO0E58", "CALLBANK", "X1RO1E58", "X1RO1E59", "X1RO2E58", "X1RO2E59", "X1RO9E58", "X1RO9E59", "REFUND" ] }, "success": true }
-
И другие команды…
Порядок интеграции с POS-терминалом банка «Приватбанк»
- Перед началом работы необходимо получить список мерчантов и сервисы которые поддерживает терминал;
- Далее необходимо обработать информацию из поля
terminalInfo
из тела ответа на запрос. Желательно, в учетной системе сохранитьprofileId
это необходимо чтобы избежать подмены терминала злоумышленниками. КонтрольprofileId
желательно проводить перед инициализацией операции через терминал. Эта информация должна иметь связь с объектом, который отображает физическую сущность эквайрингового терминала в учетной системе; -
Следующий шаг — обработка массив значений
acquirers
. Обработку необходимо выполнять с начала массива. Первые элементы это будут наши торговые мерчанты с маской:- S — постоянный символ торгового мерчанта;
- 1RO — маска формирующая в пределах региональной принадлежности терминала. RO — в данном случае показывает принадлежность к Северо-Западное РУ банка. В филиалах где превышен лимит используемых вариантов уже используются цифры — S1110***;
- 0 (пятый символ) — так же постоянен;
- последние 3 символа — генерируются системой с постоянным приростом. Какие последние 3 символа будут у мерчанта для нового торговца подключенного к POS-терминалу — сказать невозможно (эти данные необходимо каждый раз получать из терминала).
-
Мерчанты идут в начале массива, если возникает ситуация
S1110001
,S1110002
,L1112001
,S1110001
четвертый элемент — это уже не торговый мерчант.
Нумерация мерчантов в терминале начинается с «1». Весь список мерчантов и сервисов:- Оплата картой (S***0***) — торговый мерчант;
- Бонус+ основной (L***2***);
- Бонус+ бонусный (L***3***);
- Оплата Частями в периоде (X***0***);
- Оплата Частями (X***1***);
- Мгновенная Рассрочка (X***2***);
- Оплата Частями Льготная (X***4***) — на данный момент не используется;
- Мгновенная Рассрочка Акция (X***9***);
- Мобильное пополнение Картой (P***C***);
- AirPay оплата по коду (Y***B***);
- Связь с банком (G***0***);
- Табелирование (S***T***);
- Инкассация (I1**0***);
- Инкассация (IG**0***);
- Финансовый телефон (S***0***);
- Вызов банка (CALLBANK) — позволяет заказать бумагу для POS-терминала в банке;
- Подтверждение инкассации (IP**0***);
- Сервис возврат (REFUND) — позволяет делать возврат оплаты клиенту с контролем банком суммы возврата и повторного возврата клиенту.
- Оплата картой — необходимо отправить запрос с указанием индекса мерчанта (минимальное значение: 1), суммой в копейках и суммой скидки так же в копейках (по умолчанию: 0);
- Оплата частями — необходимо указать номер сервисного мерчанта в терминале, сумму оплаты и сервисные параметры. Сервисные параметры имеют вид:
0046//6
, где0046
— код сервиса;
6
— количество платежей.Версии сервиса «Оплата частями» на терминале различаются между собой по маске мерчантов. Существуют маски мерчантов для версий «Оплаты частями»:
- V1 — X___0 —
0044
/0045
/0061
(Деньги в периоде) - V2 — X___1 —
0046
/0062
/0047
/0113
(Стандартная) - V3 — X___2 —
0046
/0062
/0047
/0113
(Мгновенная рассрочка) - V4 — X___4 —
0046
/0062
/0047
(Не используется) - V6 — X___6 —
0046
/0062
/0047
- V9 — X___9 —
0046
/0062
/0047
(Мгновенная рассрочка акция)
Соответственно номера сервисов всех версий «Оплаты частями», возврата и частичного возврата «Оплаты частями», аннулирование сервисной операции.
Все мерчанты сервиса «Оплаты частями» начинаются на X, версия сервиса отличается по пятому символу в мерчанте.Для определения под каким порядковым номером находится конкретный мерчант сервиса «Оплаты частями» в конкретном терминале необходимо анализировать
acquirers
изterminalInfo
.После успешной операции по сервису «Оплаты частями» авторизационный хост присваивает данные (номер договора) клиенту, по которым клиент будет погашать задолженность банку. Так же номер договора используется при частичном или полном возврате товаров приобретенных по сервису «Оплаты частями».
Для получение этих данных необходимо прочитать их изtransaction.AddData
после успешного завершение транзакции «Оплаты частями».Чтобы произвести возврат по сервису «Оплаты частями» необходимо указать номер сервисного мерчанта в терминале, сумму оплаты и сервисные параметры. Сервисные параметры имеют вид:
номер сервиса/номер договора
, где- номер сервиса полного возврата
0062
; - номер сервиса частичного возврата
0047
; - Так же есть вариант использование одного номера сервиса при возврате вместо 2, через один номер сервис отменяется частями до полного закрытия договора на авторизационном хосте. Номер сервиса частичный возврат
0079
.
- V1 — X___0 —
- Сервис возврат — сервис который необходимо использовать для проведения операции «Возврата» денежных средств на карту клиента, по ранее проведенной операции «продажа».
Необходимо указать номер сервисного мерчанта (
REFUND
) в терминале, сумму оплаты и сервисные параметры. Сервисные параметры имеют вид:0054//012345678901
, где
0054
— код сервиса
012345678901
— код RRN, индивидуален для каждой операции, без него невозможно провести возврат.Ограничения:
- временной промежуток не более 3 месяцев между оригинальной продажей и возвратом, в противном случае возврат производится на основании обращения в банк по телефону 3700;
- возврат на другую карту, возврат производится на основании обращения в банк по телефону 3700;
- карта возврата=карта оригинальной операции продажа (по коду RRN);
- сумма возвратных операций совокупно не должна превышать сумму продажи.
- Сервис вызов банка — используется для заказа бумаги для POS-терминала.
Необходимо указать номер сервисного мерчанта (CALLBANK
) в терминале, сумму «0» и сервисные параметры. Сервисные параметры имеют вид:0010//0978382104
, где
0010
— код сервиса
0978382104
— номер телефона сотрудника торгово-сервисного предприятия (ТСП).
Послесловие
На момент написания статьи, одна копия сервиса в облаке обслуживает 24 магазина в 15 городах в 10 областях Украины.
Разглашать технические детали проекта пока не могу, но если будут изменения тогда статья будет существенно расширена. Довольно хорошая статья по теме Ingenico iCT220/250 + 1С 7.7. Технические даты проекта:
- 23 марта’17 начало проекта;
- 31 марта’17 технический запуск на первом магазине;
- 07 апреля’17 технический запуск во всех магазинах;
- 10 апреля’17 полноценная работа совмещения;
- 15 апреля’17 автоматический импорт из «Приват24» для юр. лиц выписок по эквайрингу.