Шаг 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:
 
  • statusapproved | 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 на другой