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

Note

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

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"
    ]
}