Простая синхронная/асинхронная библиотека для работы с API ЮMoney
Project description
ayoomoney — простая синхронная/асинхронная библиотека для работы с API ЮMoney
Установка
pip install ayoomoney
Авторизация приложения
-
Зарегистрируйте новое приложение YooMoney по ссылке https://yoomoney.ru/myservices/new
- В полях "Адрес сайта" и "Redirect URI" укажите адрес: https://my.localhost:8042
- Чекбокс "Проверять подлинность приложения (OAuth2 client_secret)" должен быть отключен
-
Получите и скопируйте
client_idпосле создания приложения -
Во всех методах используются все доступные разрешения/scope, вы можете указать нужные вам разрешения через запятую, используя параметр
--scope, пример:--scope account-info,operation-details,operation-history- Автоматическое получение (Для этого запускается https-сервер с самоподписанным сертификатом, при переходе на страницу браузер выведет предупреждение, нажмите на "Дополнительно / Подробнее" и "Принять риск и продолжить / Сделать исключение для этого сайта / Перейти")
python -m ayoomoney.auth auto <client_id> https://my.localhost:8042
- Автоматическое получение со своим ssl сертификатом
python -m ayoomoney.auth auto <client_id> https://my.localhost:8042 --key "<certs_path>/key.pem" --cert "<certs_path>/cert.pem"
- Ручное получение
python -m ayoomoney.auth simple <client_id> https://my.localhost:8042
Во время перенаправления по
redirect_uriв адресной строке появится параметрcode=. Скопируйте значение и вставьте его в консольЕсли авторизация прошла успешно, в консоли отобразится Ваш access-token.
-
Сохраните access-token в переменные окружения, не храните токен в коде.
Получение основной информации об аккаунте
from os import environ
from ayoomoney.wallet import YooMoneyWalletAsync, YooMoneyWallet
from ayoomoney.types import AccountInfo
def sync_example():
wallet = YooMoneyWallet(access_token=environ.get("ACCESS_TOKEN"))
account_info: AccountInfo = wallet.account_info()
print(account_info)
wallet.close() # Не забудьте закрыть сессию или используйте менеджер контекста
async def async_example():
wallet = YooMoneyWalletAsync(access_token=environ.get("ACCESS_TOKEN"))
account_info: AccountInfo = await wallet.account_info()
print(account_info)
await wallet.close() # Не забудьте закрыть сессию или используйте менеджер контекста
if __name__ == "__main__":
sync_example()
# import asyncio
# asyncio.run(async_example())
Использование менеджера контекста
from os import environ
from ayoomoney.wallet import YooMoneyWalletAsync, YooMoneyWallet
from ayoomoney.types import AccountInfo
def sync_example():
with YooMoneyWallet(access_token=environ.get("ACCESS_TOKEN")) as wallet:
account_info: AccountInfo = wallet.account_info()
print(account_info)
async def async_example():
async with YooMoneyWalletAsync(access_token=environ.get("ACCESS_TOKEN")) as wallet:
account_info: AccountInfo = await wallet.account_info()
print(account_info)
if __name__ == "__main__":
sync_example()
# import asyncio
# asyncio.run(async_example())
Создание платёжной формы и проверка оплаты
from os import environ
from ayoomoney.wallet import YooMoneyWalletAsync, PaymentSource
async def main():
async with YooMoneyWalletAsync(access_token=environ.get("ACCESS_TOKEN")) as wallet:
payment_form = await wallet.create_payment_form(
amount_rub=2,
unique_label="myproject",
payment_source=PaymentSource.YOOMONEY_WALLET,
success_redirect_url="https://www.youtube.com/watch?v=dQw4w9WgXcQ&pp=ygUJcmljayByb2xl"
)
# проверка платежа по label
payment_is_completed: bool = await wallet.check_payment_on_successful(
payment_form.payment_label
)
print(
f"Ссылка на оплату:\n{payment_form.link_for_customer}\n\n"
f"Форма оплачена: {'Да' if payment_is_completed else 'Нет'}"
)
if __name__ == "__main__":
import asyncio
asyncio.run(main())
История платежей
from datetime import datetime
from os import environ
from ayoomoney.types import OperationHistoryParams, OperationHistoryParamType
from ayoomoney.wallet import YooMoneyWalletAsync
async def main():
async with YooMoneyWalletAsync(access_token=environ.get("ACCESS_TOKEN")) as wallet:
payments_from = datetime.strptime("15.09.2024", "%d.%m.%Y")
params = OperationHistoryParams(
# label="lazydeus-1", # Получение определенного платежа по метке
from_datetime=payments_from, # Получение операций после 15.09.2024 00:00
# till_datetime=payments_from # Получение операций до 15.09.2024 00:00
operation_type=["deposition", OperationHistoryParamType.PAYMENT],
# Типы операций, можно использовать OperationHistoryParamType или вводить значения вручную
records=3, # limit, Количество операций за один запрос, по умолчанию 30
start_record=3, # offset, https://yoomoney.ru/docs/wallet/user-account/operation-history#filtering-logic
details=True # Показывать подробные детали операции. types.Operation -> types.OperationDetails
)
history = await wallet.get_operation_history(params)
for operation in history.operations:
print(type(operation), operation)
if __name__ == '__main__':
import asyncio
asyncio.run(main())
HTTP-уведомления
В библиотеке реализованы только модели уведомлений, реализовать http-сервера вы должны сами.
Список моделей:
- NotificationBase используется для http
- NotificationExtend используется для https
Примеры:
- Простой пример с FastAPI
from typing import Annotated from os import environ from fastapi import FastAPI, Form, HTTPException from ayoomoney.types import NotificationBase app = FastAPI() @app.post("/notification") async def payment_handler(data: Annotated[NotificationBase, Form()]): # https://fastapi.tiangolo.com/tutorial/request-form-models/#pydantic-models-for-forms is_valid_hash = data.check_sha1_hash(environ.get("YOOMONEY_NOTIFICATION_SECRET")) if is_valid_hash is False: raise HTTPException(status_code=403)
- Телеграм бот на aiogram
Поддержка проекта
Если вы обнаружили ошибку или хотите предложить идею для улучшения проекта, создайте issue.
Если у вас есть возможность и желание внести улучшения в проект, отправляйте pull request.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ayoomoney-1.3.1.tar.gz.
File metadata
- Download URL: ayoomoney-1.3.1.tar.gz
- Upload date:
- Size: 17.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
35d917d0aff9e76fcef8798d5c96b8579dcdbcbc07d6e92f93108310de94e7dd
|
|
| MD5 |
01bb6b17e5b72a52b4ae329fa32dde65
|
|
| BLAKE2b-256 |
e4ab535d86f10b05c26dfb7b8526b4a43e8baa4cc0fdb8910014bb15c4e18fd9
|
File details
Details for the file ayoomoney-1.3.1-py3-none-any.whl.
File metadata
- Download URL: ayoomoney-1.3.1-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c74249648d7322410bc05064226d5ee87c035758ba23c9357b668af7c49407da
|
|
| MD5 |
fbffdf5c9164eb1e8dd71bb8570897f0
|
|
| BLAKE2b-256 |
a249f3ddea9da4a7ddf3ecdbd63642467c2665df70e10c74859e43dd85f3e5a3
|