Публичное пространство
SetRetail10 ◾️ Плагин QP5 - Обслуживание юридических лиц
- SR-4993Получение подробных данных проблемы… СТАТУС
- CR-5866Получение подробных данных проблемы… СТАТУС
10.3.2.0
Описание
QP5 - это интернет-маназин, в котором также обслуживаются покупатели с виртуальной дисконтной картой юридического лица.
Установка файла плагина
Файл плагина входит в состав версии и отдельной его установки на сервер и кассы не требуется.
Настройка
1. Включите в шаблоне касс функциональность работы с юридическими лицами.
2. Перейдите в Интеграция → Внешние процессинги → кликните
.3. Введите в левую секцию поиска qp5 → кликните Внешние процессинги лояльности → введите в правую секцию поиска qp5 → установите флажок
Плагин QP5 → кликните .4. Войдите в настройки плагина.
5. Установите требуемые параметры (в настройках плагина установлены базовые параметры для работы) → клинките
.Настройки плагина будут отправлены на кассы. Перезагрузите кассы в линейке.
Начиная с версии 10.3.3.0 длина номера карты = 12 символов.
Категория карт на сервере
Для работы функциональности должна быть создайте категория карт на сервере стандартным образом.
Установите необходимые параметры
1. Введите наименование категории → установите переключатель Персонализированные карты.
2. Если, требуется начисление бонусных накоплений, создайте счет и привяжите его.
3. Обязательно создайте диапазон карт без хеша.
Интеграция
Предварительно карты должны быть загружены из ERP-системы согласно интеграционной документации.
Поле debitor-number
обязательно должно содержать формат данных вида 3079bb8c-6ce8-11ea-80d1-005056b2f60f
<cards-catalog> <internal-card card-type-guid="48484" number="770000000070" expiration-date="2049-12-31T00:00:00" status="ACTIVE" attached-to-counterparty="true"> <counterparty inn="1312121212" kpp="123456489" name="ПАО НПК" full-name="ПАО Наша Публичная Компания" address="ул. Тестовая д.1" physical-address="ул. Дебитовая д.1" debitor-number="3079bb8c-6ce8-11ea-80d1-005056b2f60f"/> <client guid = "298116" last-name = "Иванов" first-name = "Роман" middle-name = "Аркадьевич" sex = "MALE" birth-date = "1976-05-01" email="test@crystals.ru" send-by-email="true" receipt-feedback="BY_EMAIL"/> </internal-card> </cards-catalog>
Карта после поиска должна отображаться с привязанным юридическим лицом и анкетой клиента (если есть).
Логика работы
- Клиент (владелец карты) в мобильном приложении QP5 Club формирует динамический QR-код для идентификации.
- Сгенерированный QR-код состоит из 16 цифр (эти же цифры дублируются под QR-кодом на случай, если не удалось отсканировать код и его требуется ввести вручную):
- Первые 12 цифр - номер карты.
- Последние четыре цифры - это преобразованный хеш, вычисленный по определенному алгоритму, описанному ниже.
- Кассир сканирует QR-код или вводит его вручную на кассе.
- Все дисконтные карты загружаются из мастер-системы клиента (ERP) в SetRetail10, используя веб-сервис для импорта дисконтных карт (Импорт дисконтных карт и анкет клиентов из ERP в SetRetail10).
- При этом из входного json-файла (ERP) загружаются следующие данные:
card_number
(номер карты) должен быть загружен в поле number экземпляра внутренних карт “<internal-card>”.- Пример:
number="770000000070"
, формат - “Long“.
- Пример:
org_id
(идентификатор юридического лица) должен быть загружен в полеdebitor-number
контрагента внутренних карт (юридического лица)<counterparty>
.- Пример:
debitor-number="3079bb8c-6ce8-11ea-80d1-005056b2f60f“
, тип данных - “String“.
- Пример:
- Плагин на основании загруженных данных и времени сканирования QR-кода формирует проверочные 4 цифры:
- Конкатенация (склеивание) строк:
- Номер карты лояльности.
- Идентификатор юр. лица.
- Время сканирования QR-кода в UTC Unix Time, т. е. округленное текущее время до интервала 3 часа в меньшую сторону, например 16:46:30 → 15:00:00. Следует иметь в виду, что время преобразуется UTC Unix Time из GMT, а не из GMT+3.
- Полученная объединенная строка хешируется алгоритмом SHA1.
- Результирующий хеш преобразуется по алгоритму:
- Берутся первые 4 символа хеша.
- От каждого символа получается код символа ASCII.
- От каждого полученного кода символа берется первая цифра.
- Склеиваются символы в строку из 4 цифр.
- Конкатенация (склеивание) строк:
- Полученные 4 цифры сверяются с проверочными цифрами (последние 4 цифры отсканированного QR-кода).
- Если проверочные цифры совпали, то карта добавляется в чек.
- Если проверочные цифры не совпали, то проверяется предыдущий трехчасовой интервал по такому же алгоритму, т. е. меняется время сканирования с 15:00:00 на 12:00:00.
- Если новые вычисленные цифры совпали с проверочными, добавляеться карта в чек, в противном случае карта не добавляется.
- Следует учесть, что карта после идентификации добавляется в чек только в том случае, если она активна (это стандартное поведение).
- Пример для проверки.
- Время сканирования QR-кода (считается до миллисекунд) “1625495251725“, что соответствует 05.07.2021 14:27:31.725 GMT.
- Номер карты – “770000000070“.
- Идентификатор юридического лица – “3079bb8c-6ce8-11ea-80d1-005056b2f60f“.
- Округленное время сканирования до интервала 3 часов в меньшую сторону – “1625486400000“ (05.07.2021 12:00:00.000 GMT).
- Таким образом, получаем строку для вычисления хеша – “7700000000703079bb8c-6ce8-11ea-80d1-005056b2f60f1625486400000“.
- Хеш для строки – “8c40dff0f28c8ea33a36df65d3d458fcbbc0bca6“.
- По алгоритму, описанному выше, получаем 4 цифры – “5954“.
- Сравниваем с последними четырьмя цифрами QR-кода, видим, что они совпали, поэтому добавляем карту в чек (если она активна).
Запрет добавление карты без проверочного кода
- SR-5127Получение подробных данных проблемы… СТАТУС
- CR-6356Получение подробных данных проблемы… СТАТУС
10.3.3.0
Начиная с версии 10.3.3.0 карты с заданными в настройках плагина префиксом и длиной невозможно было добавить в чек без валидации проверочного QR-кода.
Пример работы
Кассир добавляет на кассе товары, сканирует QR-код карты клуба QP5 с мобильного телефона покупателя и завершает чек.
В операционном дне отобразится применённая карта юридического лица.
Будет произведен экспорт чека в ERP с применённой картой юридического лица:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <purchases count="1"> <purchase tabNumber="1" userName="Администраторов Администратор Администраторович" operationType="true" cashOperation="INCOME" operDay="2021-09-03+03:00" shop="2221" cash="61" shift="4" number="2" saletime="2021-09-03T22:17:36.683+03:00" begintime="2021-09-03T22:16:07.317+03:00" amount="160.99" discountAmount="0.00" inn="7802781104" qrcode="t=20210903T2217&s=160.99&fn=d4fa674c-8e96-4332-b89e-51846c9469f6&i=5&fp=0&n=1" fiscalDocNum="5;2" status="REGISTERED"> <plugin-property key="FISCAL_DOC_ID" value="5"/> <plugin-property key="UID_PURCHASE" value="e42cd3fe-2110-442f-9d5a-e6cb1400dc21"/> <plugin-property key="SM_CLIENT_GUID" value="198116"/> <positions> <position order="1" departNumber="1" goodsCode="00001" barCode="4600001000007" count="1.000" cost="14.23" nds="20.0" ndsSum="2.37" discountValue="0.00" costWithDiscount="14.23" amount="14.23" dateCommit="2021-09-03T22:16:07.332+03:00" insertType="1"> <plugin-property key="lineNumberAfterRegistration" value="1"/> <plugin-property key="countryName" value="Бельгия"/> </position> <position order="3" departNumber="1" goodsCode="00009" barCode="4600009000009" count="1.000" cost="118.23" nds="20.0" ndsSum="19.71" discountValue="0.00" costWithDiscount="118.23" amount="118.23" dateCommit="2021-09-03T22:16:18.021+03:00" insertType="1"> <plugin-property key="lineNumberAfterRegistration" value="3"/> <plugin-property key="countryName" value="Бельгия"/> </position> <position order="2" departNumber="1" goodsCode="00012" barCode="4600012000003" count="1.000" cost="28.53" nds="20.0" ndsSum="4.76" discountValue="0.00" costWithDiscount="28.53" amount="28.53" dateCommit="2021-09-03T22:16:12.912+03:00" insertType="1"> <plugin-property key="lineNumberAfterRegistration" value="2"/> <plugin-property key="countryName" value="Бельгия"/> </position> </positions> <payments> <payment typeClass="CashPaymentEntity" amount="170.00" description="Оплата наличными"/> <payment typeClass="CashChangePaymentEntity" amount="9.01" description=""/> </payments> <discountCards> <discountCard>770000000070</discountCard> </discountCards> <card type="INTERNAL" number="770000000070" guid="770000000070"/> </purchase> </purchases>
© 1994-2024, ООО «Кристалл Сервис Интеграция».
Все права защищены..