Пример проведения заказа

Примечание

С нуля создадим и проведем смешанный заказ: один билет с рассадкой, другой – без. Будет два примера, отличающихся порядком добавления этих билетов.

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/5d8b924971a0bf323bd6a6ed 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

POST /v2/resources/orders 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> не может быть отменен