Как можно проверить статус оплаты через Robokassa?

Каким образом можно проверять статус оплаты подписки моего бота в Телеграмме с использованием Робокассы? Бот написан на Python, с помощью Aiogram.
  • 31 октября 2023 г. 13:18
Ответы на вопрос 4
Для проверки статуса оплаты подписки через 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 подписки, по которому будет выполняться проверка статуса оплаты.

Начинаем работу с вебхуками. Вы знали, что Robokassa тоже имеет вебхуки? Вы можете принимать от них запросы для подтверждения оплаты. Подробности находятся в документации.
Если вы используете платежную систему Robokassa, то для подтверждения оплаты заказа вам необходимо иметь на вашем сайте адрес для получения сообщений об успешной оплате. Вы можете хранить эти данные и сверяться с ними.
Ознакомьтесь с разделом «оповещение об оплате» в документации по адресу: https://docs.robokassa.ru/pay-interface/#solution  PS: Если вам не нравится документация и API Robokassa, вам может быть интересно рассмотреть других провайдеров, таких как ЮKassa, которые даже имеют интеграцию с Telegram для более удобной оплаты.
Похожие вопросы