Установка балансировщика нагрузки

Балансировщик нагрузки для работы с интернет-магазином можно установить совместно с VPOS.

Для установки балансировщика нагрузки необходимо:

  1. Прописать репозитории:

    Для кассового сервера версии 3.х
    wget -O - http://update.artix.su/artix.gpg.key |sudo apt-key add -
    echo 'deb [arch=amd64] http://update.artix.su/cs/ cashserver3_stable cashserver3' | sudo tee /etc/apt/sources.list.d/cashserver3.list
    Для кассового сервера версии 4.х (Artix Control Center)
    wget -O - http://update.artix.su/artix.gpg.key |sudo apt-key add -
    echo 'deb [arch=amd64] http://update.artix.su/cs/ cashserver4_stable cashserver4' | sudo tee /etc/apt/sources.list.d/cashserver4.list
  2. Обновить список пакетов и установить пакет artixcs-online-shop:

    sudo apt-get update
    sudo apt-get install artixcs-online-shop

Конфигурирование модуля

Настройка модуля производится в файле /opt/artixcs-online-shop/application.properties:

Наименование

Тип данных

Описание

Примечания

server.port

числовойПорт, на котором балансировщик нагрузки ожидает данныеПо умолчанию 9010.

su.artix.cashserveronlineshop.client.virtualcash.url

строковый

URL подключения к виртуальной кассе

Порт в параметрах должен совпадать с портом в настройках виртуальной кассы, на котором касса ожидает данные.

su.artix.cashserveronlineshop.client.virtualcash.user

строковыйЛогин пользователя для подключения к виртуальной кассеНе используется.

su.artix.cashserveronlineshop.client.virtualcash.password

строковыйПароль пользователя для подключения к виртуальной кассеНе используется.

su.artix.cashserveronlineshop.client.cs.url

строковыйURL для подключения к кассовому серверу, на который будет сохраняться чек из интернет-магазина

su.artix.cashserveronlineshop.client.cs.user

строковыйЛогин пользователя для подключения к кассовому серверу

Используется при включенной аутентификации по REST API. Активируется в настройках кассового сервера.

su.artix.cashserveronlineshop.client.cs.password

строковыйПароль пользователя для подключения к кассовому серверу

Используется при включенной аутентификации по REST API. Активируется в настройках кассового сервера.

Пример настройки
server.port=9010
##################
# Подключение к виртуальной кассе
su.artix.cashserveronlineshop.client.virtualcash.url=http://localhost:8090/
su.artix.cashserveronlineshop.client.virtualcash.user=
su.artix.cashserveronlineshop.client.virtualcash.password=
##################
# Подключение к кассовому серверу (КС)
su.artix.cashserveronlineshop.client.cs.url=http://localhost:8080/CSrest/rest/
su.artix.cashserveronlineshop.client.cs.user=
su.artix.cashserveronlineshop.client.cs.password=

REST API для работы с балансировщиком

Передача онлайн-чека с расчетом воздействий

Для передачи онлайн-чека на виртуальную кассу через балансировщик и расчета дисконтных и бонусных воздействий необходимо выполнить запрос типа POST на URL:

http://<host>:<port>/receipt/calculate?[shopcode=<shopCode>&clusterid=<clusterId>&istotal=true|false]

Наименование

Тип данных

Описание

Примечания

shopcodestringКод магазинаНеобязательный параметр. По умолчанию код магазина All.

clusterid

stringИдентификатор кластераНеобязательный параметр.

istotal 

boolean

Сохранять результат в БД кассового сервера для возможности оплаты на обычной кассе:

  • true – результат сохраняется в БД кассового сервера.
    Чек с таким значением может быть передан только 1 раз, он откладывается в БД КС и может быть только восстановлен на кассе.
  • false – результат передается на виртуальную кассу для расчета дисконтной системы.

Необязательный параметр.

По умолчанию false.

Пример тела запроса
{
  "identifier": "100500",
  "positions": [
    {
      "posnum": 1,
      "barcode": "1",
      "quant": 10,
      "price": 10.60,
      "minprice": 5.00,
      "name": "test goods"
    }
  ],
  "cards": [
    {
      "number": "1"
    }
  ],
  "coupons": [
    {
      "number": "2232"
    }
  ],
  "dontChange": true
}

, где

  • identifier – уникальный идентификатор чека;
  • dontChange – признак модификации чека:
    • true – модификация чека запрещена (добавление/сторнирование позиций, применение модификаторов и т.д.);
    • false – чек можно модифицировать.

