1
0
зеркало из https://github.com/glebtv/yookassa.git synced 2026-08-28 15:16:18 +03:00
Files
yookassa/docs/03-refunds.md
Ivan Shamatov a61bbaf461 Initial setup for docs (#22)
* Initial setup for docs

* running payments endpoints

* documentation for deals and payouts
2021-11-20 14:14:59 +03:00

6.0 KiB

Работа с возвратами

С помощью SDK можно возвращать платежи — полностью или частично. Порядок возврата зависит от способа оплаты (payment_method) исходного платежа. При оплате банковской картой деньги возвращаются на карту, которая была использована для проведения платежа. Как проводить возвраты

Часть способов оплаты (например, наличные) не поддерживают возвраты. Какие платежи можно вернуть


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

Создание возврата в документации

Создает возврат успешного платежа на указанную сумму. Платеж можно вернуть только в течение трех лет с момента его создания. Комиссия ЮKassa за проведение платежа не возвращается.

В ответ на запрос придет объект возврата - Refund в актуальном статусе.

res = Yookassa.refunds.create({
  "payment_id": "24e89cb0-000f-5000-9000-1de77fa0d6df",
  "description": "Не подошел размер",
  "amount": {
    "value": "9000.00",
    "currency": "RUB"
  },
  "sources": [
    {
      "account_id": "456",
      "amount": {
        "value": "9000.00",
        "currency": "RUB"
      }
    }
  ]
})


Запрос на создание возврата через билдер

Информация о создании возврата в документации

Билдер позволяет создать объект платежа — RefundRequest программным способом, через объекты.

builder = RefundRequestBuilder()
builder.set_payment_id('24e89cb0-000f-5000-9000-1de77fa0d6df') \
  .set_description("Не подошел размер") \
  .set_amount({"value": 9000.0, "currency": Currency.RUB}) \
  .set_sources([
    RefundSource({
      'account_id': 456,
      'amount': {
        'value': 9000.0,
        'currency': Currency.RUB
      },
      "platform_fee_amount": {
        "value": 10.01,
        "currency": Currency.RUB
      }
    })
  ])

request = builder.build()
# Можно что-то поменять, если нужно
request.description = "Не подошел цвет и размер"

res = Yokassa.refunds.create(request)

Получить информацию о возврате

Информация о возврате в документации

Запрос позволяет получить информацию о текущем состоянии возврата по его уникальному идентификатору.

В ответ на запрос придет объект возврата - Refund в актуальном статусе.

res = Yookassa.refunds.find(refund_id: "7894e5e2-a22e-434b-b6c1-e355ff096d1c")

Получить список возвратов с фильтрацией

Список возвратов в документации

Запрос позволяет получить список возвратов, отфильтрованный по заданным критериям.

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

Если результатов больше, чем задано в limit, список будет выводиться фрагментами. В этом случае в ответе на запрос вернется фрагмент списка и параметр next_cursor с указателем на следующий фрагмент.

cursor = nil
filters = {
  "limit": 2,                                            # Ограничиваем размер выборки
  "payment_id": "21b23b5b-000f-5061-a000-0674e49a8c10",  # Выбираем только по конкретному платежу
  "created_at.gte": "2020-08-08T00:00:00.000Z",          # Созданы начиная с 2020-08-08
  "created_at.lt": "2020-10-20T00:00:00.000Z"            # И до 2020-10-20
}

def get_items(filters:, next_cursor: nil, items: [])
  result = Yookassa.refunds.list(filters.merge(next_cursor: next_cursor))
  accumulated_items = result.items + items

  return accumulated_items if result.next_cursor.nil?

  get_items(filters: filters, next_cursor: result.next_cursor, items: accumulated_items)
end

get_items(filters: filters, next_cursor: cursor)

Подробнее о работе со списками