Как интегрировать платежную систему CyberMoneyCRM в Telegram-бота?

У меня есть тестовый бот для создания платежей в системе Cyber Money CRM, однако их документация вызывает у меня затруднения. Можете помочь мне лучше разобраться в ней? <br/> <br/> Код: <br/> <br/> <pre><code class="python">API_TOKEN = 'xxxxxx'
CYBER_MONEY_API_URL = 'https://cyber.money/api/v1/ast/'
CYBER_MONEY_API_KEY = 'xxxxxxx'

# Хранилище для отслеживания времени создания заявки
request_creation_times = {}

import requests

def create_request(amount, payment_method, card_type=None):
    url = f"{CYBER_MONEY_API_URL}request"
    headers = {
        'Authorization': f"Bearer {CYBER_MONEY_API_KEY}",
        'Content-Type': 'application/json'
    }
    payload = {
        'sum': amount,
        'payment_method': payment_method,
    }
    if card_type:
        payload['card_type'] = card_type
    try:
        response = requests.post(url, json=payload, headers=headers)  # Используем POST
        response.raise_for_status()  # Проверка на HTTP ошибки
        print(f"Response status code: {response.status_code}")
        print(f"Response content: {response.text}")
        return response.json()
    except requests.exceptions.HTTPError as http_err:
        print(f"HTTP error occurred: {http_err}")
    except Exception as err:
        print(f"Other error occurred: {err}")
    return None


@dp.message_handler(commands=['pay'])
async def pay(message: types.Message):
    amount = 100  # Сумма в рублях
    payment_method = 'ccard'  # Способ оплаты
    card_type = 'sberbank'  # Тип карты (если применимо)

    result = create_request(amount, payment_method, card_type)
    if result and 'request_id' in result:
        request_id = result['request_id']
        # Сохраняем время создания заявки
        reques
  • 30 августа 2024 г. 1:44
Ответы на вопрос 1
Чтобы интегрировать платежную систему CyberMoneyCRM в Telegram-бота, необходимо правильно настроить создание платежей и обработку ответов от API. Вы уже начали это делать, и ниже я помогу вам с дальнейшими шагами.

### 1. Настройка функции для создания платежа

Основной функцией, которую вы уже создали, является `create_request()`. Эта функция отправляет запрос на создание платежа и обрабатывает ответ. 

### 2. Обработка ответа от API

После вызова функции `create_request()`, вы должны не только проверять наличие `request_id`, но и направлять пользователя на платежную страницу или предоставлять ему какие-либо инструкции.

### 3. Завершение определения функции обработчика команды `/pay`

Вот как это можно сделать в вашем коде:

```python
# Дополните ваш обработчик pay
@dp.message_handler(commands=['pay'])
async def pay(message: types.Message):
    amount = 100  # Сумма в рублях
    payment_method = 'ccard'  # Способ оплаты
    card_type = 'sberbank'  # Тип карты (если применимо)

    result = create_request(amount, payment_method, card_type)
    if result and 'request_id' in result:
        request_id = result['request_id']
        # Предположим, что объект результата содержит URL для оплаты
        payment_url = result.get('payment_url')
        if payment_url:
            await message.reply(f"Ссылка для оплаты: {payment_url}")
        else:
            await message.reply("Платеж был успешно создан, но ссылка на оплату отсутствует.")
    else:
        await message.reply("Не удалось создать платеж. Пожалуйста, попробуйте позже.")
```

### 4. Обработка обновлений и состояния платежа

Помимо функции для создания платежа, вам, возможно, понадобится обработка статусов платежей. Вы можете создать отдельную команду, которая будет запрашивать статус платежа по `request_id`.

```python
def check_request_status(request_id):
    url = f"{CYBER_MONEY_API_URL}status/{request_id}"
    headers = {
        'Authorization': f"Bearer {CYBER_MONEY_API_KEY}",
        'Content-Type': 'application/json'
    }
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.HTTPError as http_err:
        print(f"HTTP error occurred: {http_err}")
    except Exception as err:
        print(f"Other error occurred: {err}")
    return None

@dp.message_handler(commands=['check_status'])
async def check_status(message: types.Message):
    request_id = message.get_args()  # Получаем request_id из аргументов команды
    if not request_id:
        await message.reply("Пожалуйста, укажите request_id.")
        return

    status_result = check_request_status(request_id)
    if status_result:
        status = status_result.get('status')
        await message.reply(f"Статус платежа {request_id}: {status}")
    else:
        await message.reply("Не удалось получить статус платежа.")
```

### 5. Обработка ошибок и событий

Важно добавить обработку ошибок и уведомления для пользователя, чтобы они знали, что происходит на их стороне.

### 6. Проверьте документацию CyberMoneyCRM

Поскольку у вас есть вопросы по документации, убедитесь, что вы ознакомились с разделами о:

- Создании платежей
- Получении информации о статусе платежа
- Форматах запросов и ответов

### Заключение

Теперь у вас есть базовая структура для интеграции CyberMoneyCRM с вашим Telegram-ботом. Не забудьте протестировать все функции, чтобы убедиться, что они работают как положено, особенно обработку ошибок и логику перехода на платежные страницы.

Если у вас есть другие вопросы или нужна дополнительная помощь, не стесняйтесь спрашивать!
Похожие вопросы