Для использования цены из интернет-магазина в запросе должны быть переданы цена и минимальная цена товара. Если один или оба этих параметра не будут переданы, то виртуальная касса подставит данные из собственной БД.

Для использования наименования из интернет-магазина в запросе должно быть передано название товара. Если этот параметр не передан, то виртуальная касса подставит данные из собственной БД.

В ответ возвращается результирующий чек с воздействиями, который возвращает VPOS.

Расчет воздействий и резервирование суммы бонусов для оплаты

Для расчета дисконтных и бонусных воздействий, резервирования суммы бонусов для оплаты, сохранения чека на КС необходимо выполнить запрос типа POST на URL:

http://<host>:<port>/receipt/spend?[shopcode=<shopCode>&clusterid=<clusterId>&spendSum=<spendSum>]

Наименование

Тип данных

Описание

Примечания

shopcodestringКод магазинаНеобязательный параметр. По умолчанию код магазина All.

clusterid

stringИдентификатор кластераНеобязательный параметр.

spendSum 

BigDecimalСумма оплаты бонусами

Необязательный параметр.

Пример тела запроса
{
  "identifier": "100500",
  "positions": [
    {
      "posnum": 1,
      "barcode": "1",
      "quant": 10,
      "price": 10.60,
      "minprice": 5.00,
      "name": "test goods"
    }
  ],
  "cards": [
    {
      "number": "1"
    }
  ],
  "coupons": [
    {
      "number": "2232"
    }
  ],
  "dontChange": true
}

, где

  • identifier – уникальный идентификатор чека;
  • dontChange – признак модификации чека:
    • true – модификация чека запрещена (добавление/сторнирование позиций, применение модификаторов и т.д.);
    • false – чек можно модифицировать.

Для использования цены из интернет-магазина в запросе должны быть переданы цена и минимальная цена товара. Если один или оба этих параметра не будут переданы, то виртуальная касса подставит данные из собственной БД.

Для использования наименования из интернет-магазина в запросе должно быть передано название товара. Если этот параметр не передан, то виртуальная касса подставит данные из собственной БД.

В ответ возвращается результирующий чек с воздействиями, который возвращает VPOS.

Оплата чека онлайн

Для оплаты чека онлайн необходимо выполнить запрос типа POST на URL:

http://<host>:<port>/receipt/total?[shopcode=<shopCode>&clusterid=<clusterId>]

Наименование

Тип данных

Описание

Примечания

shopcodestringКод магазинаНеобязательный параметр. По умолчанию код магазина All.

clusterid

stringИдентификатор кластераНеобязательный параметр.
Пример тела запроса "чек с рассчитанными скидками"
{
  "check": {
    чек_с_рассчитанными_скидками
  },
  "payments": [
    {
      "type": 0,
      "amount": 0
    }
  ],
  "customerAddress": "string"
} 

Параметры тела запроса:

НаименованиеТип данныхОписание
checkobjectРезультат запроса, выполненного ранее методом calculatediscount или spendbonus
paymentsobjectОплата
customerAddressstringАдрес (телефон или e-mail) покупателя

Параметры объекта payments:

НаименованиеТип данныхОписание
typeintКод типа оплаты в кассе
amountdecimal

Сумма оплаты

В процессе выполнения запроса total осуществляется удаленное закрытие чека на ФР.

В таблицу onlinecheck добавляется новая запись со статусом ONLINE_PAYING и статусом оплаты NOT_CONFIRM. В таблицу onlineCheckPayStatus добавляется запись об оплате чека со статусом NOT_CONFIRM.

Если запрос выполнен корректно, то в ответе от сервера будет получен идентификатор сохраненного онлайн-чека:

Пример ответа
{
    "id": 3
}

Получение статуса оплаты онлайн-чека

Для получения статуса оплаты онлайн-чека необходимо выполнить запрос типа GET на URL:

http://<host>:<port>/receipt/getdocumentinfo?[documentid=<documentId>&shopcode=<shopCode>&clusterid=<clusterId>]

Наименование

Тип данных

Описание

Примечания

documentidstringИдентификатор документаОбязательный параметр.
shopcodestringКод магазинаНеобязательный параметр. По умолчанию код магазина All.

clusterid

stringИдентификатор кластераНеобязательный параметр.

