Шаг 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 | не найден заказ |
Operation failed: less than three days before event start | меньше 3 дней до начала, по ФЗ-193 возврат невозможен |
Operation failed: event already start | мероприятие началось, по ФЗ-193 возврат невозможен |
Operation failed: there is discounted ticket | билет со скидкой, возврат невозможен |
Operation failed: Mixed percentage values of tickets in one refund | билеты с разными скидками, возврат невозможен |
bad culprit: <value> | неверно указан виновник возврата |
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 на другой |