Пример проведения заказа¶
Примечание
С нуля создадим и проведем смешанный заказ: один билет с рассадкой, другой – без. Будет два примера, отличающихся порядком добавления этих билетов.
0. Получаем информацию о событиях¶
На этом этапе выбираем мероприятие, на которое будем проводить заказ. Отправляем запрос Events в gRPC-сервис tc-simple, в полученном списке находим нужное мероприятие и берём его id. Допустим, это 5d7134962110d30a34e95b96. Также в ответе будут id сетов – например, 5d7135112110d30a34e97e2d.
1. Получаем информацию о билетах¶
Для последующего заказа билетов с местом – передаём id мероприятия в запросе Seats в gRPC-сервис tc-simple, в полученном списке находим места и получаем id билетов (допустим, 5d7134962110d30a34e95cfe). Если билетов с местами в продаже не будет, этот шаг пропускается.
2a. Создаем заказ (добавляем билет без места)¶
Берем id добавляемого сета из п.0
POST /v2/resources/orders HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "event": "5d7134962110d30a34e95b96", "random": { "5d7135112110d30a34e97e2d": 1 } }HTTP/1.1 200 OK Content-Type: application/json { "data": { "created_at": "2019-09-25 16:14:01", "event": "5d7134962110d30a34e95b96", "expired_after": "2019-09-25 16:29:01", "id": "5d8b924971a0bf323bd6a6ed", "number": 59743, "org": "5ba10ea90c43fc000b0fc786", "origin": "api", "status": "executed", "tickets": [ { "barcode": null, "discount": "0.00", "extra": "560.00", "full": "6160.00", "id": "5d7135113f18da51a186ad16", "nominal": "5600.00", "number": 168475, "price": "5600.00", "serial": "PYX", "set": "5d7135112110d30a34e97e2d", "status": "reserved" } ], "values": { "discount": "0.00", "extra": "560.00", "full": "6160.00", "nominal": "5600.00", "price": "5600.00", "sets_values": { "5d713505255895db3c30b0c5": { "discount": "0.00", "id": "5d713505255895db3c30b0c5", "nominal": "6666.00", "price": "6666.00", "promocode": null }, ... }, "viral_promocodes": [] }, "vendor": "5ba10ea90c43fc000b0fc786", }, "refs": { "events": { "5d7134962110d30a34e95b96": { "id": "5d7134962110d30a34e95b96", "lifetime": { "finish": "2020-06-12 18:00:00", "start": "2020-06-12 15:00:00" }, "org": "5ba10ea90c43fc000b0fc786", "status": "public", "timezone": "Europe/Moscow", "title": { "desc": "ref", "text": "Slipknot" } } }, "partners": { "5ba10ea90c43fc000b0fc786": { "id": "5ba10ea90c43fc000b0fc786", "name": "Тест VK Pay" } }, "promocodes": {}, "sets": { "5d7135112110d30a34e97e2d": { "id": "5d7135112110d30a34e97e2d", "name": "Фан зона", "price": "5600.00", "with_seats": false } } } }
3a. Заполняем заказ (добавляем билет с местом)¶
Берем id добавляемого места из п.1, но при этом еще добавляем id билета, полученного в ответе из п.2a
PATCH /v2/resources/orders/5d8b924971a0bf323bd6a6ed HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "tickets": [ "5d7135113f18da51a186ad16", "5d7134962110d30a34e95cfe" ] }HTTP/1.1 200 OK Content-Type: application/json { "data": { "created_at": "2019-09-25 16:14:01", "event": "5d7134962110d30a34e95b96", "expired_after": "2019-09-25 16:29:01", "id": "5d8b924971a0bf323bd6a6ed", "number": 59743, "org": "5ba10ea90c43fc000b0fc786", "origin": "api", "status": "executed", "tickets": [ { "barcode": null, "discount": "0.00", "extra": "560.00", "full": "6160.00", "id": "5d7135113f18da51a186ad16", "nominal": "5600.00", "number": 168475, "price": "5600.00", "serial": "PYX", "set": "5d7135112110d30a34e97e2d", "status": "reserved" }, { "barcode": null, "discount": "0.00", "extra": "99.00", "full": "1089.00", "id": "5d7134962110d30a34e95cfe", "nominal": "990.00", "number": 135830, "price": "990.00", "seat": { "number": "14", "row": "2", "sector": "5a8dd58e6e55b2064c67c144" }, "serial": "EOY", "set": "5d71353b2110d30a34e97e31", "status": "reserved" } ], "values": { "discount": "0.00", "extra": "659.00", "full": "7249.00", "nominal": "6590.00", "price": "6590.00", "sets_values": { "5d713505255895db3c30b0c5": { "discount": "0.00", "id": "5d713505255895db3c30b0c5", "nominal": "6666.00", "price": "6666.00", "promocode": null }, ... }, "viral_promocodes": [] }, "vendor": "5ba10ea90c43fc000b0fc786", }, "refs": { "events": { "5d7134962110d30a34e95b96": { "id": "5d7134962110d30a34e95b96", "lifetime": { "finish": "2020-06-12 18:00:00", "start": "2020-06-12 15:00:00" }, "org": "5ba10ea90c43fc000b0fc786", "status": "public", "timezone": "Europe/Moscow", "title": { "desc": "ref", "text": "Slipknot" } } }, "partners": { "5ba10ea90c43fc000b0fc786": { "id": "5ba10ea90c43fc000b0fc786", "name": "Тест VK Pay" } }, "promocodes": {}, "sets": { "5d7135112110d30a34e97e2d": { "id": "5d7135112110d30a34e97e2d", "name": "Фан зона", "price": "5600.00", "with_seats": false }, "5d71353b2110d30a34e97e31": { "id": "5d71353b2110d30a34e97e31", "name": "A2", "price": "990.00", "with_seats": true } } } }
2b. Создаем заказ (добавляем билет с местом)¶
Берем id добавляемого места из п.1
POST /v2/resources/orders HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "tickets": [ "5d7134962110d30a34e95cfe" ] }HTTP/1.1 200 OK Content-Type: application/json { "data": { "created_at": "2019-09-25 16:14:01", "event": "5d7134962110d30a34e95b96", "expired_after": "2019-09-25 16:29:01", "id": "5d8b924971a0bf323bd6a6ed", "number": 59743, "org": "5ba10ea90c43fc000b0fc786", "origin": "api", "status": "executed", "tickets": [ { "barcode": null, "discount": "0.00", "extra": "99.00", "full": "1089.00", "id": "5d7134962110d30a34e95cfe", "nominal": "990.00", "number": 135830, "price": "990.00", "seat": { "number": "14", "row": "2", "sector": "5a8dd58e6e55b2064c67c144" }, "serial": "EOY", "set": "5d71353b2110d30a34e97e31", "status": "reserved" } ], "values": { "discount": "0.00", "extra": "659.00", "full": "7249.00", "nominal": "6590.00", "price": "6590.00", "sets_values": { "5d713505255895db3c30b0c5": { "discount": "0.00", "id": "5d713505255895db3c30b0c5", "nominal": "6666.00", "price": "6666.00", "promocode": null }, ... }, "viral_promocodes": [] }, "vendor": "5ba10ea90c43fc000b0fc786", }, "refs": { "events": { "5d7134962110d30a34e95b96": { "id": "5d7134962110d30a34e95b96", "lifetime": { "finish": "2020-06-12 18:00:00", "start": "2020-06-12 15:00:00" }, "org": "5ba10ea90c43fc000b0fc786", "status": "public", "timezone": "Europe/Moscow", "title": { "desc": "ref", "text": "Slipknot" } } }, "partners": { "5ba10ea90c43fc000b0fc786": { "id": "5ba10ea90c43fc000b0fc786", "name": "Тест VK Pay" } }, "promocodes": {}, "sets": { "5d71353b2110d30a34e97e31": { "id": "5d71353b2110d30a34e97e31", "name": "A2", "price": "990.00", "with_seats": true } } } }
3b. Заполняем заказ (добавляем билет без места)¶
Берем id добавляемого сета из п.2b (или из п.0), но при этом еще дописываем id сета от добавленного билета из п.2
PATCH /v2/resources/orders/5d8b924971a0bf323bd6a6ed HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "random": { "5d71353b2110d30a34e97e31": 1, "5d7135112110d30a34e97e2d": 1 } }
4. Завершаем заказ¶
PATCH /v2/resources/orders/5d8b924971a0bf323bd6a6ed HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "status": "done" }HTTP/1.1 200 OK Content-Type: application/json { "data": { "code": "lw4bbl0o", "created_at": "2019-09-25 16:14:01", "done_at": "2019-09-25 16:20:40", "event": "5d7134962110d30a34e95b96", "expired_after": "2019-09-25 16:29:01", "id": "5d8b924971a0bf323bd6a6ed", "number": 59743, "org": "5ba10ea90c43fc000b0fc786", "origin": "api", "status": "done", "tickets": [ { "barcode": "67454655075047921", "discount": "0.00", "extra": "560.00", "full": "6160.00", "id": "5d7135113f18da51a186ad16", "nominal": "5600.00", "number": 168475, "price": "5600.00", "serial": "PYX", "set": "5d7135112110d30a34e97e2d", "status": "reserved" }, { "barcode": "35348364979141729", "discount": "0.00", "extra": "99.00", "full": "1089.00", "id": "5d7134962110d30a34e95cfe", "nominal": "990.00", "number": 135830, "price": "990.00", "seat": { "number": "14", "row": "2", "sector": "5a8dd58e6e55b2064c67c144" }, "serial": "EOY", "set": "5d71353b2110d30a34e97e31", "status": "reserved" } ], "values": { "discount": "0.00", "extra": "659.00", "full": "7249.00", "nominal": "6590.00", "price": "6590.00", "sets_values": { "5d713505255895db3c30b0c5": { "discount": "0.00", "id": "5d713505255895db3c30b0c5", "nominal": "6666.00", "price": "6666.00", "promocode": null }, ... }, "viral_promocodes": [] }, "vendor": "5ba10ea90c43fc000b0fc786", }, "refs": { "events": { "5d7134962110d30a34e95b96": { "id": "5d7134962110d30a34e95b96", "lifetime": { "finish": "2020-06-12 18:00:00", "start": "2020-06-12 15:00:00" }, "org": "5ba10ea90c43fc000b0fc786", "status": "public", "timezone": "Europe/Moscow", "title": { "desc": "ref", "text": "Slipknot" } } }, "partners": { "5ba10ea90c43fc000b0fc786": { "id": "5ba10ea90c43fc000b0fc786", "name": "Тест VK Pay" } }, "promocodes": {}, "sets": { "5d7135112110d30a34e97e2d": { "id": "5d7135112110d30a34e97e2d", "name": "Фан зона", "price": "5600.00", "with_seats": false }, "5d71353b2110d30a34e97e31": { "id": "5d71353b2110d30a34e97e31", "name": "A2", "price": "990.00", "with_seats": true } } } }
- Возможные ошибки при работе с заказом
При ошибках возвращается список текстовых сообщений:
HTTP/1.1 400 Content-Type: application/json { "errors": [ "Event <event_id> not found" ] }
Сообщение | Причина |
---|---|
Event <event_id> not found | не найдено мероприятие для заказа |
Deal not found | не найдена сделка |
Promokey needed | промоключ должен быть |
Promokey not founded | промоключ не найден |
Promokey expired | промоключ истек |
Promokey fully reserved | промоключ полностью зарезервирован |
Promokey already reserved | промоключ уже зарезервирован |
Only one of tickets or random can be set | только один: tickets или random может быть установлено |
„tickets“ or „random“ must be | обязан быть: tickets или random |
Not allow to update order in status <status> | нельзя менять заказ в статусе: <status> |
Allow update the only status to cancelled | разрешено только отменить заказ |
expired_after is not changable | время жизни не может быть изменено |
max expired_after is {dt} | время жизни истекло <dt :%Y-%m-%d %H:%M:%S> |
only org can send invitations | только организатор может отправлять приглашения |
invitation can send from control panel or salespoint only | приглашения можно отправить только из ЛК или из кассы |
Courier must set only with salespoint | запрос должен быть только из кассы |
Kryptonite integrations is disabled | интеграция с криптонитом выключена |
Cant set smart_tickets to false while kriptonite integration option is only smart_tickets | нельзя выключить «криптобилеты» пока выбрана интеграция «только криптобилеты» |
Cant use promocode when event have promotion | нельзя использовать промокод, пока на мероприятии действует промоакция |
expired_after is not changable | время жизни не может быть изменено |
max expired_after is {dt} | время жизни истекло <dt :%Y-%m-%d %H:%M:%S> |
Promokey needed to add these tickets | необходим промоключ, чтобы добавить эти билеты |
ticket (id = {}) does not belong to current event | билет не относится к текущему мероприятию |
value should be formatted „YYYY-MM-DD“ | для дополнительного поля «Дата», значение имеет неверный формат |
value should be True or False | для дополнительного поля «Галочка», значение должно быть булевым |
value is not a list | для дополнительного поля «Выбор нескольких вариантов», значение должно быть списком |
list length is less than <len> | для дополнительного поля «Выбор нескольких вариантов», значение должно быть длиннее чем <len> |
list length is greater than <len> | для дополнительного поля «Выбор нескольких вариантов», значение должно быть короче чем <len> |
value is less than <value> | для дополнительного поля «Выбор одного варианта», значение должно быть больше чем <value> |
value is greater than <value> | для дополнительного поля «Выбор одного варианта», значение должно быть меньше чем <value> |
value should be less than <value> | для дополнительного поля «Выбор одного варианта», значение должно быть меньше либо равно <value> |
value should be greater than <value> | для дополнительного поля «Выбор одного варианта», значение должно быть больше либо равно <value> |
value is not a string | для дополнительного поля «Текст/Длинный текст», значение должно быть представлено строкой |
blank value is not allowed | для дополнительного поля «Текст/Длинный текст», значение не должно быть пустым |
String is shorter than <len> characters | для дополнительного поля «Текст/Длинный текст», значение должно быть длиннее <len> символов |
String is longer than <len> characters | для дополнительного поля «Текст/Длинный текст», значение должно быть короче <len> символов |
does not match pattern <pattern> | для дополнительного поля «Текст/Длинный текст», значение должно соответствовать формату <pattern> |
Not enough money, сontact to TicketsCloud manager | недостаточно денег, свяжитесь с менеджером TicketsCloud |
there is no tickets in order | в заказе нет ни одного билета |
Incorrect status <status> for this operation | нельзя выполнить перевод заказа в статус: <status> |
Order <order_id> is not cancellable | заказ с id: <order_id> не может быть отменен |