Пример работы с возвратами¶
Полный пример создания и обработки возвратов, включая полные и частичные возвраты.
Полный возврат¶
Возврат всей суммы платежа.
import asyncio
from aioyookassa import YooKassa
from aioyookassa.types.payment import Money
from aioyookassa.types.enum import Currency
from aioyookassa.types.params import CreateRefundParams
async def create_full_refund():
async with YooKassa(api_key="your_api_key", shop_id=12345) as client:
# Получаем информацию о платеже
payment = await client.payments.get_payment("payment_id")
# Создаем полный возврат
params = CreateRefundParams(
payment_id=payment.id,
amount=Money(
value=payment.amount.value,
currency=payment.amount.currency
),
description="Полный возврат по заказу #12345",
metadata={"order_id": "12345", "reason": "customer_request"}
)
refund = await client.refunds.create_refund(params)
print(f"✅ Возврат создан: {refund.id}")
print(f"💰 Сумма возврата: {refund.amount.value} {refund.amount.currency}")
print(f"📊 Статус: {refund.status}")
asyncio.run(create_full_refund())
Частичный возврат¶
Возврат части суммы платежа.
import asyncio
from aioyookassa import YooKassa
from aioyookassa.types.payment import Money
from aioyookassa.types.enum import Currency
from aioyookassa.types.params import CreateRefundParams
async def create_partial_refund():
async with YooKassa(api_key="your_api_key", shop_id=12345) as client:
payment = await client.payments.get_payment("payment_id")
# Создаем частичный возврат (50% от суммы)
refund_amount = payment.amount.value * 0.5
params = CreateRefundParams(
payment_id=payment.id,
amount=Money(value=refund_amount, currency=payment.amount.currency),
description="Частичный возврат - возврат одного товара",
metadata={
"order_id": "12345",
"item_id": "ITEM-001",
"reason": "defective_product"
}
)
refund = await client.refunds.create_refund(params)
print(f"✅ Частичный возврат создан: {refund.id}")
print(f"💰 Сумма возврата: {refund.amount.value} {refund.amount.currency}")
print(f"📊 Оригинальная сумма платежа: {payment.amount.value} {payment.amount.currency}")
asyncio.run(create_partial_refund())
Множественные возвраты¶
Пример создания нескольких возвратов для одного платежа.
import asyncio
from aioyookassa import YooKassa
from aioyookassa.types.payment import Money
from aioyookassa.types.enum import Currency
from aioyookassa.types.params import CreateRefundParams
async def create_multiple_refunds():
async with YooKassa(api_key="your_api_key", shop_id=12345) as client:
payment = await client.payments.get_payment("payment_id")
# Список товаров для возврата
items_to_refund = [
{"id": "ITEM-001", "amount": 1000.00, "reason": "defective"},
{"id": "ITEM-002", "amount": 500.00, "reason": "wrong_size"},
]
refunds = []
for item in items_to_refund:
params = CreateRefundParams(
payment_id=payment.id,
amount=Money(value=item["amount"], currency=payment.amount.currency),
description=f"Возврат товара {item['id']}",
metadata={
"order_id": "12345",
"item_id": item["id"],
"reason": item["reason"]
}
)
refund = await client.refunds.create_refund(params)
refunds.append(refund)
print(f"✅ Возврат {refund.id} создан для товара {item['id']}")
return refunds
asyncio.run(create_multiple_refunds())
Получение информации о возврате¶
Пример получения детальной информации о возврате.
import asyncio
from aioyookassa import YooKassa
from aioyookassa.types.enum import RefundStatus
async def get_refund_info(refund_id: str):
async with YooKassa(api_key="your_api_key", shop_id=12345) as client:
refund = await client.refunds.get_refund(refund_id)
print(f"📋 Информация о возврате:")
print(f" ID: {refund.id}")
print(f" Платеж: {refund.payment_id}")
print(f" Сумма: {refund.amount.value} {refund.amount.currency}")
print(f" Статус: {refund.status}")
print(f" Описание: {refund.description}")
if refund.status == RefundStatus.SUCCEEDED:
print(f" ✅ Возврат успешно выполнен")
if refund.succeeded_at:
print(f" Время выполнения: {refund.succeeded_at}")
elif refund.status == RefundStatus.CANCELED:
print(f" ❌ Возврат отменен")
if refund.cancellation_details:
print(f" Причина: {refund.cancellation_details.reason}")
asyncio.run(get_refund_info("refund_id"))
Получение списка возвратов¶
Пример получения списка возвратов с фильтрацией.
import asyncio
from datetime import datetime
from aioyookassa import YooKassa
from aioyookassa.types.enum import RefundStatus
from aioyookassa.types.params import GetRefundsParams
async def get_refunds_list():
async with YooKassa(api_key="your_api_key", shop_id=12345) as client:
# Получение всех возвратов
refunds = await client.refunds.get_refunds()
print(f"📊 Всего возвратов: {len(refunds.list)}")
# Получение возвратов с фильтрами
params = GetRefundsParams(
payment_id="payment_id", # Возвраты для конкретного платежа
status=RefundStatus.SUCCEEDED,
limit=10
)
filtered_refunds = await client.refunds.get_refunds(params)
print(f"📊 Успешных возвратов: {len(filtered_refunds.list)}")
for refund in filtered_refunds.list:
print(f" - {refund.id}: {refund.amount.value} {refund.amount.currency}")
asyncio.run(get_refunds_list())