Публичное пространство

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>

Карта после поиска должна отображаться с привязанным юридическим лицом и анкетой клиента (если есть).

Логика работы

  1. Клиент (владелец карты) в мобильном приложении QP5 Club формирует динамический QR-код для идентификации. 
  2. Сгенерированный QR-код состоит из 16 цифр (эти же цифры дублируются под QR-кодом на случай, если не удалось отсканировать код и его требуется ввести вручную):
    1. Первые 12 цифр - номер карты.
    2. Последние четыре цифры - это преобразованный хеш, вычисленный по определенному алгоритму, описанному ниже.
  3. Кассир сканирует QR-код или вводит его вручную на кассе.
  4. Все дисконтные карты загружаются из мастер-системы клиента (ERP) в SetRetail10, используя веб-сервис для импорта дисконтных карт (Импорт дисконтных карт и анкет клиентов из ERP в SetRetail10).
  5. При этом из входного json-файла (ERP) загружаются следующие данные:
    1. card_number (номер карты) должен быть загружен в поле number экземпляра внутренних карт “<internal-card>”.
      1. Пример: number="770000000070", формат - “Long“.
    2. org_id (идентификатор юридического лица) должен быть загружен в поле debitor-number контрагента внутренних карт (юридического лица) <counterparty>.
      1. Пример: debitor-number="3079bb8c-6ce8-11ea-80d1-005056b2f60f“, тип данных - “String“.
  6. Плагин на основании загруженных данных и времени сканирования QR-кода формирует проверочные 4 цифры:
    1. Конкатенация (склеивание) строк:
      1. Номер карты лояльности.
      2. Идентификатор юр. лица.
      3. Время сканирования QR-кода в UTC Unix Time, т. е. округленное текущее время до интервала 3 часа в меньшую сторону, например 16:46:30 → 15:00:00. Следует иметь в виду, что время преобразуется UTC Unix Time из GMT, а не из GMT+3.
    2. Полученная объединенная строка хешируется алгоритмом SHA1.
    3. Результирующий хеш преобразуется по алгоритму:
      1. Берутся первые 4 символа хеша.
      2. От каждого символа получается код символа ASCII.
      3. От каждого полученного кода символа берется первая цифра.
      4. Склеиваются символы в строку из 4 цифр.
  7. Полученные 4 цифры сверяются с проверочными цифрами (последние 4 цифры отсканированного QR-кода).
  8. Если проверочные цифры совпали, то карта добавляется в чек.
  9. Если проверочные цифры не совпали, то проверяется предыдущий трехчасовой интервал по такому же алгоритму, т. е. меняется время сканирования с 15:00:00 на 12:00:00.
  10. Если новые вычисленные цифры совпали с проверочными, добавляеться карта в чек, в противном случае карта не добавляется.
  11. Следует учесть, что карта после идентификации добавляется в чек только в том случае, если она активна (это стандартное поведение).
  12. Пример для проверки.
    1. Время сканирования QR-кода (считается до миллисекунд) “1625495251725“, что соответствует 05.07.2021 14:27:31.725 GMT.
    2. Номер карты – “770000000070“.
    3. Идентификатор юридического лица – “3079bb8c-6ce8-11ea-80d1-005056b2f60f“.
    4. Округленное время сканирования до интервала 3 часов в меньшую сторону – “1625486400000“ (05.07.2021 12:00:00.000 GMT).
    5. Таким образом, получаем строку для вычисления хеша – “7700000000703079bb8c-6ce8-11ea-80d1-005056b2f60f1625486400000“.
    6. Хеш для строки – “8c40dff0f28c8ea33a36df65d3d458fcbbc0bca6“.
    7. По алгоритму, описанному выше, получаем 4 цифры – “5954“.
    8. Сравниваем с последними четырьмя цифрами 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-2023, ООО «Кристалл Сервис Интеграция».
Все права защищены..

Политика обработки персональных данных