Для получения статуса платежа через Robokassa в Telegram-боте, написанном на Python с использованием фреймворка `aiogram`, даже если вы не используете вебхуки, вы можете использовать следующий подход:
1. **Отправка и получение платежа**: При отправке пользователя на страницу Robokassa для оплаты, вам нужно сохранять уникальный идентификатор покупки (например, `InvId`) и сопоставлять его с состоянием в вашей базе данных.
2. **Проверка статуса оплаты**: Чтобы проверить статус платежа, вы можете периодически запрашивать Robokassa о статусе платежа с помощью их API. Это можно сделать с помощью запросов с использованием `requests` или другого HTTP-клиента.
3. **Создание команды для проверки статуса**: Вам нужно будет создать команду или обработчик в вашем боте, который будет проверять статус каждой платежной транзакции.
Вот пример реализации:
### 1. Отправка пользователя на страницу Robokassa
```python
import hashlib
import requests
from aiogram import Bot, Dispatcher, types, executor
API_TOKEN = 'YOUR_API_TOKEN'
ROBOKASSA_LOGIN = 'YOUR_LOGIN'
ROBOKASSA_SECRET1 = 'YOUR_SECRET1'
ROBOKASSA_SECRET2 = 'YOUR_SECRET2'
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
@dp.message_handler(commands=['pay'])
async def process_payment(message: types.Message):
inv_id = 'unique_invoice_id' # Генерируйте уникальный ID для каждой транзакции
amount = '100.00' # Сумма платежа
signature = hashlib.md5(f"{ROBOKASSA_LOGIN}:{amount}:{inv_id}:{ROBOKASSA_SECRET1}".encode()).hexdigest()
payment_url = f"https://auth.robokassa.ru/Merchant/Index.aspx?MrchLogin={ROBOKASSA_LOGIN}&OutSum={amount}&InvId={inv_id}&SignatureValue={signature}&IncCurrLabel=RUB"
await message.answer("Перейдите по ссылке для оплаты: " + payment_url)
```
### 2. Проверка статуса платежа
```python
async def check_payment_status(inv_id):
# Параметры для запроса статуса платежа
params = {
'MrchLogin': ROBOKASSA_LOGIN,
'InvId': inv_id,
'Signature': hashlib.md5(f"{ROBOKASSA_LOGIN}:{inv_id}:{ROBOKASSA_SECRET2}".encode()).hexdigest()
}
response = requests.get("https://api.robokassa.ru/Payment/History", params=params)
return response.json() # Замените на нужную вам обработку ответа
```
### 3. Команда для проверки статуса
```python
@dp.message_handler(commands=['check_payment'])
async def command_check_payment(message: types.Message):
inv_id = 'передайте уникальный ID транзакции'
status = await check_payment_status(inv_id)
await message.answer(f"Статус платежа {inv_id}: {status}") # Обработайте вывод статуса по вашему усмотрению
```
В этом примере была реализована базовая функциональность для отправки пользователя на страницу оплаты Robokassa и проверки статуса оплаты. Обязательно замените переменные на ваши реальные данные и добавьте обработку ошибок и другие необходимые функциональности.
Также учтите, что для более профессиональной реализации может понадобиться использование асинхронных библиотек для HTTP-запросов, таких как `aiohttp`, чтобы не блокировать цикл событий `aiogram`.