1
0
зеркало из https://github.com/glebtv/yookassa.git synced 2026-09-03 17:55:51 +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

129 строки
6.0 KiB
Markdown

## Работа с возвратами
С помощью SDK можно возвращать платежи — полностью или частично. Порядок возврата зависит от способа оплаты
(`payment_method`) исходного платежа. При оплате банковской картой деньги возвращаются на карту,
которая была использована для проведения платежа. [Как проводить возвраты](https://yookassa.ru/developers/payments/refunds)
Часть способов оплаты (например, наличные) не поддерживают возвраты. [Какие платежи можно вернуть](https://yookassa.ru/developers/payment-methods/overview#all)
* [Запрос на создание возврата](#Запрос-на-создание-возврата)
* [Запрос на создание возврата через билдер](#Запрос-на-создание-возврата-через-билдер)
* [Получить информацию о возврате](#Получить-информацию-о-возврате)
* [Получить список возвратов с фильтрацией](#Получить-список-возвратов-с-фильтрацией)
---
### Запрос на создание возврата
[Создание возврата в документации](https://yookassa.ru/developers/api?lang=ruby#create_refund)
Создает возврат успешного платежа на указанную сумму. Платеж можно вернуть только в течение трех лет с момента его создания.
Комиссия ЮKassa за проведение платежа не возвращается.
В ответ на запрос придет объект возврата - `Refund` в актуальном статусе.
```ruby
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"
}
}
]
})
```
---
### Запрос на создание возврата через билдер
[Информация о создании возврата в документации](https://yookassa.ru/developers/api?lang=ruby#create_refund)
Билдер позволяет создать объект платежа — `RefundRequest` программным способом, через объекты.
```ruby
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)
```
---
### Получить информацию о возврате
[Информация о возврате в документации](https://yookassa.ru/developers/api?lang=ruby#get_refund)
Запрос позволяет получить информацию о текущем состоянии возврата по его уникальному идентификатору.
В ответ на запрос придет объект возврата - `Refund` в актуальном статусе.
```ruby
res = Yookassa.refunds.find(refund_id: "7894e5e2-a22e-434b-b6c1-e355ff096d1c")
```
---
### Получить список возвратов с фильтрацией
[Список возвратов в документации](https://yookassa.ru/developers/api?lang=ruby#get_refunds_list)
Запрос позволяет получить список возвратов, отфильтрованный по заданным критериям.
В ответ на запрос вернется список возвратов с учетом переданных параметров. В списке будет информация о возвратах,
созданных за последние 3 года. Список будет отсортирован по времени создания возвратов в порядке убывания.
Если результатов больше, чем задано в `limit`, список будет выводиться фрагментами. В этом случае в ответе на запрос
вернется фрагмент списка и параметр `next_cursor` с указателем на следующий фрагмент.
```ruby
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)
```
[Подробнее о работе со списками](https://yookassa.ru/developers/using-api/lists)