Раздел в стадии наполнения
Клиент в теле запроса обязан передавать строку подписи Sign. Подпись формируется путём объединения некоторых параметров из тела запроса и хэширование получившейся строки по алгоритму (MD5).
Параметры для подписи разделяются значком - (тире)
Для повышения надежности требуется к подписи добавлять секретный ключ SecretKey
Сервер в свою очередь также формирует подпись и сравнивает её с подписью из запроса. В случае если подпись не совпадёт, сервер отправит ответ об ошибке:
"HasErrors":true,"ResponseDescription":"Неверная подпись"
Некоторые параметры никогда НЕ попадают в подпись, например SiteID
Для подписи важен порядок параметров и регистр. Одни и те же параметры в разном порядке будут иметь разный хэш.
правило подписи: SkiClientId-SecretKey
С данными: 662173-321
Итоговая подпись: 7291ab2b4c600c828a981ba09490668d
Тело запроса:
{Sign: "7291ab2b4c600c828a981ba09490668d"
SiteID: "2"
SkiClientId: "662173"}
Для самопроверки можно использовать онлайн-сервис для шифрования
POST /Public/Api/Products
Описание: возвращает список доступных для продажи продуктов (билетов, абонементов и т.д.).
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | OwnerId | Целое число | (не используется) |
2 | ProductID | Целое число | Идентификатор товара/мероприятия |
3 | ParentID | Целое число | Идентификатор товара/мероприятия родительский |
4 | IsActivity | bool | Является ли товар мероприятием |
5 | ReservationID | Целое число | (не используется) |
6 | ReservationDetailID | Целое число | (не используется) |
7 | ReservationDetails | Целое число | (не используется) |
8 | IsPlaceSelectable | bool | Можно ли выбрать место |
9 | PlaceID | Целое число | Идентификатор места (не используется) |
10 | AbonementTypeID | Целое число | Тип абонемента |
11 | Name | Строка | Название товара |
12 | ActivityName | Название мероприятия | |
13 | PlaceName | Строка | Название места |
14 | BasePrice | Дробное число | Цена базовая по тарифу |
15 | Price | Дробное число | Цена фактическая |
16 | SeanceID | Целое число | Идентификатор сеанса (когда указан ParentID в запросе) |
17 | EndProductID | Целое число | Идентификатор товара в заказе |
18 | EventDate | Строка | Дата начала сеанса |
19 | EventDateEnd | Строка | Дата окончания сеанса |
20 | NN | Строка | Номенклатурный номер (при интеграции с 1С) |
21 | FolderId | Целое число | Идентификатор папки |
22 | IsFolder | bool | Является ли объект папкой |
23 | ExternalLoyalty | Структура | Структура с информацией о внешних бонусных системах |
24 | PlaceCapacity | Целое число | Вместимость платной зоны |
25 | PlaceReserved | Дробное число | Сколько сейчас зарезервировано мест в платной зоне |
26 | PlaceTypeID | Целое число | Идентификатор места мероприятия |
27 | IsWholePlace | bool | Является ли объект отдельным местом или целым набором мест, например, если предусмотрена, что на сеанс целый ряд можно выкупить одной позицией, то у позиции будет IsWholePlace = true |
Ответ:
{
"Products": null,
"HasErrors": true,
"ResponseDescription": "Не удалось получить список билетов (Ссылка на объект не указывает на экземпляр объекта.)",
"ErrorCode": 1
}
Подпись (необязательна):
POST /Public/Api/PayMethods
Описание: возвращает список способов оплаты, которыми можно оплатить выбранный продукт, а также стоимость каждого способа. Например, "Сеанс фитнеса" можно оплатить абонементом на 10 занятий стоимостью 1000р, либо деньгами за 250р.
Параметры запроса:
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ProfileID | Целое число | Да | Идентификатор профиля |
2 | ProductID | Целое число | Да | Идентификатор продукта |
3 | ShowZeroPrice | Bool | Нет | Показывать ли нулевые способы оплаты |
Ответ: Массив методов оплаты.
№ | Поле | Тип | Описание |
---|---|---|---|
1 | PayMethodID | Целое число | Идентификатор метода оплаты |
2 | PayMethodName | Строка | Название метода оплаты |
3 | PlaceTypeID | Целое число | Идентификатор места |
4 | Price | Число с точкой | Стоимость |
5 | IsMoney | Bool | Оплачивается ли деньгами (true), либо билетом/ абонементом (false) |
6 | ID | Целое число | Идентификатор |
7 | Name | Строка | Название |
Пример ответа:
{ "PayMethods": [{
"ID": 2714,
"Name": "Оплата",
"PayMethodID": 2714,
"PayMethodName": "Оплата",
"PlaceTypeID": 10,
"Price": 200.00,
"IsMoney": true
},
{
"ID": 1174,
"Name": "Катание Взрослый",
"PayMethodID": 1174,
"PayMethodName": "Катание Взрослый",
"PlaceTypeID": 0,
"Price": 350.00,
"IsMoney": false
}]
],
"HasErrors": false,
"ResponseDescription": null,
"ErrorCode": 0
}
Ответ: Сообщение с ошибкой.
{ "AbonementTypes": null,
"PayMethods": null,
"HasErrors": true,
"ResponseDescription": "Не удалось получить способы оплаты (Не найдено расписание с Id : 123)",
"ErrorCode": 1 }
Подпись: ProfileID-ProductID-SecretKey
POST /Public/Api/OrderStatus
Описание: Метод для получения текущего статуса заказа и товарных позиций, из которых он состоит.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | OrderId | Строка | Да | Идентификатор заказа из сервиса вэб-продаж Барса |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | OrderInfo | Структура | Информация о заказе |
Структура OrderInfo:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Items | Структура | Информация о товарных позициях |
2 | Type | Целое число | Тип заказа |
3 | State | Целое число | Состояние заказа |
4 | MailSent | bool | Отправлялось ли системой письмо клиенту с информацией о покупке |
5 | IsFree | bool | Параметр показывает, бесплатный ли заказ |
6 | IsPayFromAccount | bool | Параметр показывает, была ли оплата с депозита (со счёта Барса) |
7 | OrderID | Строка | Идентификатор заказа |
8 | ClientID | Целое число | Идентификатор клиента |
9 | SkiClientId | Целое число | Номер счёта клиента в системе Барса |
10 | ClientEmail | Строка | Почта клиента |
11 | ClientPhone | Строка | телефон клиента |
12 | ClientCardCode | Строка | Номер карты клиента |
13 | ReturnOrderID | Строка | Идентификатор заказа, который выслал Барс |
14 | BankOrderID | Строка | Банковский идентификатор заказа |
15 | PaymentTime | Строка | Время оплаты (для заказов, которые не оплачены время = 0001-01-01T00:00:00.0000000Z) |
16 | PaymentAmount | Число с плавающей точкой | Сумма к оплате |
17 | ProfileID | Целое число | Идентификатор профиля |
18 | SiteID | Целое число | Идентификатор сайта |
19 | MerchantID | Целое число | Идентификатор эквайера |
20 | Discount | Строка | информация о привязанной скидке |
21 | TNG | Строка | Информация о бонусной системе TNG |
Структура Items:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | EndProductId | Целое число | Идентификатор товарной позиции (Используется в запросе /DeleteOrderItems) |
2 | Type | Enum | Тип товарной позиции (билет, пополнение депозита, товар) |
3 | OwnerId | Целое число | Номер счёта в системе Барса |
4 | IsAddBalance | bool | Параметр указывает, является ли товарная позиция пополнением депозита |
5 | IsProduct | bool | Параметр указывает, является ли позиция товаром |
6 | IsTicket | bool | Параметр указывает, является ли позиция билетом |
7 | IsActivity | bool | Параметр указывает, является ли позиция билетом на сеанс мероприятия |
8 | Amount | Дробное число | Количество пополняемых средств (для депозита) |
9 | ProductId | Целое число | Идентификатор продаваемого продукта |
10 | GoodId | Целое число | Идентификатор товара |
11 | Name | Строка | Название товарной позиции |
12 | BasePrice | Дробное число | Стоимость базовая |
13 | Price | Дробное число | Стоимость фактическая (с учётом всех скидок) |
14 | Discount | Дробное число | размер скидки |
15 | Bonus | Дробное число | Если настроен тариф на бонус, то параметр показывает размер начисляемого бонуса |
16 | EventDateStart | Строка | Дата-время начала мероприятия |
17 | EventDateEnd | Строка | Дата-время конца мероприятия |
18 | NN | Строка | Номенклатурный номер для позиций выгружаемых в 1С |
19 | BarCode | Строка | Присылаемый номер карты или билета, который будет считан на кассе или турникете |
20 | SeanceId | Целое число | Идентификатор сеанса мероприятия |
21 | ActivityId | Целое число | Идентификатор мероприятия |
22 | ActivityName | Строка | Название мероприятия |
23 | PlaceId | Целое число | Идентификатор места |
24 | PlaceName | Строка | Название места |
25 | PayMethodId | Целое число | Идентификатор метода оплаты |
26 | ReservationId | Целое число | Идентификатор брони на мероприятие |
27 | ReservationDetailId | Целое число | Идентификатор брони на мероприятие |
28 | ReservationDetails | Строка | Дополнительная информация о бронировании |
29 | ExternPrice | Дробное число | Фактическая цена |
30 | DebtOwnerId | Целое число | Номер счёта в системе Барса, который пополнялся данной операции для гашения долга |
31 | IsDebtRefinement | bool | Является ли пополнение депозита оплатой долга |
32 | Marking | Структура | Блок описания передаваемой марки товара |
Ответ, если заказ не найден:
{
"OrderInfo": null,
"HasErrors": true,
"ResponseDescription": "Заказ не найден",
"ErrorCode": 2
}
Подпись: OrderId-SecretKey
POST /Public/Api/CreateOrder
Описание: Создаёт заказ со сгенерированным идентификатором. Заказ можно создать пустым, и отдельными методами добавить в него позиции (или удалить их), либо уже передав определенные позиции в нём. Метод является опциональным, в основном нужен для хранения заказа на стороне сервера, либо применению скидок к заказу. В большинстве сценариев рекомендуется сразу использовать метод регистрации заказа /RegisterOrder2.
Параметры запроса:
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ClientId | Строка | Да | Идентификатор клиента в системе сайта |
2 | Items | Структура | Да | Структура товаров |
3 | ProfileID | Целое число | Да | Идентификатор профиля |
4 | CustomProperty | Строка (до 2000 символов) | Да | Строка для передачи дополнительной информации, либо каких-то свойств |
5 | PhoneNumber | Строка | Да | Номер телефона в формате +7########## |
Дополнительные параметры запроса: добавляются поля из структуры Items
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ProductId | Целое число | Да | Идентификатор товара |
2 | EventDate | Строка в формате dd.MM.yyyy | Да | Дата, на которую происходит покупка товара. Заполняется только для покупки товаров |
3 | SeanceId | Целое число | Да | Идентификатор сеанса. Используется для продажи билетов на мероприятия |
4 | PlaceId | Целое число | Да | Идентификатор места |
5 | PayMethodId | Целое число | Да | Идентификатор способа оплаты |
6 | OwnerId | Целое число | Да | Опционально. Идентификатор клиента в системе Барс (номер счёта), для которого приобретается товар |
7 | Count | Целое число | Да | Количество товара |
8 | Amount | Целое число | Да | Сумма пополнения баланса. Заполняется только для операции пополнения баланса. |
Ответ:
{"OrderId":"Номер заказа","HasErrors":false,"ResponseDescription":null,"ErrorCode":0}
Ответ:
Для заказа без товаров: ClientId--ProfileID-CustomProperty-PhoneNumber-SecretKey (Прим.: 2 тире между ClientId и ProfileID)
Для заказа с товарами: ClientId-ProductId-EventDate---PayMethodId-OwnerId-Count-Amount-ProfileID-CustomProperty-PhoneNumber-SecretKey
Для заказа покупки билета на мероприятие: ClientId---SeanceId-PlaceId-PayMethodId-OwnerId-Count--ProfileID-CustomProperty-PhoneNumber-SecretKey
POST /Public/Api/AddOrderItems
Описание: Метод добавляет позицию в заказ.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | OrderId | Строка | Да | Идентификатор ранее созданного заказа |
2 | Items | Структура | Да | Набор полей, описывающих заказ |
3 | SiteId | Строка | Нет | Идентификатор сайта из конфига |
Структура позиций заказа Items (Общий формат)
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ProductId | Целое число | Да | Идентификатор товара |
2 | EventDate | Строка в формате dd.MM.yyyy | Да | Дата, на которую происходит покупка товара. Заполняется только для покупки товаров |
3 | SeanceId | Целое число | Да | Идентификатор сеанса. Используется для продажи билетов на мероприятия |
4 | PlaceId | Целое число | Да | Идентификатор места |
5 | PayMethodId | Целое число | Да | Идентификатор способа оплаты |
6 | OwnerId | Целое число | Да | Опционально. Идентификатор клиента в системе Барс (номер счёта), для которого приобретается товар |
7 | Count | Целое число | Да | Количество товара |
8 | Amount | Целое число | Да | Сумма пополнения баланса. Заполняется только для операции пополнения баланса. |
8 | ExternPrice | Число с плавающей точкой | Нет | Цена, по которой будет продан товар |
8 | Refinement | Bool | Нет | Параметр показывает, что операция пополнения баланса в счёт гашения долга (по умолчанию false) |
8 | Marking | Структура | Нет | Структура описывающая маркировку товара |
Структура позиций заказа Marking (для версий X.XX.43.18+)
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
8 | Code | Строка до 255 символов | Нет | В поле MarkingCode передаётся код маркировки, при этом управляющий символ GS (разделитель групп) передаётся в виде \u001d |
8 | Uuid | Строка до 255 символов | Нет | Идентификатор операции |
8 | timestamp | datetime in unix | Нет | Дата и время задается в формате unix timestamp |
8 | InstanceId | Строка до 255 символов | Нет | Идентификатор экземпляра локальный модуля "Честного знака" |
8 | DataVersion | Строка до 255 символов | Нет | Версия базы, на которой осуществлялась проверка |
Пример маркировки:
Видимый код: 010462006080066121%KkX9NItF%pB/91EE0592ODV2CYiA3fGGTtD7rbA76jAHAKvwQ28gu9RYDtEQoSI=
Считываемый сканером код: 0104620060800661<GS>21%KkX9NItF%pB/<GS>91EE05<GS>92ODV2CYiA3fGGTtD7rbA76jAHAKvwQ28gu9RYDtEQoSI=
Отправляемый код: 0104620060800661\u001d21%KkX9NItF%pB/\u001d91EE05\u001d92ODV2CYiA3fGGTtD7rbA76jAHAKvwQ28gu9RYDtEQoSI=
Структура позиций заказа Items для депозита
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | OwnerId | Целое число | Да | Опционально. Идентификатор клиента в системе Барс (номер счёта), для которого приобретается товар |
2 | Amount | Целое число | Да | Сумма пополнения баланса. Заполняется только для операции пополнения баланса. |
3 | Refinement | Bool | Нет | Параметр показывает, что операция пополнения баланса в счёт гашения долга (по умолчанию false) |
Структура позиций заказа Items для товаров и абонементов
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ProductId | Целое число | Да | Идентификатор товара |
2 | EventDate | Строка в формате dd.MM.yyyy | Да | Дата, на которую происходит покупка товара. Заполняется только для покупки товаров |
5 | PayMethodId | Целое число | Да | Идентификатор способа оплаты |
6 | OwnerId | Целое число | Да | Опционально. Идентификатор клиента в системе Барс (номер счёта), для которого приобретается товар |
7 | Count | Целое число | Да | Количество товара |
8 | ExternPrice | Число с плавающей точкой | Нет | Цена, по которой будет продан товар |
8 | Marking | Структура | Нет | Структура описывающая маркировку товара |
Структура позиций заказа Items для билетов на мероприятия
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
3 | SeanceId | Целое число | Да | Идентификатор сеанса. Используется для продажи билетов на мероприятия |
4 | PlaceId | Целое число | Да | Идентификатор места (заполняется только при использовании схем мест, например, для стадионов или кинотеатров) |
5 | PayMethodId | Целое число | Да | Идентификатор способа оплаты |
6 | OwnerId | Целое число | Да | Опционально. Идентификатор клиента в системе Барс (номер счёта), для которого приобретается билет |
7 | Count | Целое число | Да | Количество товара |
8 | ExternPrice | Число с плавающей точкой | Нет | Цена, по которой будет продан товар |
Ответ:
{"HasErrors":false,"ResponseDescription":null,"ErrorCode":0}
Ответ при неверном сочетании передаваемых параметров:
{ "HasErrors": true,
"ResponseDescription": "Передана неверная комбинация параметров",
"ErrorCode": 2 }
Ответ, если заказ уже изменил свой статус:
{
"HasErrors": true,
"ResponseDescription": "Нельзя модифицировать зарегистрированный заказ",
"ErrorCode": 2
}
Ответ, если клиент не найден:
{
"HasErrors": true,
"ResponseDescription": "Запрещено добавление позиции в заказ, потому что клиент не зарегистрирован в системе Bars",
"ErrorCode": 2
}
Для заказа пополнения депозита: OrderId------OwnerId--Amount-SecretKey (Прим.: 6 тире между OrderId и OwnerId и 2 тире между OwnerId и Amount)
Для заказа с товарами: OrderId-ProductId-EventDate---PayMethodId-OwnerId-Count--SecretKey (Прим.: 2 тире между Count и SecretKey и 3 тире между EventDate и PayMethodId)
Для заказа покупки билета на мероприятие: OrderId---SeanceId-PlaceId-PayMethodId-OwnerId-Count-SecretKey (Прим.: 3 тире между OrderId и SeanceId и 2 тире между Count и SecretKey)
POST /Public/Api/DeleteOrderItems
Описание: Метод убирает позицию из заказа.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | OrderId | Строка | Да | Идентификатор ранее созданного заказа |
2 | Items | Список | Нет | Набор идентификаторов позиций заказа (параметр EndProductId) |
3 | SiteId | Целое число | Нет | Идентификатор сайта из конфига |
Ответ:
{"HasErrors":false,"ResponseDescription":null,"ErrorCode":0}
Ответ если заказ уже изменил свой статус:
{
"HasErrors": true,
"ResponseDescription": "Нельзя модифицировать зарегистрированный заказ",
"ErrorCode": 2
}
Ответ если заказ не найден:
{
"HasErrors": true,
"ResponseDescription": "Профиль с идентификатором 0 не найден",
"ErrorCode": 2
}
Подпись: OrderId-SecretKey
POST /Public/Api/SetDiscount
Описание: Метод применяет дисконтную карту к заказу и пересчитывает стоимость позиций в нём.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | OrderId | Строка | Да | Идентификатор ранее созданного заказа |
2 | DiscountCard | Строка | Нет | Значение кода дисконтной карты. Отсутствие значения или пустая строка удаляет привязанную карту |
3 | SiteId | Целое число | Нет | Идентификатор сайта из конфига |
Ответ:
Ответ:
Подпись: OrderId-SecretKey
POST /Public/Api/RegisterOrder2
Описание: Метод регистрирует заказ (либо ранее созданный, либо созданный с помощью данного метода). Также с помощью метода можно на время до оплаты (время на ожидание оплаты задаётся конфигурацией службы) забронировать место на сеанс/ мероприятие.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ClientId | Строка до 40 символов | Да | Идентификатор клиента на сайте |
1 | OrderId | Строка | Да | Идентификатор ранее созданного заказа. Если заказ создаётся впервые, то строка остаётся пустой |
1 | Items | Структура | Да | Набор полей, описывающих заказ. В случае если был передан параметр OrderId, и заказ с таким идентификатором будет найден, к позициям найденного заказа будет добавлены позиции описанные в этом параметре |
1 | MerchantId | Целое число | Да | Идентификатор мерчанта из локального конфига |
1 | ReturnUrl | Строка | Да | Ссылка, на которую будет переадресован клиент после оплаты заказа |
1 | ProfileID | Целое число | Да | Идентификатор профиля из локального конфига |
1 | CustomProperty | Строка до 2000 символов | Да | Строка для передачи дополнительной информации по заказу |
1 | PhoneNumber | Строка до 12 символов | Да | Номер телефона в формате +7########## |
1 | Строка | Нет | Адрес электронной почты клиента | |
1 | PayFromAccount | Bool | Нет | Параметр указывает, оплачивается ли заказ со счёта клиента |
1 | SiteID | Строка | Нет | Идентификатор сайта |
Структура позиций заказа Items (Общий формат)
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ProductId | Целое число | Да | Идентификатор товара |
2 | EventDate | Строка в формате dd.MM.yyyy | Да | Дата, на которую происходит покупка товара. Заполняется только для покупки товаров |
3 | SeanceId | Целое число | Да | Идентификатор сеанса. Используется для продажи билетов на мероприятия |
4 | PlaceId | Целое число | Да | Идентификатор места |
5 | PayMethodId | Целое число | Да | Идентификатор способа оплаты |
6 | OwnerId | Целое число | Да | Опционально. Идентификатор клиента в системе Барс (номер счёта), для которого приобретается товар |
7 | Count | Целое число | Да | Количество товара |
8 | Amount | Целое число | Да | Сумма пополнения баланса. Заполняется только для операции пополнения баланса. |
8 | ExternPrice | Число с плавающей точкой | Нет | Цена, по которой будет продан товар |
8 | Refinement | Bool | Нет | Параметр показывает, что операция пополнения баланса в счёт гашения долга (по умолчанию false) |
8 | Marking | Структура | Нет | Структура описывающая маркировку товара |
Структура позиций заказа Marking (для версий X.XX.43.18+)
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
8 | Code | Строка до 255 символов | Нет | В поле MarkingCode передаётся код маркировки, при этом управляющий символ GS (разделитель групп) передаётся в виде \u001d |
8 | Uuid | Строка до 255 символов | Нет | Идентификатор операции |
8 | timestamp | datetime in unix | Нет | Дата и время задается в формате unix timestamp |
8 | InstanceId | Строка до 255 символов | Нет | Идентификатор экземпляра локальный модуля "Честного знака" |
8 | DataVersion | Строка до 255 символов | Нет | Версия базы, на которой осуществлялась проверка |
Пример маркировки:
Видимый код: 010462006080066121%KkX9NItF%pB/91EE0592ODV2CYiA3fGGTtD7rbA76jAHAKvwQ28gu9RYDtEQoSI=
Считываемый сканером код: 0104620060800661<GS>21%KkX9NItF%pB/<GS>91EE05<GS>92ODV2CYiA3fGGTtD7rbA76jAHAKvwQ28gu9RYDtEQoSI=
Отправляемый код: 0104620060800661\u001d21%KkX9NItF%pB/\u001d91EE05\u001d92ODV2CYiA3fGGTtD7rbA76jAHAKvwQ28gu9RYDtEQoSI=
Поля идентичны общей структуре за исключением структуры Items. Неучаствующие поля не заполняются
Структура позиций заказа Items для депозита
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | OwnerId | Целое число | Да | Опционально. Идентификатор клиента в системе Барс (номер счёта), для которого приобретается товар |
2 | Amount | Целое число | Да | Сумма пополнения баланса. Заполняется только для операции пополнения баланса. |
3 | Refinement | Bool | Нет | Параметр показывает, что операция пополнения баланса в счёт гашения долга (по умолчанию false) |
Поля идентичны общей структуре за исключением структуры Items. Неучаствующие поля не заполняются
Структура позиций заказа Items для товаров и абонементов
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ProductId | Целое число | Да | Идентификатор товара |
2 | EventDate | Строка в формате dd.MM.yyyy | Да | Дата, на которую происходит покупка товара. Заполняется только для покупки товаров |
5 | PayMethodId | Целое число | Да | Идентификатор способа оплаты |
6 | OwnerId | Целое число | Да | Опционально. Идентификатор клиента в системе Барс (номер счёта), для которого приобретается товар |
7 | Count | Целое число | Да | Количество товара |
8 | ExternPrice | Число с плавающей точкой | Нет | Цена, по которой будет продан товар |
8 | Marking | Структура | Нет | Структура описывающая маркировку товара |
Поля идентичны общей структуре за исключением структуры Items. Неучаствующие поля не заполняются
Структура позиций заказа Items для билетов на мероприятия
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SeanceId | Целое число | Да | Идентификатор сеанса. Используется для продажи билетов на мероприятия |
2 | PlaceId | Целое число | Да | Идентификатор места (заполняется только при использовании схем мест, например, для стадионов или кинотеатров) |
3 | PayMethodId | Целое число | Да | Идентификатор способа оплаты |
4 | OwnerId | Целое число | Да | Опционально. Идентификатор клиента в системе Барс (номер счёта), для которого приобретается билет |
5 | Count | Целое число | Да | Количество товара |
6 | ExternPrice | Число с плавающей точкой | Нет | Цена, по которой будет продан товар |
Ответ: В ответ приходит информация о заказе в формате JSON
№ | Поле | Тип | Описание |
---|---|---|---|
1 | OrderInfo | Структура | Содержит информацию о заказе |
2 | UnitellerOrderData | Структура | Содержит набор данных для формирования предпродажной страницы |
3 | FormUrl | Строка | URL адрес платёжной страницы, которую присылает эквайер |
4 | MobilePaymentRequestUrl | Строка | URL адрес запроса на предварительную регистрацию оплаты |
5 | MobilePaymentResultUrl | Строка | URL адрес запроса на проведение операции оплаты |
6 | UsedFiscalization | bool | Указывает, требуется ли передавать дополнительные поля (Receipt и ReceiptSignature) платежному шлюзу для отправки позиций заказа в ОФД в виде чека |
6 | HasErrors | bool | Указывает, была ли ошибка в запросе |
6 | ResponseDescription | Строка | Описание ответа |
6 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Структура OrderInfo
№ | Поле | Тип | Описание |
---|---|---|---|
1 | OrderId | Строка до 36 символов | Идентификатор заказа в контексте данного сервиса |
2 | ReturnOrderID | Строка до 36 символов | Промежуточный идентификатор заказа на время между регистрацией заказа и оплатой или блокированием средств, в зависимости от платежного шлюза может быть выдан платежным шлюзом либо задается в самостоятельно |
3 | BankOrderID | Строка до 36 символов | Идентификатор оплаты в системе банка-эквайра |
4 | State | Структура | Состояние заказа Значение, соответствующее состоянию заказа. Может принимать значения, приведенные в таблице 40 |
5 | Items | Структура | Перечень позиций заказа |
6 | PaymentAmount | Целое число | Стоимость заказа (сумма к оплате) |
7 | PaymentTime | Строка в формате ISO 8601 | Время оплаты заказа Заполняется только для оплаченного заказа |
8 | IsFree | Логический тип (true/false) | Указывает, что это заказ с нулевой стоимостью и его не нужно проводить через платежный шлюз |
9 | ProfileID | Целое число | Идентификатор точки продажи |
10 | SiteID | Целое число | Идентификатор сайта |
11 | MerchantID | Целое число | Идентификатор платежного шлюза в системе данного сервиса |
12 | ClientID | Целое число | Идентификатор клиента в контексте данного сервиса |
13 | Название системы лояльности | Структура | Информация о заказе, если он также был зарегистрирован в системе лояльности. Список полей зависит от системы лояльности |
Структура Items
№ | Поле | Тип | Описание |
---|---|---|---|
1 | EndProductId | Целое число | Идентификатор позиции заказа, проданной или находящейся в процессе продаже |
2 | Type | Enum | Тип позиции заказа: • 1 – Пополнение баланса |
3 | OwnerId | Целое число | Идентификатор клиента, для которого эта позиция заказа приобретается. Может быть не задан до продажи заказа. |
4 | Amount | Дробное число с точностью до 2х знаков после запятой | Сумма пополнения счета клиента. |
5 | Price | Дробное число с точностью до 2х знаков после запятой | Стоимость приобретаемого билета или абонемента |
6 | ProductId | Целое число | Идентификатор продукта в контексте Bars. Заполняется только для билетов или абонементов |
7 | Name | Строка | Наименование билета или абонемента |
8 | EventDateStart | Строка в формате ISO 8601 | Дата начала сеанса на мероприятие, на который продан билет |
9 | EventDateEnd | Строка в формате ISO 8601 | Дата завершения сеанса на мероприятие, на который продан билет |
10 | NN | Строка | Номенклатурный номер товара |
11 | BarCode | Строка | Значение штрих-кода. Становится доступным после продажи заказа |
12 | SeanceId | Целое число | Идентификатор сеанса. Заполняется только для броней на мероприятие. |
13 | ActivityId | Целое число | Идентификатор мероприятия. Заполняется только для броней на мероприятие. |
14 | ActivityName | Строка | Наименование мероприятия |
15 | PlaceId | Целое число | Идентификатор конечного места, на которое оформлена бронь |
16 | PlaceName | Строка | Наименование места |
17 | PayMethodId | Целое число | Идентификатор способа оплаты |
{
"OrderInfo": {
"Items": [
{
"EndProductId": 2063,
"Type": 2,
"OwnerId": null,
"IsAddBalance": false,
"IsProduct": true,
"IsTicket": true,
"IsActivity": false,
"Amount": 0.0,
"ProductId": 223162,
"GoodId": null,
"Name": "Спа со скидкой",
"BasePrice": 10.0000,
"Price": 10.0000,
"Discount": 0.0000,
"Bonus": 0.0000,
"EventDateStart": "2024-06-02T19:00:00.0000000Z",
"EventDateEnd": "0001-01-01T00:00:00.0000000Z",
"NN": "",
"BarCode": null,
"SeanceId": 0,
"ActivityId": null,
"ActivityName": null,
"PlaceId": null,
"PlaceName": null,
"PayMethodId": 0,
"ReservationId": null,
"ReservationDetailId": null,
"ReservationDetails": null,
"ExternPrice": null
}
],
"Type": 1,
"State": 3,
"MailSent": false,
"IsFree": false,
"IsPayFromAccount": false,
"OrderID": "55a97ac3-2ff3-4b30-809b-ce818180c89c",
"ClientID": 2009,
"SkiClientId": 221153,
"ClientEmail": "test@test.test",
"ClientPhone": null,
"ClientCardCode": null,
"ReturnOrderID": "d28c522b2d824d4ebfd6fcf5076f9aaa",
"BankOrderID": "d28c522b-2d82-4d4e-bfd6-fcf5076f9aaa",
"PaymentTime": "0001-01-01T00:00:00.0000000Z",
"PaymentAmount": 10.0000,
"ProfileID": 1,
"SiteID": 2,
"MerchantID": 3,
"Discount": null,
"TNG": null
},
"UnitellerOrderData": null,
"CloudPaymentsOrderData": null,
"CloudPaymentsMerchantData": null,
"FormUrl": "https://qr.nspk.ru/AD783FC0059999999999D984D0C126A5?type=02&bank=10000001&sum=1000&cur=RUB&crc=C08B",
"MobilePaymentRequestUrl": null,
"MobilePaymentResultUrl": null,
"UsedFiscalization": false,
"HasErrors": false,
"ResponseDescription": "Заказ зарегистрирован",
"ErrorCode": 0
}
Ответ:
Для регистрации созданного заказа: ClientId-OrderId--MerchantId-ReturnUrl-ProfileID-CustomProperty-PhoneNumber-SecretKey (Прим.: 2 тире между OrderId и MerchantId)
Для заказа пополнения депозита: ClientId------OwnerId--Amount-MerchantId-ReturnUrl-ProfileID-CustomProperty-PhoneNumber-SecretKey (Прим.: 6 тире между ClientId и OwnerId и 2 тире между OwnerId и Amount)
Для заказа с товарами: ClientId--ProductId-EventDate---PayMethodId-OwnerId-Count--MerchantId-ReturnUrl-ProfileID-CustomProperty-PhoneNumber-SecretKey (Прим.: 2 тире между ClientId и ProductId, между Count и MerchantId и 3 тире между EventDate и PayMethodId)
Для заказа покупки билета на мероприятие: ClientId----SeanceId-PlaceId-PayMethodId-OwnerId-Count--MerchantId-ReturnUrl-ProfileID-CustomProperty-PhoneNumber-SecretKey (Прим.: 4 тире между ClientId и SeanceId, 2 тире между Count и MerchantId)
POST /Public/Api/ReservateOrder
Описание: Метод для резервирования места на сеанс/ мероприятия с последующей оплатой на кассе. Оплатить заказ, созданный с помощию этого метода через API нельзя.
Ответ:
Ответ:
POST /Public/Api/PaymentResult2
Описание: Метод подтверждает оплату у зарегистрированного заказа. Автоматическое подтверждение зависит от эквайринга.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ServiceOrderID | Строка | Нет | Идентификатор заказа в сервисе Барс |
2 | BankOrderID | Строка | Да | Идентификатор заказа внешний |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Для актуальных версий службы возможно передавать либо ServiceOrderID, либо BankOrderID, либо их вместе.
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | OrderInfo | Структура | Содержит информацию о заказе |
2 | HasErrors | bool | Указывает, была ли ошибка в запросе |
3 | ResponseDescription | Строка | Описание ответа |
4 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Пример ответа
{
"OrderInfo": {
"Items": [
{
"EndProductId": 8913,
"Type": 2,
"OwnerId": 230927,
"IsAddBalance": false,
"IsProduct": true,
"IsTicket": true,
"IsActivity": false,
"Amount": 0.0,
"ProductId": 11756,
"GoodId": 230929,
"Name": "Спа-релакс(90 минут)",
"BasePrice": 3500.0000,
"Price": 3500.0000,
"Discount": 0.0000,
"Bonus": 0.0000,
"EventDateStart": "2025-05-13T19:00:00.0000000Z",
"EventDateEnd": "0001-01-01T00:00:00.0000000Z",
"NN": "",
"BarCode": "9900020222",
"SeanceId": 0,
"ActivityId": null,
"ActivityName": null,
"PlaceId": null,
"PlaceName": null,
"PayMethodId": 0,
"ReservationId": null,
"ReservationDetailId": null,
"ReservationDetails": null,
"ExternPrice": null,
"DebtOwnerId": null,
"IsDebtRefinement": false,
"Marking": {
"Code": null,
"Uuid": null,
"Timestamp": null,
"InstanceId": null,
"DataVersion": null
}
}
],
"Type": 1,
"State": 11,
"MailSent": true,
"IsFree": false,
"IsPayFromAccount": false,
"OrderID": "1afc0bae-54bf-4668-930d-a7c6d912f498",
"ClientID": 26,
"SkiClientId": 0,
"ClientEmail": "",
"ClientPhone": "",
"ClientCardCode": "",
"ReturnOrderID": "",
"BankOrderID": "1afc0bae54bf4668930da7c6d912f498",
"PaymentTime": "0001-01-01T00:00:00.0000000Z",
"PaymentAmount": 3500.0000,
"ProfileID": 1,
"SiteID": 2,
"MerchantID": 1,
"Discount": null,
"TNG": null
},
"HasErrors": false,
"ResponseDescription": "Заказ оплачен, билеты высланы на ваш адрес электронной почты",
"ErrorCode": 0
}
Ответ: Неизвестный заказ
{
"OrderInfo": {
"Items": null,
"Type": 0,
"State": 0,
"MailSent": false,
"IsFree": false,
"IsPayFromAccount": false,
"OrderID": "00000000-0000-0000-0000-000000000000",
"ClientID": 0,
"SkiClientId": 0,
"ClientEmail": "",
"ClientPhone": "",
"ClientCardCode": "",
"ReturnOrderID": "",
"BankOrderID": null,
"PaymentTime": "0001-01-01T00:00:00.0000000Z",
"PaymentAmount": 0.0,
"ProfileID": 0,
"SiteID": 0,
"MerchantID": null,
"Discount": null,
"TNG": null
},
"HasErrors": true,
"ResponseDescription": "Заказ не найден",
"ErrorCode": 0
}
Пример, когда превышено время, отводимое на оплату:
{
"OrderInfo": {
"Items": [
{...}],
"Type": 1,
"State": 13,
"MailSent": false,
"IsFree": false,
"IsPayFromAccount": false,
"OrderID": "ca98224d-ce7e-46be-a7d6-2a0fd69b824d",
"ClientID": 3167,
"SkiClientId": 0,
"ClientEmail": "",
"ClientPhone": "",
"ClientCardCode": "",
"ReturnOrderID": "",
"BankOrderID": "ca98224dce7e46bea7d62a0fd69b824d",
"PaymentTime": "0001-01-01T00:00:00.0000000Z",
"PaymentAmount": 1.0000,
"ProfileID": 1,
"SiteID": 5,
"MerchantID": 1,
"Discount": null,
"TNG": null},
"HasErrors": true,
"ResponseDescription": "Истекло время оплаты заказа",
"ErrorCode": 0
}
Пример, когда подтверждается отмененный заказ:
{ ...
"HasErrors": true,
"ResponseDescription": "Произведен возврат средств",
"ErrorCode": 0
}
Подпись: BankOrderID-SecretKey
POST /Public/Api/ReturnOrder2
Описание: С помощью метода можно отменить заказ, находящимся в любом статусе. Автоматический возврат средств зависит от эквайринга.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | OrderId | Строка | Да | Идентификатор заказа в сервисе Барс |
2 | Sum | Строка | Нет | Сумма возврата (сейчас не используется. возвращается полная сумма заказа) |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | HasErrors | bool | Указывает, была ли ошибка в запросе |
2 | ResponseDescription | Строка | Описание ответа |
3 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Пример ответа:
{"HasErrors":false,"ResponseDescription":"","ErrorCode":0}
Ответы:
{"HasErrors":true,"ResponseDescription":"Заказ не найден","ErrorCode":0}
{"HasErrors":false,"ResponseDescription":"Заказ уже отменён","ErrorCode":0}
{
"HasErrors": true,
"ResponseDescription": "Состояние заказа не позволяет выполнить операцию отмены оплаты (Expired)",
"ErrorCode": 0
}
Подпись: OrderID-SecretKey
POST /Public/Api/RegisterClient
Описание: С помощью метода можно зарегистрировать клиента, тогда будет создан новый счёт, либо связать учётные записи клиента с сайта с уже существующим номером счёта в Барсе.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | Строка | Нет | Эмайл | |
2 | Phone | Строка | Нет | Телефон |
3 | Password | Строка | Нет | Пароль |
3 | SiteClientID | Строка до 40 символов | Да | Идентификатор клиента на сайте. Любой набор символов/почта/UUID, который генерирует внешний сайт |
3 | SkiClientID | Целое число | Да | Идентификатор сайта. Генерируется автоматически, либо используется существующий |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | SkiClientId | Целое число | Созданный номер счёта в Барсе |
2 | HasErrors | bool | Указывает, была ли ошибка в запросе |
3 | ResponseDescription | Строка | Описание ответа |
4 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Ответ:
{
"SkiClientId": 0,
"HasErrors": true,
"ResponseDescription": "Клиент с таким идентификатором с сайта уже зарегистрирован",
"ErrorCode": 2
}
Подпись: SiteClientID-SkiClientID-SecretKey
POST /Public/Api/FindClient
Описание: С помощью метода можно найти зарегистрированного клиента. Важно: данные должны быть указаны в профиле клиента в Барс.Администраторе
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | Строка | Да | Эмайл | |
2 | Phone | Строка | Да | Телефон |
3 | CardCode | Строка | Да | Номер карты (Barcode) |
3 | CardName | Строка | Да | Имя карты (видимый номер карты) |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | ClientFound | bool | Найден ли клиент |
2 | ClientId | Целое число | Номер счёта в Барсе, если клиент не найден то поле = 0 |
3 | ClientName | Строка | ИО клиента в формате "Имя Отчество Ф." |
4 | CardName | Строка | Имя карты |
5 | ClientFirstName | Строка | Отдельное поле для имени |
6 | ClientLastName | Строка | Отдельное поле для фамилии |
7 | ClientSecondName | Строка | Отдельное поле для отчества |
8 | ClientBirthday | Строка | Дата рождения (если не задано то "01.01.0001") |
9 | HasErrors | bool | Есть ли ошибка |
10 | ResponseDescription | Строка | Описание ответа |
11 | ErrorCode | Целое число | Код ошибки |
Пример ответа:
{
"ClientFound": true,
"ClientId": 230960,
"ClientName": "Имя Отчество Ф.",
"CardName": null,
"ClientFirstName": "Имя",
"ClientLastName": "Фамилия",
"ClientSecondName": "Отчество",
"ClientBirthday": "01.01.0001",
"HasErrors": false,
"ResponseDescription": null,
"ErrorCode": 0
}
Ответ:
{
"ClientFound": false,
"ClientId": 0,
"ClientName": null,
"CardName": null,
"ClientFirstName": null,
"ClientLastName": null,
"ClientSecondName": null,
"ClientBirthday": null,
"HasErrors": false,
"ResponseDescription": null,
"ErrorCode": 0
}
Подпись: Email-Phone-CardCode-CardName-SecretKey
Подпись для поиска по эмайлу: Email----SecretKey (4 тире между Email и SecretKey)
POST /Public/Api/ClientAccountInfo
Описание: С помощью метода можно получить информацию по счёту в Барсе. Для поиска используется SiteClientID
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SiteClientID | Строка | Да | Идентификатор клиента на сайте. Любой набор символов/почта/UUID, который генерирует внешний сайт |
2 | ProfileId | Целое число | Нет | Идентификатор профиля из конфига |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | LastOperations | Массив строк | 3 последние операции, совершенные клиентом |
2 | AccountNumber | Целое число | Номер счёта в Барсе |
3 | IsBlocked | bool | Заблокирован ли клиент |
4 | Deposit | Строка | Баланс депозита |
5 | Bonus | Строка | Баланс бонусов Барс |
6 | SingleTickets | Массив | Список разовых билетов |
7 | SeasonTickets | Массив | Список сезонных абонементов |
8 | CreditInfo | Структура | Информация о долгах клиента |
9 | SalesDisabled | bool | Запрещены ли продажи |
10 | Строка | Почта | |
11 | IsEmailConfirmed | bool | Подтвежден ли эмайл |
12 | FirstName | Строка | Имя |
13 | LastName | Строка | Фамилия |
14 | MoneyOperations | Структура | Список операций клиента |
15 | ExternalLoyalty | Структура | Информация из профилей систем лояльности |
16 | CategoryId | Целое число | Идентификатор категории |
17 | CategoryName | Строка | Имя категории |
18 | HasErrors | bool | Есть ли ошибка |
19 | ResponseDescription | Строка | Описание ответа |
20 | ErrorCode | Целое число | Код ошибки |
Структура CreditInfoItem:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Name | Строка | Имя товарной позиции |
2 | Amount | Дробное число | Стоимость |
3 | Timestamp | Строка | Дата покупки |
4 | IsPaidZone | bool | Является ли долгом за платную зону |
Структура MoneyOperation:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Timestamp | Строка | Дата покупки |
2 | Amount | Дробное число | Стоимость |
3 | GoodsName | Строка | Название товара |
4 | Comment | Строка | Тип операции (описание) |
5 | OperationType | Целое число | Тип операции |
"LastOperations": [
"Покупка товаров (Входной билет, 1500) на сумму 1 500,00 ₽ - 04.01.2025",
"Пополнение депозита на сумму 500,00 ₽ 20.12.2024",
"Пополнение депозита на сумму 500,00 ₽ 20.12.2024"
],
"AccountNumber": 221100,
"IsBlocked": false,
"Deposit": "10,00",
"Bonus": "0,00",
"SingleTickets": [],
"SeasonTickets": [],
"CreditInfo": [
{
"Name": "Товар в долг",
"Amount": 11.00,
"Timestamp": "2024-10-14T06:12:09.5770000Z",
"IsPaidZone": false
}
],
"SalesDisabled": false,
"Email": "test@test.test",
"IsEmailConfirmed": true,
"FirstName": "Горемыка",
"LastName": "Клиент",
"MoneyOperations": [
{
"Timestamp": "05/26/2024 20:49:24",
"Amount": 1.00,
"GoodsName": "тестовый абонемент",
"Comment": "Приобретение товаров и услуг",
"OperationType": 3
},
{
"Timestamp": "05/21/2024 11:49:28",
"Amount": 3.00,
"GoodsName": "Тестовое приобретение услуг",
"Comment": "Приобретение товаров и услуг",
"OperationType": 68
},
{
"Timestamp": "05/16/2024 17:01:39",
"Amount": 3.00,
"GoodsName": "Тестовое приобретение услуг",
"Comment": "Приобретение товаров и услуг",
"OperationType": 68
}
],
"ExternalLoyalty": null,
"CategoryId": 0,
"CategoryName": null,
"HasErrors": false,
"ResponseDescription": "Данные клиента получены",
"ErrorCode": 0
}
Ответ, если клиент не найден:
{
"LastOperations": null,
"AccountNumber": 0,
"IsBlocked": false,
"Deposit": null,
"Bonus": null,
"SingleTickets": null,
"SeasonTickets": null,
"CreditInfo": null,
"SalesDisabled": false,
"Email": null,
"IsEmailConfirmed": false,
"FirstName": null,
"LastName": null,
"MoneyOperations": null,
"ExternalLoyalty": null,
"CategoryId": 0,
"CategoryName": null,
"HasErrors": true,
"ResponseDescription": "Клиент не зарегистрирован в магазине",
"ErrorCode": 2
}
ответ, если не включен параметр "IsSkiIDRequired":
{ "LastOperations": null,
"AccountNumber": 0,
"IsBlocked": false,
"Deposit": null,
"Bonus": null,
"SingleTickets": null,
"SeasonTickets": null,
"CreditInfo": null,
"SalesDisabled": false,
"Email": null,
"IsEmailConfirmed": false,
"FirstName": null,
"LastName": null,
"MoneyOperations": null,
"ExternalLoyalty": null,
"CategoryId": 0,
"CategoryName": null,
"HasErrors": true,
"ResponseDescription": "Не удалось получить информацию о клиенте",
"ErrorCode": 2}
Подпись: SiteClientID-SecretKey
POST /Public/Api/AccountInfo
Описание: С помощью метода можно получить информацию по счёту в Барсе. Для поиска используется SkiClientId
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SkiClientId | Целое число | Да | Идентификатор клиента в Барсе |
2 | ProfileId | Целое число | Нет | Идентификатор профиля из конфига |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | LastOperations | Массив строк | 3 последние операции, совершенные клиентом |
2 | AccountNumber | Целое число | Номер счёта в Барсе |
3 | IsBlocked | bool | Заблокирован ли клиент |
4 | Deposit | Строка | Баланс депозита |
5 | Bonus | Строка | Баланс бонусов Барс |
6 | SingleTickets | Массив | Список разовых билетов |
7 | SeasonTickets | Массив | Список сезонных абонементов |
8 | CreditInfo | Структура | Информация о долгах клиента |
9 | SalesDisabled | bool | Запрещены ли продажи |
10 | Строка | Почта | |
11 | IsEmailConfirmed | bool | Подтвежден ли эмайл |
12 | FirstName | Строка | Имя |
13 | LastName | Строка | Фамилия |
14 | MoneyOperations | Структура | Список операций клиента |
15 | ExternalLoyalty | Структура | Информация из профилей систем лояльности |
16 | CategoryId | Целое число | Идентификатор категории |
17 | CategoryName | Строка | Имя категории |
18 | HasErrors | bool | Есть ли ошибка |
19 | ResponseDescription | Строка | Описание ответа |
20 | ErrorCode | Целое число | Код ошибки |
Структура CreditInfoItem:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Name | Строка | Имя товарной позиции |
2 | Amount | Дробное число | Стоимость |
3 | Timestamp | Строка | Дата покупки |
4 | IsPaidZone | bool | Является ли долгом за платную зону |
Структура MoneyOperation:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Timestamp | Строка | Дата покупки |
2 | Amount | Дробное число | Стоимость |
3 | GoodsName | Строка | Название товара |
4 | Comment | Строка | Тип операции (описание) |
5 | OperationType | Целое число | Тип операции |
"LastOperations": [
"Покупка товаров (Входной билет, 1500) на сумму 1 500,00 ₽ - 04.01.2025",
"Пополнение депозита на сумму 500,00 ₽ 20.12.2024",
"Пополнение депозита на сумму 500,00 ₽ 20.12.2024"
],
"AccountNumber": 221100,
"IsBlocked": false,
"Deposit": "10,00",
"Bonus": "0,00",
"SingleTickets": [],
"SeasonTickets": [],
"CreditInfo": [
{
"Name": "Товар в долг",
"Amount": 11.00,
"Timestamp": "2024-10-14T06:12:09.5770000Z",
"IsPaidZone": false
}
],
"SalesDisabled": false,
"Email": "test@test.test",
"IsEmailConfirmed": true,
"FirstName": "Горемыка",
"LastName": "Клиент",
"MoneyOperations": [
{
"Timestamp": "05/26/2024 20:49:24",
"Amount": 1.00,
"GoodsName": "Имя товара",
"Comment": "Приобретение товаров и услуг",
"OperationType": 3
},
{
"Timestamp": "05/21/2024 11:49:28",
"Amount": 3.00,
"GoodsName": "Имя товара",
"Comment": "Приобретение товаров и услуг",
"OperationType": 68
},
{
"Timestamp": "05/16/2024 17:01:39",
"Amount": 3.00,
"GoodsName": "Имя товара",
"Comment": "Приобретение товаров и услуг",
"OperationType": 68
}
],
"ExternalLoyalty": null,
"CategoryId": 0,
"CategoryName": null,
"HasErrors": false,
"ResponseDescription": "Данные клиента получены",
"ErrorCode": 0
}
Ответ, если клиент не найден:
{ "LastOperations": null,
"AccountNumber": 0,
"IsBlocked": false,
"Deposit": null,
"Bonus": null,
"SingleTickets": null,
"SeasonTickets": null,
"CreditInfo": null,
"SalesDisabled": false,
"Email": null,
"IsEmailConfirmed": false,
"FirstName": null,
"LastName": null,
"MoneyOperations": null,
"ExternalLoyalty": null,
"CategoryId": 0,
"CategoryName": null,
"HasErrors": true,
"ResponseDescription": "Не удалось получить информацию о клиенте",
"ErrorCode": 2}
Подпись: SkiClientId-SecretKey
POST /Public/Api/ModifyClientInfo
Описание: С помощью метода можно добавить/изменить персональные данные клиента. Или подтвердить почту.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SiteClientId | Строка | Да | Идентификатор клиента на сайте. Любой набор символов/почта/UUID, который генерирует внешний сайт |
2 | SkiClientId | Целое число | Да | Идентификатор клиента в Барсе (номер счёта) |
3 | Items | Список объектов | Да | ключ и значение, которое будут обновляться |
4 | ReturnUrl | Строка | Нет | Ссылка для подтверждение почты, которое отправляется в письме клиенту. Тест письма можно редактировать в "шаблоне письма для проверки электронного ящика" |
5 | ConfirmEmail | bool | Нет | Отправлять ли письмо для подтверждение почты. (Да, если true) |
6 | SiteID | Целое число | Нет | Идентификатор сайта |
Структура Items
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | Name | Строка | Да | Название параметра |
2 | Value | Строка | Да | Новое значение |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | HasErrors | bool | Указывает, была ли ошибка в запросе |
2 | ResponseDescription | Строка | Описание ответа |
3 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Ответы:
Если, почта и номер счёта относятся к разным клиентам
{
"HasErrors": true,
"ResponseDescription": "Переданные идентификаторы относятся к разным клиентам",
"ErrorCode": 2
}
Если, передано неподдерживаемое название поля
{"HasErrors":true,"ResponseDescription":"Поле {Field_Name} не поддерживается","ErrorCode":6}
Подпись: SiteClientId-SkiClientId-Name-Value-SecretKey
POST /Public/Api/AddMediaHash
Описание: С помощью метода можно добавить носитель по Hash банковской карты к счету клиента в Барсе.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SkiClientId | Целое число | Да | Идентификатор клиента сервисе Барс |
2 | MerchantID | Строка | Да | Идентификатор мерчанта из конфига |
3 | panNumber | Строка | Нет | Видимый номер банковской карты клиента. Принимаемое значения должно проходить регулярное выражение (\d{16}) |
4 | ProfileId | Целое число | Да | Идентификатор профиля из конфига |
5 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | SkiClientId | Целое число | Номер счёта в Барсе |
2 | HasErrors | bool | Указывает, была ли ошибка в запросе |
3 | ResponseDescription | Строка | Описание ответа |
4 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Ответ:
Если, передан неправильно номер банковской карты
{"HasErrors":true,"ResponseDescription":"Неверный номер карты","ErrorCode":6}
Подпись: SkiClientId-MerchantID-ProfileID-SecretKey
POST /Public/Api/AddCustomMediaCard
Описание: С помощью метода можно добавить любой номер карты/билета к клиенту.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SkiClientId | Целое число | Да | Идентификатор клиента сервисе Барс (Допустимо NULL) |
2 | SiteClientID | Строка | Да | Идентификатор клиента на сайте (Допустимо NULL) |
3 | Code | Строка | Да | Номер карты/билета/какой-либо идентификатор |
4 | CardMediaId | Целое число | Да | Идентификатор типа карты, который будет привязан к счёту в Барсе. Создаётся в Администраторе в справочниках видов карт |
5 | ProfileId | Целое число | Да | Идентификатор профиля из конфига |
6 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | CardId | Целое число | Идентификатор карты из БД (AccountStockId), которую выдали клиенту |
2 | SkiClientId | Целое число | Идентификатор клиента (номер счёта) сервисе Барс |
3 | HasErrors | bool | Указывает, была ли ошибка в запросе |
4 | ResponseDescription | Строка | Описание ответа |
5 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Ответы:
Если не указан тип карты, которую надо выдать клиенту
{
"SkiClientId": 0,
"CardId": 0,
"HasErrors": true,
"ResponseDescription": "Не удалось получить медиа-тип карты по Id: 16 для генерации",
"ErrorCode": 2
}
Если карта с таким номером уже выдана
{
"SkiClientId": 0,
"CardId": 0,
"HasErrors": true,
"ResponseDescription": "Карта с таким кодом уже есть у клиента с ID: {int}",
"ErrorCode": 2
}
Подпись: ProfileID-SkiClientId-SiteClientID-Code-CardMediaId-SecretKey
POST /Public/Api/BlockAccount
Описание: С помощью метода можно заблокировать клиента. Разблокировка возможна только в модуле Барс.Администратор.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SkiClientId | Целое число | Да | Идентификатор клиента в системе Барс |
2 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | HasErrors | bool | Указывает, была ли ошибка в запросе |
2 | ResponseDescription | Строка | Описание ответа |
3 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Ответ, если передан неверный номер счёта:
{"HasErrors":true,"ResponseDescription":"Клиент не найден","ErrorCode":2}
Подпись: SkiClientId-SecretKey
POST /Public/Api/ClientRightsDescription
Описание: С помощью метода можно по номеру билету (Barcode) получить информацию по абонементам/билетам на счёте клиента.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | Barcode | Строка | Да | Идентификатор карты клиенты (Номер/Barcode) |
2 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | CodeState | Целое число | Код состояния |
2 | Rights | Массив объектов | Список билетов/абонементов клиента |
3 | BlockReason | Строка | Причина блокировки |
4 | HasErrors | bool | Указывает, была ли ошибка в запросе |
5 | ResponseDescription | Строка | Описание ответа |
6 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Структура Rights:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Status | Enum | Код статуса |
2 | IsActive | bool | Активен ли абонемент |
3 | IsActiveDescription | Строка | Описание состояния абонемента |
4 | CategoryName | Строка | Название |
5 | CategoryId | Целое число | Идентификатор из базы данных |
6 | NN | Строка | Номенклатурный номер (если есть интеграция с 1С) |
7 | LongName | Строка | Название + срок действия + остаток единиц на абонементе |
8 | StockType | Целое число | Тип (абонемент/Разовый билет/Депозит) |
Пример ответа:
{ "CodeState": 0,
"Rights": [
{
"Status": 2,
"IsActive": false,
"IsActiveDescription": "Не действителен",
"CategoryName": "Абонемент для Массажа",
"CategoryId": 221134,
"NN": "",
"LongName": "Абонемент для Массажа с 05.04.2024 10:27",
"StockType": 3
},
{
"Status": 2,
"IsActive": false,
"IsActiveDescription": "Не активирован",
"CategoryName": "Входной билет 31 декабря",
"CategoryId": 197717,
"NN": "",
"LongName": "Входной билет 31 декабря - еще не активирован",
"StockType": 3
}],
"BlockReason": null,
"HasErrors": false,
"ResponseDescription": null,
"ErrorCode": 0
}
Ответ, когда не найден номер карты:
{
"CodeState": 1,
"Rights": [],
"BlockReason": null,
"HasErrors": false,
"ResponseDescription": null,
"ErrorCode": 0
}
Подпись: Barcode-SecretKey
POST /Public/Api/Passes
Описание: С помощью метода можно получить информацию по проходам клиента и чем они они были оплачены. Можно использовать фильтрацию по дате.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SiteClientId | Строка | Да | Идентификатор клиента на сайте |
1 | SkiClientId | Целое число | Да | Идентификатор клиента в Барсе (номер счёта) |
1 | DateStart | Строка | Да | Дата начала выборки |
1 | DateEnd | Строка | Да | Дата окончания выборки |
2 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Items | Массив объектов | Список посещений |
2 | HasErrors | bool | Указывает, была ли ошибка в запросе |
3 | ResponseDescription | Строка | Описание ответа |
4 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Структура Item:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Date | Строка (ISO 8601) | Дата и время посещения/потраты |
2 | FacilityName | Строка | Название объекта/услуги |
3 | Payments | Массив объектов | Список потрат |
Структура Payments:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | PayName | Строка | Название того, чем была оплачена услуга |
2 | PayAmount | Дробное число | Сумма потраченных единиц |
Пример ответа:
{
"Items": [
{
"Date": "2025-03-25T08:05:38.0000000Z",
"FacilityName": "Тестовая услуга",
"Payments": [
{
"PayName": "тестовый абонемент",
"PayAmount": 1.00
}
]
}
],
"HasErrors": false,
"ResponseDescription": null,
"ErrorCode": 0
}
Пример ответа, если проходов или потрат в указанный период нет:
{"Items":[],"HasErrors":false,"ResponseDescription":null,"ErrorCode":0}
Ответ, когда не найден клиент:
{
"Items": null,
"HasErrors": true,
"ResponseDescription": "Клиент не найден",
"ErrorCode": 2
}
Подпись: SiteClientId-SkiClientId-DateStart-DateEnd-SecretKey
Подпись поиска по SiteClientId: SiteClientId----SecretKey (4 тире между SiteClientId и SecretKey)
POST /Public/Api/GetClientProduct
Описание: Метод возвращает файл билета в формате .pdf в бинарном виде.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | TicketID | Строка | Да | Идентификатор позиции в заказе (EndProductId) |
2 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
Content-Type: application/pdf
Status Code: 200 OK
Ответ:
Content-Type: text/plain; charset=utf-8
Status Code: 500 Internal Server Error
Подпись: TicketID-SecretKey
POST /Public/Api/GetOrderTickets
Описание: Метод возвращает все билеты в заказе в формате Base64.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ServiceOrderId | Строка | Да | Идентификатор заказа |
2 | GroupTickets | 0 или 1 | Да | Сгруппировать ли все билеты. Если будет указано 1, то все билеты будут сгруппированы в 1 объект. |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Tickets | Массив объектов | Билеты |
1.1. | Content | Строка | Файл билета в формате Base64 |
1.2. | Name | Строка | Название билета/абонемента |
2 | HasErrors | bool | Указывает, была ли ошибка в запросе |
3 | ResponseDescription | Строка | Описание ответа |
4 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Ответ:
{
"Tickets": null,
"HasErrors": true,
"ResponseDescription": "Заказ не найден",
"ErrorCode": 2
}
Подпись: ServiceOrderId-GroupTickets-SecretKey
POST /Public/Api/GetClientOrders
Описание: С помощью метода можно найти определенные заказы клиента, используя фильтрацию по дате.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SiteClientId | Строка | Да | Идентификатор клиента на сайте |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | HasErrors | bool | Указывает, была ли ошибка в запросе |
2 | ResponseDescription | Строка | Описание ответа |
3 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Ответ при неверной комбинации параметров:
{
"Orders": null,
"HasErrors": true,
"ResponseDescription": "Параметры запроса заданы не верно",
"ErrorCode": 2
}
Подпись: SiteClientId-SecretKey
POST /Public/Api/DenyReturnMoney
Описание: С помощью метода можно запретить возврат денежных средств со счета клиента. Отменить запрет возврата можно только в карточке клиента в модуле Барс.Администратор
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | SkiClientId | Целое число | Да | Идентификатор клиента на сайте |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | HasErrors | bool | Указывает, была ли ошибка в запросе |
2 | ResponseDescription | Строка | Описание ответа |
3 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Пример ответа:
{"HasErrors":false,"ResponseDescription":null,"ErrorCode":0}
Ответ, если клиент не найден:
{"HasErrors":true,"ResponseDescription":"Клиент не найден","ErrorCode":2}
Подпись: SkiClientId-SecretKey
(В работе)
POST /Public/Api/PlaceScheme
Описание: С помощью метода можно в формате JSON получить структуру мест проведения мероприятия для последующей покупки билета или бронирования.
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ProfileID | Строка | Да | Идентификатор профиля из конфига |
1 | SeanceID | Строка | Да | Идентификатор сеанса |
1 | SchemeID | Строка | Да | Идентификатор главной схемы, либо родительского элемента (для многоуровневых схем) |
3 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | HasErrors | bool | Указывает, была ли ошибка в запросе |
2 | ResponseDescription | Строка | Описание ответа |
3 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Пример
Ответ:
Подпись: ProfileID-SeanceID-SchemeID-SecretKey
POST /Public/Api/ZonesInfo
Описание: С помощью метода можно получить информацию о платных зонах
№ | Параметр | Тип | Участвует в подписи? | Описание |
---|---|---|---|---|
1 | ZoneId | Строка | Да | Идентификатор платной зоны из базы данных |
2 | SiteID | Целое число | Нет | Идентификатор сайта |
Ответ:
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Items | Массив объектов | Список платных зон |
1 | HasErrors | bool | Указывает, была ли ошибка в запросе |
2 | ResponseDescription | Строка | Описание ответа |
3 | ErrorCode | Целое число | Код ошибки (если ошибки нет, то ErrorCode = 0) |
Структура Items
№ | Поле | Тип | Описание |
---|---|---|---|
1 | Id | Целое число | Идентификатор платной зоны из базы данных |
2 | Name | Строка | Название платной зоны |
3 | Quantity | Целое число | Количество посетителей внутри зоны на текущий момент времени |
Пример
{
"Items": [
{
"Id": 550,
"Name": "Зона СПА",
"Quantity": 10
}
],
"HasErrors": false,
"ResponseDescription": null,
"ErrorCode": 0
}
Ответ:
{"Items":[],"HasErrors":false,"ResponseDescription":null,"ErrorCode":0}
Подпись: ZoneId-SecretKey
(В работе)