Если запрос выполнен корректно, то в ответе от сервера будет получен статус оплаты:

Пример ответа "Оплата прошла успешно"
{
  "SUCCESS": [
    "fd2628a5-4912-4157-bdd8-b1b9f86bb566": "SUCCESS",
    "6333acdb-07ad-49b1-8776-f3555c46d132": "SUCCESS"
  ]
}

Если хотя бы одна оплата не прошла, то будет получен статус FAIL

Пример ответа "Оплата с ошибкой"
{
  "FAIL": [
    "fd2628a5-4912-4157-bdd8-b1b9f86bb566": "SUCCESS",
    "6333acdb-07ad-49b1-8776-f3555c46d132": "FAIL"
  ]
}

В процессе выполнения запроса getDocumentInfo обновляется статус оплаты в таблице onlineCheckPayStatus. Такой же статус оплаты устанавливается у чека в таблице onlinecheck.

Сохранение чека с оплатами в БД кассового сервера

Для сохранения чека с оплатами в БД КС с последующим восстановлением на кассе необходимо выполнить запрос типа POST на URL:

http://<host>:<port>/receipt/savePayedCheck/payeddocumentId?[shopcode=<shopCode>&clusterid=<clusterId>]

Наименование

Тип данных

Описание

Примечания

payeddocumentidstringИдентификатор чека, по которому проходила оплатаОбязательный параметр.
shopcodestringКод магазинаНеобязательный параметр. По умолчанию код магазина All.

clusterid

stringИдентификатор кластераНеобязательный параметр.
Пример тела запроса "чек с оплатами"
{
  "cards": [
    {
      "bonusbalance": 62.8,
      "cardmode": 1,
      "idcardgroup": 1,
      "namecardgroup": "bonus",
      "number": "911",
      "sessionid": "_cash_1030_0bccc9d3$1.1.0.2.093757211$0$1"
    }
  ],
  "identifier": "243",
  "pointsForEarn": 0.4,
  "positions": [
    {
      "barcode": "1",
      "code": "1",
      "dept": null,
      "discounts": [
        {
          "campaigncode": 6,
          "campaignname": "1",
          "discountcode": 7,
          "discountmode": 1,
          "discountname": "new name",
          "discountrate": 5,
          "discountsum": 0.76,
          "discounttype": 1,
          "ispositiondiscount": 0,
          "minpriceignored": false,
          "posnum": 1
        }
      ],
      "earnedbonuses": [
        {
          "amount": 0.4,
          "assettimebeg": "",
          "assettimeend": "",
          "campaigncode": 1,
          "campaignname": "111",
          "cardnumber": "911",
          "ispositionbonus": 0,
          "weight": 0
        }
      ],
      "isallowbonusspend": true,
      "measure": 1,
      "measurename": "шт",
      "minprice": 13.68,
      "name": "МОЛОКО БМК 1.5% 1Л П/П",
      "paymentmethod": 0,
      "paymentobject": 0,
      "posnum": 1,
      "price": 15.2,
      "quant": 1,
      "spentbonuses": [
        {
          "campaigncode": 1,
          "campaignname": "111",
          "cardnumber": "911",
          "discountcode": 3,
          "discountmode": 2,
          "discountname": "Новое имя",
          "discountsum": 10,
          "discounttype": 5,
          "ispositiondiscount": 0,
          "posnum": 1,
          "sessionid": "_cash_1030_0bccc9d3$1.1.0.2.093757211$0$1"
        }
      ],
      "sum": 4.44,
      "sumWithoutDiscounts": 15.2,
      "taramode": 0,
      "tmc": {
        "minprice": 13.68,
        "price": 15.2
      },
      "vatcode": -1,
      "vatrate": 0,
      "vatsum": 0
    }
  ],
  "sum": 4.44,
  "dontChange": null,
  "payments": [
    {
      "type": 1,
      "amount": 1,
      "valcode": 1,
      "valname": "ru"
    }
  ]
}

Если запрос выполнен корректно, то в ответе от сервера будет получен идентификатор нового онлайн-чека:

Пример ответа
{
    "id": 3
}

В процессе выполнения запроса savePayedCheck статус документа, по которому проходила оплата, меняется на ONLINE_CLOSED. Чек с оплатами записывается в таблицу onlinecheck со статусом NEW, в поле sourcedocumentid записывается ссылка на оплаченный документ. Данный чек необходимо восстановить на кассе.

  • No labels