На момент последнего обновления моих знаний, существуют различные подходы и библиотеки, которые позволяют интегрировать QIWI-оплату в телеграм-боты на Python с использованием фреймворка aiogram. Вот несколько подходов, которые вы можете рассмотреть:
### Библиотеки для интеграции с QIWI API
1. **QiwiApi** – библиотека для работы с QIWI API. Позволяет выполнять основные операции, такие как инициализация платежей, проверка статуса транзакций и т.д.
```bash
pip install qiwi-api
```
Пример использования:
```python
from qiwi_api import QiwiApi
qiwi_token = 'ВАШ_ТОКЕН'
wallet = QiwiApi(token=qiwi_token)
# Статус кошелька
status = wallet.wallet_info
# Создание счета
bill_id = wallet.create_bill(amount=100, currency='RUB', comment='Оплата товара')
```
2. **pyqiwi** – аналогичный инструмент для взаимодействия с QIWI Кошельком. Пример работы с pyqiwi:
```bash
pip install pyqiwi
```
```python
from pyqiwi import Wallet
wallet = Wallet(token='ВАШ_ТОКЕН')
balance = wallet.balance()
```
### Реализация с нуля
Если вы не хотите использовать сторонние библиотеки, можете напрямую работать с QIWI API. Пример создания счета через QIWI API с использованием `requests`:
```python
import requests
import uuid
QIWI_TOKEN = 'ВАШ_ТОКЕН'
QIWI_WALLET = 'ВАШ_НОМЕР_ТЕЛЕФОНА'
s = requests.Session()
s.headers['authorization'] = 'Bearer ' + QIWI_TOKEN
bill_id = str(uuid.uuid4())
params = {
'amount': '1.00',
'currency': 'RUB',
'comment': 'Пример оплаты',
'expirationDateTime': '2023-12-31T23:59:59+03:00',
'account': 'ВАШ_ИДЕНТИФИКАТОР_ПОЛЬЗОВАТЕЛЯ'
}
response = s.put(f'https://api.qiwi.com/partner/bill/v1/bills/{bill_id}', json=params)
if response.status_code == 200:
bill = response.json()
pay_url = bill['payUrl']
print("Оплатите счет по ссылке:", pay_url)
```
Важно учитывать, что ваш код должен обрабатывать возможные ошибки и контролировать статусы платежей.
### Интеграция с aiogram
Чтобы интегрировать платежный процесс в бота на aiogram, вы можете использовать приведенные выше подходы в асинхронном контексте (используя библиотеку `aiohttp` для асинхронных HTTP-запросов вместо `requests`).
```python
import aiohttp
import asyncio
async def create_qiwi_bill():
async with aiohttp.ClientSession() as session:
headers = {'Authorization': f'Bearer {QIWI_TOKEN}'}
payload = {...} # Данные для создания счета
async with session.put('QIWI_API_URL', headers=headers, json=payload) as response:
if response.status == 200:
data = await response.json()
return data['payUrl']
# В aiogram-обработчике
@dp.message_handler(commands=['pay'])
async def handle_payment(message: types.Message):
pay_url = await create_qiwi_bill()