.. _walkthrough/order_example/begin: ======================== Пример проведения заказа ======================== .. note:: С нуля создадим и проведем смешанный заказ: один билет с рассадкой, другой -- без. Будет два примера, отличающихся порядком добавления этих билетов. 0. :ref:`Получаем ` информацию о событиях ==================================================================== На этом этапе выбираем мероприятие, на которое будем проводить заказ. Отправляем запрос Events в gRPC-сервис `tc-simple `_, в полученном списке находим нужное мероприятие и берём его id. Допустим, это `5d7134962110d30a34e95b96`. Также в ответе будут id сетов -- например, `5d7135112110d30a34e97e2d`. 1. Получаем информацию о билетах ==================================================================== Для последующего заказа билетов с местом -- передаём id мероприятия в запросе Seats в gRPC-сервис `tc-simple `_, в полученном списке находим места и получаем id билетов (допустим, `5d7134962110d30a34e95cfe`). Если билетов с местами в продаже не будет, этот шаг пропускается. 2a. Создаем заказ (добавляем билет :ref:`без места `) ====================================================================================== Берем id добавляемого сета из п.0 .. sourcecode:: http POST /v2/resources/orders HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "event": "5d7134962110d30a34e95b96", "random": { "5d7135112110d30a34e97e2d": 1 } } .. sourcecode:: js 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. Заполняем заказ (добавляем билет :ref:`с местом `) ======================================================================================= Берем id добавляемого места из п.1, но при этом еще добавляем id билета, полученного в ответе из п.2a .. sourcecode:: http PATCH /v2/resources/orders/5d8b924971a0bf323bd6a6ed HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "tickets": [ "5d7135113f18da51a186ad16", "5d7134962110d30a34e95cfe" ] } .. sourcecode:: js 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. Создаем заказ (добавляем билет :ref:`с местом `) ===================================================================================== Берем id добавляемого места из п.1 .. sourcecode:: http POST /v2/resources/orders/5d8b924971a0bf323bd6a6ed HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "tickets": [ "5d7134962110d30a34e95cfe" ] } .. sourcecode:: js 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. Заполняем заказ (добавляем билет :ref:`без места `) ======================================================================================== Берем id добавляемого сета из п.2b (или из п.0), но при этом еще дописываем id сета от добавленного билета из п.2 .. sourcecode:: http POST /v2/resources/orders HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "random": { "5d71353b2110d30a34e97e31": 1, "5d7135112110d30a34e97e2d": 1 } } 4. :ref:`Завершаем ` заказ ========================================================== .. sourcecode:: http PATCH /v2/resources/orders/5d8b924971a0bf323bd6a6ed HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b96d Content-Type: application/json { "status": "done" } .. sourcecode:: js 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 } } } } **Возможные ошибки при работе с заказом** При ошибках возвращается список текстовых сообщений: .. sourcecode:: http HTTP/1.1 400 Content-Type: application/json { "errors": [ "Event not found" ] } +------------------------------------------------------+--------------------------------------------------------+ | Сообщение | Причина | +======================================================+========================================================+ | Event 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 | нельзя менять заказ в статусе: | +------------------------------------------------------+--------------------------------------------------------+ | Allow update the only status to cancelled | разрешено только отменить заказ | +------------------------------------------------------+--------------------------------------------------------+ | expired_after is not changable | время жизни не может быть изменено | +------------------------------------------------------+--------------------------------------------------------+ | max expired_after is {dt} | время жизни истекло
| +------------------------------------------------------+--------------------------------------------------------+ | 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} | время жизни истекло
| +------------------------------------------------------+--------------------------------------------------------+ | 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 | для дополнительного поля "Выбор нескольких вариантов", | | | значение должно быть длиннее чем | +------------------------------------------------------+--------------------------------------------------------+ | list length is greater than | для дополнительного поля "Выбор нескольких вариантов", | | | значение должно быть короче чем | +------------------------------------------------------+--------------------------------------------------------+ | value is less than | для дополнительного поля "Выбор одного варианта", | | | значение должно быть больше чем | +------------------------------------------------------+--------------------------------------------------------+ | value is greater than | для дополнительного поля "Выбор одного варианта", | | | значение должно быть меньше чем | +------------------------------------------------------+--------------------------------------------------------+ | value should be less than | для дополнительного поля "Выбор одного варианта", | | | значение должно быть меньше либо равно | +------------------------------------------------------+--------------------------------------------------------+ | value should be greater than | для дополнительного поля "Выбор одного варианта", | | | значение должно быть больше либо равно | +------------------------------------------------------+--------------------------------------------------------+ | value is not a string | для дополнительного поля "Текст/Длинный текст", | | | значение должно быть представлено строкой | +------------------------------------------------------+--------------------------------------------------------+ | blank value is not allowed | для дополнительного поля "Текст/Длинный текст", | | | значение не должно быть пустым | +------------------------------------------------------+--------------------------------------------------------+ | String is shorter than characters | для дополнительного поля "Текст/Длинный текст", | | | значение должно быть длиннее символов | +------------------------------------------------------+--------------------------------------------------------+ | String is longer than characters | для дополнительного поля "Текст/Длинный текст", | | | значение должно быть короче символов | +------------------------------------------------------+--------------------------------------------------------+ | does not match pattern | для дополнительного поля "Текст/Длинный текст", | | | значение должно соответствовать формату | +------------------------------------------------------+--------------------------------------------------------+ | Not enough money, сontact to TicketsCloud manager | недостаточно денег, свяжитесь с менеджером TicketsCloud| +------------------------------------------------------+--------------------------------------------------------+ | there is no tickets in order | в заказе нет ни одного билета | +------------------------------------------------------+--------------------------------------------------------+ | Incorrect status for this operation | нельзя выполнить перевод заказа в статус: | +------------------------------------------------------+--------------------------------------------------------+ | Order is not cancellable | заказ с id: не может быть отменен | +------------------------------------------------------+--------------------------------------------------------+