Для проверки статуса оплаты подписки через Robokassa с помощью Python и Aiogram, вы можете использовать следующий подход:
1. Установите библиотеку requests, если у вас ее еще нет:
```python
pip install requests
```
2. В вашем коде создайте функцию, которая будет отправлять запрос на проверку статуса оплаты. Например:
```python
import requests
def check_payment_status(invoice_id):
merchant_login = "Ваш_логин_в_робокассе"
merchant_password = "Ваш_пароль_в_робокассе"
url = f"https://auth.robokassa.ru/Merchant/WebService/Service.asmx/OpState?MerchantLogin={merchant_login}&InvoiceID={invoice_id}"
response = requests.get(url, auth=(merchant_login, merchant_password))
# Проверяем статус ответа
if response.status_code == 200:
# Декодируем XML-ответ
xml = response.content.decode("utf-8")
# Здесь можно проанализировать XML и извлечь нужные данные
# Например, статус оплаты
if "<State>PaymentSuccess</State>" in xml:
# Оплата выполнена успешно
return True
elif "<State>PaymentFailed</State>" in xml:
# Оплата не выполнена
return False
else:
# Обработка ошибок
return None
```
3. В вашем методе обработки входящего сообщения, проверьте статус оплаты подписки. Например:
```python
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
bot_token = "Ваш_токен_бота"
bot = Bot(token=bot_token)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
@dp.message_handler(content_types=types.ContentTypes.TEXT)
async def process_message(message: types.Message):
# Получите invoice_id подписки из вашей базы данных или из другого источника
invoice_id = "ID_вашей_оплаты"
# Проверяем статус оплаты
payment_status = check_payment_status(invoice_id)
if payment_status is None:
# Ошибка при проверке статуса оплаты
await message.reply("Произошла ошибка при проверке оплаты.")
elif payment_status:
# Оплата выполнена успешно
await message.reply("Оплата подписки прошла успешно!")
else:
# Оплата не выполнена
await message.reply("Оплата подписки не выполнена.")
```
Обратите внимание, что в приведенном примере необходимо заменить значения "Ваш_логин_в_робокассе", "Ваш_пароль_в_робокассе" и "Ваш_токен_бота" на соответствующие значения из вашего аккаунта Robokassa и Telegram Bot API. Также вы должны иметь доступ к invoice_id подписки, по которому будет выполняться проверка статуса оплаты.