Skip to content

Refund API support#30

Open
SumJest wants to merge 1 commit into
byBenPuls:masterfrom
SumJest:master
Open

Refund API support#30
SumJest wants to merge 1 commit into
byBenPuls:masterfrom
SumJest:master

Conversation

@SumJest
Copy link
Copy Markdown
Contributor

@SumJest SumJest commented Feb 13, 2026

Реализован Refund API (API возвратов)

Основное

Добавлена поддержка API возвратов Robokassa для полного и частичного возврата средств по операциям оплаты, включая генерацию фискальных чеков.

Изменения

Новые файлы:

  • robokassa/refund.py - RefundManager для работы с API возвратов
  • docs/refund.md - полноценная документация API возвратов
  • tests/test_refund.py - покрытие refund функциональности (~85%)
  • examples/refund_example.py - практические примеры (4 сценария)

Изменённые файлы:

  • robokassa/client.py - новые методы refund_op() и get_refund_status()
  • robokassa/types.py - новые типы: InvoiceItem, RefundRequest, RefundResponse, RefundStatus, RefundHashAlgorithm
  • robokassa/__init__.py - экспорт новых типов
  • README.md - документация и примеры использования
  • mkdocs.yml - добавлена страница в оглавление
  • robokassa/jwt.py - поддержка JWT токенов с HMAC подписью (HS256/384/512)
  • docs/robokassa.md - добавлено упоминание password3

API

robokassa = Robokassa(
    merchant_login="login",
    password1="pass1",
    password2="pass2",
    password3="pass3",  # требуется для возвратов
)

# Полный возврат
await robokassa.refund_op(op_key="op-key")

# Частичный возврат с чеком
await robokassa.refund_op(op_key="op-key", refund_sum=50.0, invoice_items=[...])

# Проверка статуса
status = await robokassa.get_refund_status(request_id="...")

⚠️ Неопределённости в реализации

1. JWT передача как JSON. Токен передаётся как jwt_token (строка), ожидается JSON serialization. Следует примеру создания инвойса, документация идентична, но неявна.

2. Ключ подписи JWT. По документации для подписи используется только Password3. Это отличается от создания инвойса, где требовалась склейка merchant_login + password. Требуется тестирование или уточнение у техподдержки Robokassa.

Тестирование

✅ Все 57 тестов прошли успешно (unit-тесты)
Интеграционные тесты на продакшене не проводились - судя по документации, Refund API недоступен в тестовом режиме. Будет протестировано позже на реальном продакшене автора.

Документация

Полная документация в docs/refund.md и примеры в examples/refund_example.py

📌 Требуется access к API Refund и Password3 из настроек магазина (генерируется в ЛК Robokassa после запроса доступа)

Added full support for Robokassa refund API, including:
- Creating full and partial refunds
- Generating fiscal receipts for refunds
- Checking refund request status

Password3 from merchant settings is required for working with refunds.
Added new data types: RefundHashAlgorithm, RefundStatus, InvoiceItem, RefundRequest, RefundResponse, RefundStateResponse.
@SumJest SumJest changed the title Refund API support Refund API support #25 Feb 13, 2026
@SumJest SumJest changed the title Refund API support #25 Refund API support Feb 13, 2026
@SumJest
Copy link
Copy Markdown
Contributor Author

SumJest commented Feb 13, 2026

Относится к #25

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant