.. _walkthrough/refund_requests/begin: ===================== Шаг 4: Возврат заказа ===================== .. _walkthrough/refund_requests/create: Создание возврата ================= **Запрос** .. http:post:: /v2/resources/refund_requests/ :jsonparam order: Id заказа :jsonparam culprit: Виновник возврата (``user`` | ``org``) :jsonparam tickets: Список id билетов для возврата :jsonparam requested_at: Дата и время заявки на возврат. Необязательный параметр. **Ответ** .. _walkthrough/refund_requests/object: Объект возврата .. sourcecode:: js { "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 } } **Пример запроса** .. sourcecode:: http 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" ] } **Пример ответа** .. sourcecode:: http 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" } } } } Ошибки при создании возврата ============================ +-------------------------------------------------------------------------+--------------------------------------+ | Сообщение | Причина | +=========================================================================+======================================+ | is required | не указано поле | +-------------------------------------------------------------------------+--------------------------------------+ | culprit Value '' not in list of avaiable values ['user', 'org'] | неверно указан виновник возврата | +-------------------------------------------------------------------------+--------------------------------------+ | Order 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: | неверно указан виновник возврата | +-------------------------------------------------------------------------+--------------------------------------+ | wrong order (id: ) status: | заказ не в статусе done | +-------------------------------------------------------------------------+--------------------------------------+ | Refund with culprit core must take all tickets from order | в возврате не все билеты | +-------------------------------------------------------------------------+--------------------------------------+ | Value Error | возврат не создался, | | | точная причина неизвестна | +-------------------------------------------------------------------------+--------------------------------------+ | bad tickets | указаны билеты не из заказа | +-------------------------------------------------------------------------+--------------------------------------+ | Unexpected situation | ошибка при создании платежей | +-------------------------------------------------------------------------+--------------------------------------+ | RefundRequest in wrong status for create refund payment | неверный статус возврата | | | при создании платежей | +-------------------------------------------------------------------------+--------------------------------------+ **Пример ошибки** .. sourcecode:: js { "errors": [ "culprit Value 'idunno' not in list of avaiable values ['user', 'org']", "tickets list length is less than 1" ] } .. _walkthrough/refund_requests/approve: Подтверждение и отмена возврата =============================== **Запрос** .. http:patch:: /v2/resources/refund_requests/:refund_id :jsonparam status: ``approved`` | ``rejected`` **Ответ** :ref:`Объект возврата ` **Пример запроса** .. sourcecode:: http PATCH /v2/resources/refund_requests/5dfa1fa437077b6b6ed0f6b3 HTTP/1.1 Authorization: key 9bd8359943b545500278875r49c5b88d Content-Type: application/json { "status": "approved" } При ошибках возвращается список текстовых сообщений: .. sourcecode:: js { "errors": [ "Incorrect 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 `` 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 , | нельзя отменить возврат, потому что | | one of payments in status done | один из платежей уже в статусе `done`| +---------------------------------------------------+--------------------------------------+ | Cant reject refund request , | нельзя отменить возврат, потому что | | one of payments in status in_progress | один из платежей уже в статусе | | | `in_progress` | +---------------------------------------------------+--------------------------------------+ | Failed to reject refund request | Нельзя отменить возврат, возврат | | | сменил статус с new/in_progress на | | | другой | +---------------------------------------------------+--------------------------------------+