Шаг 4: Возврат заказа¶
Создание возврата¶
Запрос
POST/v2/resources/refund_requests/¶
JSON Parameters:
- order – Id заказа
- culprit – Виновник возврата (
user|org)- tickets – Список id билетов для возврата
- requested_at – Дата и время заявки на возврат. Необязательный параметр.
Ответ
Объект возврата
{ "data": { "id": objectid, "status": "new" | "in_progress" | "approved" | "rejected", "culprit": "user" | "org", "created_at": ISODatetime, "finished_at": ISODatetime, "requested_at": ISODatetime, "refund_nominal": money // сумма возврата "delta": money // Устарело. Необходимо использовать `refund_nominal`, "event": objectid, "org": objectid, "order": objectid, "policy": "general" | "law_ru_193", // политика возврата. // general - стандартные условия. // law_ru_193 - применяются условия по ФЗ-193 "tickets": Array[objectid], "vendor": objectid } }
Пример запроса
POST /v2/resources/refund_requests HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b88d Content-Type: application/json { "culprit": "user", "order": "5def7c43e3ed5ae2a8d6908b", "requested_at": "2019-12-15T13:01:02", "tickets": [ "5dd5469b05fe4df8940eb613" ] }
Пример ответа
HTTP/1.1 200 OK Content-Type: application/json { "data": { "created_at": "2019-12-18 12:46:28", "culprit": "user", "customer_money": "1000.00", "delta": "1000.00", "event": "5dd5468f05fe4df8940eb602", "id": "5dfa1fa437077b6b6ed0f6b3", "order": "5def7c43e3ed5ae2a8d6908b", "org": "5b2d06ac5c3eb3000c475e36", "policy": "law_ru_193", "refund_nominal": "1000.00", "requested_at": "2019-12-15 13:01:02", "status": "new", "tickets": [ "5dd5469b05fe4df8940eb613" ], "vendor": "5b2d06ac5c3eb3000c475e36" }, "refs": { "events": { "5dd5468f05fe4df8940eb602": { "age_rating": 0, "id": "5dd5468f05fe4df8940eb602", "lifetime": { "finish": "2020-01-01 20:00:00", "start": "2020-01-01 17:00:00" }, "org": "5b2d06ac5c3eb3000c475e36", "status": "public", "timezone": "Europe/Moscow", "title": { "desc": "Metal music for all", "text": "MetalGrid" }, "venue": "583d9307515e350019da3ef6" } }, "orders": { "5def7c43e3ed5ae2a8d6908b": { "code": "k0xvxvel", "created_at": "2019-12-10 11:06:43", "custom_fields": { "order": [], "tickets": [] }, "done_at": "2019-12-10 11:11:54", "event": "5dd5468f05fe4df8940eb602", "expired_after": "2019-12-10 11:21:43", "id": "5def7c43e3ed5ae2a8d6908b", "number": 121, "org": "5b2d06ac5c3eb3000c475e36", "origin": "api", "payments": [], "promocodes": [], "settings": { "invitation": false, "send_tickets": false, "subscribe_agree": false }, "status": "done", "tickets": [ { "barcode": "61534165115017991", "discount": "0.00", "extra": "0.00", "full": "1000.00", "id": "5dd5469b05fe4df8940eb613", "nominal": "1000.00", "number": 324762, "price": "1000.00", "serial": "APP", "set": "5dd5469b05fe4df8940eb606", "status": "reserved" } ], "values": { "discount": "0.00", "extra": "0.00", "full": "1000.00", "nominal": "1000.00", "price": "1000.00", "sets_values": { "5dd5469b05fe4df8940eb606": { "discount": "0.00", "id": "5dd5469b05fe4df8940eb606", "nominal": "1000.00", "price": "1000.00", "promocode": null } }, "viral_promocodes": [] }, "vendor": "5b2d06ac5c3eb3000c475e36", "vendor_data": {} } }, "partners": { "5b2d06ac5c3eb3000c475e36": { "id": "5b2d06ac5c3eb3000c475e36", "name": "Funky Box" } }, "tickets": { "5dd5469b05fe4df8940eb613": { "discount": "0.00", "extra": "0.00", "full": "1000.00", "id": "5dd5469b05fe4df8940eb613", "nominal": "1000.00", "number": 324762, "price": "1000.00", "serial": "APP", "set": "5dd5469b05fe4df8940eb606", "status": "reserved" } } } }
Ошибки при создании возврата¶
| Сообщение | Причина |
|---|---|
| <field> is required | не указано поле <field> |
| culprit Value „<value>“ not in list of avaiable values [„user“, „org“] | неверно указан виновник возврата |
| Order <order_id> not found | не найден заказ |
| Reason is unavailable now. | по указанной причине возврат не осуществляется |
| No reason nor lower_minimal_days setting | запрещено для возврата < 3 дней до начала мероприятия |
| Reason required for discounted tickets: No discounted.percentage setting found | нет настройки для возврата билетов со скидкой |
| Operation failed: Event started, and no after_event_start setting. | запрещено для возврата когда мероприятие началось |
| Reason «custom» prohibited to get more than by reason «at will» | c таким типом возврата запрещено |
| Use «at_will» reason instead of «cancel_or_postpone» | с таким типом возврата запрещено |
| [objectid, objectid, …] | не найдены подтверждающие документы |
| Empty tickets for refund | билетов для возврата не найдено |
| Problem with customer in vibe: [<ticket_id>, …] | указанные билеты проданы/подарены в приложении VIBE другому человеку |
| Problem with check customer in vibe, please retry | возникла проблема с проверкой владельца билета, повторите позже |
| Operation failed: Event ended, and no after_event_end setting. | запрещено после окончания мероприятия |
| Operation failed: Mixed percentage values of tickets in one refund | билеты с разными скидками, возврат невозможен |
| Category {category_id} is not fz-193 | категория билетов запрещена к возврату по ФЗ-193 |
| Law 193 is not for currency {currency} | заказ не в RUB, ФЗ-193 неприменим |
| Order was done before Law 193 issued | заказ раньше даты действия ФЗ-193 |
| bad culprit: <value> | неверно указан виновник возврата |
| Disabled by cascade setting | запрещено настройками ФЗ-193 |
| wrong order (id: <order_id>) status: <order_status> | заказ не в статусе done |
| Refund with culprit core must take all tickets from order | в возврате не все билеты |
| Value Error | возврат не создался, точная причина неизвестна |
| bad tickets | указаны билеты не из заказа |
| Unexpected situation | ошибка при создании платежей |
| RefundRequest in wrong status <refund_status> for create refund payment | неверный статус возврата при создании платежей |
Пример ошибки
{ "errors": [ "culprit Value 'idunno' not in list of avaiable values ['user', 'org']", "tickets list length is less than 1" ] }
Подтверждение и отмена возврата¶
Запрос
PATCH/v2/resources/refund_requests/:refund_id¶
JSON Parameters:
- status –
approved|rejected
Ответ
Пример запроса
PATCH /v2/resources/refund_requests/5dfa1fa437077b6b6ed0f6b3 HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b88d Content-Type: application/json { "status": "approved" }
При ошибках возвращается список текстовых сообщений:
{ "errors": [ "Incorrect status <status> for this operation" ] }
Ошибки при подтверждении возврата¶
| Сообщение | Причина |
|---|---|
| Not allowed to approve refund for finished event | запрещено подтверждать возврат после завершения мероприятия |
| Only org culprit allowed for cancelled events | только организатор может подтвердить возврат для отмененного мероприятия |
| Only user culprit allowed for non cancelled events | только пользователь может подтвердить возврат для не отмененного мероприятия |
| RefundRequest in wrong status <status> for approve | возврат находится в неверном статусе для подтверждения, возможно он уже подтвержден или отменен |
| Some tickets already use in another refund request | некоторые билеты уже используются в другом возврате и не могут быть в этом |
| Refund with culprit core must take all tickets from order | билеты должны быть из одного заказа |
| Sums of payments not equal refund request | сумма возврата билетов не совпадает с суммой, которая была за них уплачена |
| Not enough money, сontact to TicketsCloud manager | недостаточно денег для проведения возврата, для решения нужно связаться с менеджером TicketsCloud |
Ошибки при отмене возврата¶
| Сообщение | Причина |
|---|---|
| Cant reject refund request <id refund>, one of payments in status done | нельзя отменить возврат, потому что один из платежей уже в статусе done |
| Cant reject refund request <id refund>, one of payments in status in_progress | нельзя отменить возврат, потому что один из платежей уже в статусе in_progress |
| Failed to reject refund request <id refund> | Нельзя отменить возврат, возврат сменил статус с new/in_progress на другой |