Запрос на возврат средств за заказ

POST /api/merchant/v1/orders/{orderId}/refund

Запуск возврата средств по заказу.
Доступно только для платежей в статусе CAPTURED и PARTIALLY_REFUNDED.
В случае успеха статус платежа изменится на REFUNDED или PARTIALLY_REFUNDED в зависимости от суммы
и будет отправлено событие ORDER_STATUS_UPDATED.
Если произвести возврат не удастся, то будет отправлено событие OPERATION_STATUS_UPDATED.

В запросе нужно передать итоговую корзину предоставляемых товаров и услуг.
Итоговая корзина должна формироваться из текущей корзины исключением некоторых позиций,
либо корректировкой стоимости имеющихся позиций, по которым производился возврат.
Сумма корзины должна совпадать с текущей суммой платежа за вычетом суммы возврата.

Запрос

Тело запроса:

{
    "refundAmount": decimal ("42.00"),  # Сумма к возврату
    "orderAmount": decimal ("84.00"),   # Итоговая сумма заказа. Равна `cart.total.amount` + `shipping.amount`
    "cart": {                           # Итоговая корзина
        "items": [...],
        "discounts": [...],
        "total": {
            "amount": decimal ("42.00")
        }
    },
    "shipping": {
        "methodType": enum<COURIER|PICKUP|YANDEX_DELIVERY>,
        "amount": decimal ("42.00"),
        "receipt": {...},
    },
    "externalOperationId": string,      # Опционально. Идентификатор операции в системе продавца.
}

Ответ

Ответ в случае успеха содержит детали операции возврата:

  • 200 OK с телом:

    {
        "status": "success",
        "data": {
            "operation": {
                "operationId": uuid,
                "orderId": string,
                "operationType": REFUND,
                "status": enum<PENDING|SUCCESS>,
                "externalOperationId": string or null,
                "amount: decimal ("42.00"),
                "created": string,
                "updated": string
            }
        }
    }
    

Ответ в случае ошибки:

  • 404 Not Found - Заказ с указанным orderId не найден

  • 400 Bad Request - Некорректный запрос. Тело ответа:

    {
        "status": "fail",
        "reasonCode": enum<INVALID_PAYMENT_STATUS|ORDER_AMOUNT_MISMATCH|REFUND_AMOUNT_TOO_LARGE|...>,  # код ошибки
        "reason": string or null  # текстовое описание, например: "Refund amount should be less than order amount"
    }
    
В этой статье: