$ sudo teach IT
Модуль 1 · Введение

Урок 1.2 — Установка и настройка

Научимся устанавливать aiosend, настраивать окружение, получать API-токен и проверять подключение к Crypto Pay.

Прежде чем писать код, нужно подготовить окружение. В этом уроке мы установим Python (если ещё не установлен), установим библиотеку aiosend несколькими способами, получим API-токен от @CryptoBot и @CryptoTestnetBot, разберёмся с MAINNET и TESTNET, настроим .env-файл для хранения токена и проверим, что всё работает.

🐍

Проверка версии Python

aiosend требует Python 3.10 или выше (на момент написания курса — версия 3.0.x поддерживает Python 3.10+). Это связано с использованием современных возможностей языка: литеральные типы (Literal), синтаксис Union с | (PEP 604), match/case (PEP 634) и другие фичи, доступные только с Python 3.10+.

Проверь свою версию Python:

Bash · Проверка версии Python
python --version
# или
python3 --version
# или
python3.12 --version

Если версия меньше 3.10, нужно обновить Python. Вот способы:

💡 Как обновить Python

macOS: brew install python@3.12 (через Homebrew)
Ubuntu/Debian: sudo apt install python3.12
Windows: Скачай установщик с python.org/downloads
Любая ОС: Используй pyenv для управления версиями

⚠️ Важно: Python 2 vs Python 3

На некоторых системах (особенно macOS и Linux) команда python может указывать на Python 2 (устаревшая версия), а python3 — на Python 3. Если у тебя python --version показывает 2.x, используй python3. aiosend работает ТОЛЬКО с Python 3.

📦

Установка aiosend через pip

Самый простой и распространённый способ установки — через pip (стандартный менеджер пакетов Python). Рекомендуется устанавливать в виртуальное окружение:

Bash · Создание виртуального окружения и установка
# 1. Создаём директорию проекта
mkdir aiosend-course && cd aiosend-course

# 2. Создаём виртуальное окружение
python3 -m venv venv

# 3. Активируем виртуальное окружение
# macOS/Linux:
source venv/bin/activate
# Windows:
# venv\Scripts\activate

# 4. Устанавливаем aiosend
pip install -U aiosend

Флаг -U (--upgrade) означает «обновить до последней версии, если уже установлено». Это хорошая практика — всегда устанавливать с -U, чтобы получить последнюю версию.

aiosend потянет за собой зависимости:

📋 Зависимости aiosend:

  • aiohttp >=3.9.0 — асинхронный HTTP-клиент для отправки запросов к API
  • certifi >=2023.7.22 — сертификаты SSL/TLS для безопасных HTTPS-соединений
  • magic-filter >=1.0.12 — мощные фильтры для событий (из aiogram 3.x)
  • pydantic >=2.4.1, <2.13 — валидация данных и сериализация/десериализация моделей

💡 Совет: используй requirements.txt

Создай в корне проекта файл requirements.txt со списком зависимостей. Это стандартный способ управлять зависимостями в Python-проектах. Содержимое файла:

aiosend>=3.0.0
python-dotenv>=1.0.0

Установка через requirements.txt: pip install -r requirements.txt

🛠️

Альтернативные способы установки

Помимо классического pip, aiosend можно установить через современные менеджеры пакетов. Выбери тот, который используешь в повседневной работе:

📦 uv — современный быстрый менеджер

uv add aiosend — невероятно быстрый (написан на Rust), автоматически создаёт виртуальное окружение и lock-файл.

🎵 Poetry — декларативное управление зависимостями

poetry add aiosend — автоматически обновляет pyproject.toml и poetry.lock. Поддерживает группы зависимостей (dev, main).

📦 PDM — современный менеджер с PEP 582

pdm add aiosend — поддерживает стандарт PEP 582 (установка пакетов в __pypackages__).

🌍 pipx — изоляция для CLI-инструментов

pipx install aiosend — устанавливает пакет в изолированное окружение и делает его исполняемые файлы доступными глобально.

🌾 Rye — управление проектами от создателей ruff

rye add aiosend — единое решение для управления Python, зависимостями и сборкой (от Astral, создателей ruff и uv).

🔬 Conda — менеджер для data science

conda install aiosend — если ты используешь Anaconda/Miniconda для управления окружениями.

🧪 Pipenv — официальный инструмент от PyPA

pipenv install aiosend — комбинирует pip и virtualenv в одном инструменте. Создаёт Pipfile и Pipfile.lock.

Инструмент Команда Когда использовать
pip pip install -U aiosend Стандартный выбор, подходит всем
uv uv add aiosend Хочешь максимальную скорость установки
Poetry poetry add aiosend Декларативное управление проектом
PDM pdm add aiosend Используешь PEP 582 / __pypackages__
pipx pipx install aiosend Изоляция CLI-инструментов
Rye rye add aiosend Универсальное решение от Astral
Conda conda install aiosend Data Science / Anaconda ecosystem
Pipenv pipenv install aiosend Pipfile + Pipfile.lock workflow
✅

Проверка установки

После установки нужно убедиться, что всё прошло успешно. Есть несколько способов:

Bash · Проверка установки через pip list
pip list | grep aiosend
# Ожидаемый вывод:
# aiosend        3.0.6
Bash · Проверка через import в Python
python -c "import aiosend; print(aiosend.__version__)"
# Ожидаемый вывод: 3.0.6

💡 Что делать, если import не работает?

1. Проверь, активировано ли виртуальное окружение (должно быть (venv) в начале строки терминала).
2. Проверь версию Python: python --version (должно быть 3.10+).
3. Переустанови: pip install --force-reinstall aiosend.
4. Проверь, не установлен ли aiosend в другом окружении: which python покажет путь к текущему интерпретатору.

Успешный импорт aiosend без ошибок означает, что библиотека установлена корректно и все зависимости разрешены.

🔑

Получение API-токена

Для работы с Crypto Pay API нужен токен — уникальный ключ, который идентифицирует твоё приложение. Токен получается в два шага: сначала создаётся приложение в @CryptoBot, затем из него берётся токен.

Токен выглядит так: 1234:ABCDefghijklmnopQRSTuvwxyz1234567890. Он состоит из двух частей, разделённых двоеточием: числовой ID приложения и секретная строка.

Пошаговая инструкция для TESTNET (рекомендуется):

1
Открой @CryptoTestnetBot

Найди в Telegram бота @CryptoTestnetBot и нажми Start. Это тестовая версия @CryptoBot, где используются тестовые монеты (Jetcoin, test-USDT и т.д.). Они ничего не стоят, можно экспериментировать без риска.

2
Перейди в Crypto Pay

Отправь боту команду /crypto_pay или нажми на соответствующую кнопку в меню. Ты попадёшь в раздел управления Crypto Pay API.

3
Создай приложение

Нажми «My Apps» (или «Мои приложения») → «Create App» (или «Создать приложение»). Придумай название, например «MyTestApp» или «aiosend_course_test».

4
Скопируй токен

Внутри приложения ты увидишь раздел «API Token». Нажми «Copy» и сохрани токен в надёжном месте (мы будем хранить его в .env-файле).

Для MAINNET (когда будешь готов к реальным платежам):

Процедура точно такая же, но в боте @CryptoBot (или @send). Внимание: в MAINNET используются реальные средства, поэтому не торопись туда переносить код — сначала всё протестируй в TESTNET.

⚠️ Отличия токенов MAINNET и TESTNET

Токены MAINNET обычно начинаются с 1234: (реальный ID приложения). Токены TESTNET могут иметь другой префикс. aiosend автоматически определяет сеть по токену, но на всякий случай запомни: MAINNET URL — https://pay.crypt.bot/api/, TESTNET URL — https://testnet-pay.crypt.bot/api/.

🌐

MAINNET vs TESTNET: подробное сравнение

Crypto Pay API существует в двух независимых сетях. Понимание разницы между ними — ключ к безопасной разработке:

Характеристика MAINNET TESTNET
Бот @CryptoBot (или @send) @CryptoTestnetBot
URL API pay.crypt.bot/api/ testnet-pay.crypt.bot/api/
Средства Реальные (USDT, TON, BTC, ETH...) Тестовые (JET, test-USDT...)
Риск Потеря реальных денег при ошибке Нулевой (все монеты — тестовые)
Для кого Production (реальные пользователи) Разработка, отладка, тестирование
Активы USDT, TON, BTC, ETH, LTC, BNB, TRX, USDC Все основные + JET (тестовый актив)
Комиссии Реальные комиссии сервиса Нет (тестовый режим)
Лимиты Стандартные лимиты API Повышены лимиты (можно тестировать)

💡 Как получить тестовые монеты (JET)

В @CryptoTestnetBot отправь команду /faucet или нажми на кнопку «Get coins». Тебе выдадут некоторое количество JET (тестовый аналог TON) для экспериментов. Также доступны другие тестовые активы.

⚠️ Частая ошибка: перепутать токены

Разработчики часто ошибаются, вставляя токен MAINNET в тестовый код или наоборот. aiosend пытается определить сеть автоматически, но будь внимателен. Рекомендуется создавать отдельное приложение для MAINNET и отдельное для TESTNET с разными названиями.

🔒

Настройка безопасности приложения

После создания приложения в @CryptoTestnetBot (или @CryptoBot) важно настроить разрешения для методов. По умолчанию некоторые методы отключены по соображениям безопасности.

В настройках приложения (My Apps → выбери приложение → Security) ты увидишь следующие опции:

✅ Checks (Чеки)

Включи эту опцию, если планируешь создавать чеки (createCheck). По умолчанию выключено. Без включения метод create_check() будет возвращать ошибку.

✅ Transfers (Переводы)

Включи для возможности отправлять средства пользователям (transfer). По умолчанию выключено. Если попытаешься вызвать transfer с выключенной опцией — получишь ошибку от API.

✅ Webhooks (Вебхуки)

Включи, если планируешь получать уведомления об оплатах через вебхуки. Для этого также потребуется публичный HTTPS-сервер.

✅ Allow anonymous (Анонимные платежи)

По умолчанию пользователи могут платить анонимно. Можно отключить, если хочешь видеть, кто именно оплатил инвойс. Отключается в настройках приложения индивидуально для каждого инвойса.

Для учебных целей рекомендую включить все три опции (Checks, Transfers, Webhooks) — это позволит тебе экспериментировать со всеми методами библиотеки без ограничений.

⚠️ Как включить методы в настройках

🏝 Crypto Pay → My Apps → Выбери приложение → Security

Поставь галочки напротив:
— Checks (разрешить создание чеков)
— Transfers (разрешить переводы)
— Webhooks (разрешить вебхуки)

После включения настроек может потребоваться до 1 минуты для вступления в силу.

🔐

Структура .env файла

Хранить токен прямо в коде — плохая практика. Если ты закоммитишь токен в Git или опубликуешь код на GitHub, любой сможет им воспользоваться. Правильный подход — использовать переменные окружения или .env-файл.

Библиотека python-dotenv загружает переменные из .env-файла в os.environ. Это стандартный способ хранения секретов в Python-проектах.

.env · Файл с переменными окружения
# Crypto Pay API токен для TESTNET
CRYPTO_PAY_TOKEN=1234:ABCDefghijklmnopQRSTuvwxyz1234567890

# Опционально: сеть (aiosend определяет автоматически, но можно принудительно)
# CRYPTO_PAY_NETWORK=TESTNET

# Опционально: другие настройки
# DEBUG=True

Важно: никогда не коммить .env-файл в Git! Добавь его в .gitignore:

.gitignore · Игнорируем .env файлы
# .gitignore
.env
.env.local
venv/
__pycache__/
*.pyc

Установка python-dotenv:

Bash · Установка python-dotenv
pip install python-dotenv

Пример использования python-dotenv с aiosend:

Python · Загрузка токена из .env
import os
from dotenv import load_dotenv
from aiosend import CryptoPay

# Загружаем переменные из .env файла
load_dotenv()

# Получаем токен из переменной окружения
token = os.getenv("CRYPTO_PAY_TOKEN")

if not token:
    raise ValueError("Токен не найден! Проверь .env файл.")

# Создаём клиента
cp = CryptoPay(token=token)

# Всё готово к работе!
print(f"Токен загружен: {token[:8]}...")
🔌

Проверка подключения

Финальный шаг — проверить, что всё настроено правильно. Есть два способа: быстрая проверка через терминал (одна строка) и полноценный скрипт.

Способ 1: Быстрая проверка (однострочник):

Bash · Быстрая проверка подключения
# Просто импортируем библиотеку
python -c "import aiosend; print('aiosend', aiosend.__version__, '- OK')"

# Проверяем с токеном (замени на свой)
python -c "from aiosend import CryptoPay; cp = CryptoPay(token='ТВОЙ_ТОКЕН'); app = cp.sync.get_me(); print('App:', app.name, '| ID:', app.app_id)"

Способ 2: Полноценный скрипт:

Python · check_connection.py
import os
from dotenv import load_dotenv
from aiosend import CryptoPay
from aiosend.errors import APIError, CryptoPayError

# Загружаем .env
load_dotenv()

# Получаем токен
token = os.getenv("CRYPTO_PAY_TOKEN")

if not token:
    print("❌ Ошибка: CRYPTO_PAY_TOKEN не найден в .env файле!")
    print("Создай файл .env и добавь строку: CRYPTO_PAY_TOKEN=твой_токен")
    exit(1)

print(f"🔑 Токен: {token[:10]}...{token[-5:]}")
print()

try:
    # Пробуем подключиться (синхронно)
    cp = CryptoPay(token=token)
    app = cp.sync.get_me()

    print("✅ Подключение успешно!")
    print(f"   Имя приложения: {app.name}")
    print(f"   ID приложения: {app.app_id}")
    print(f"   Платёжный бот: @{app.payment_processing_bot_username}")

except APIError as e:
    print(f"❌ Ошибка API (код {e.code}): {e.name}")
except CryptoPayError as e:
    print(f"❌ Ошибка aiosend: {e}")
except Exception as e:
    print(f"❌ Неожиданная ошибка: {e}")

💡 Что означает успешный вывод?

App name — название, которое ты указал при создании приложения. App ID — числовой идентификатор. Payment processing bot username — юзернейм бота, через который пользователи будут оплачивать инвойсы (для MAINNET это @CryptoBot, для TESTNET — @CryptoTestnetBot).

⚠️ Возможные проблемы при проверке

❌ API Error 401: Неверный токен. Проверь, что скопировал токен полностью, без лишних пробелов и кавычек.
❌ CryptoPayError: Ошибка библиотеки. Проверь версию aiosend (pip install -U aiosend).
❌ ConnectionError: Нет доступа к интернету или блокируется API. Проверь подключение к сети.
❌ ModuleNotFoundError: aiosend не установлен. Выполни pip install aiosend.

📁

Структура проекта для курса

Рекомендую организовать проекты по урокам в единой структуре. Это поможет не запутаться в файлах:

Структура директорий
aiosend-course/
├── module-01/                    # Модуль 1: Введение
│   ├── lesson-1.1/               # Урок 1.1
│   ├── lesson-1.2/               # Урок 1.2
│   │   ├── .env                  # Токен (НЕ КОММИТИТЬ!)
│   │   ├── .gitignore            # gitignore
│   │   ├── check_connection.py   # Скрипт проверки
│   │   ├── main.py               # Основной скрипт
│   │   └── requirements.txt      # Зависимости
│   └── lesson-1.3/               # Урок 1.3
├── module-02/                    # Модуль 2: Инвойсы
├── module-03/                    # Модуль 3: Чеки
├── ...
├── venv/                         # Виртуальное окружение (не коммитить)
├── .gitignore                    # Общий .gitignore
└── README.md                     # Описание проекта (опционально)

Для каждого урока можно создавать отдельную папку со своими файлами. Это позволит изолировать эксперименты и не сломать предыдущие работающие примеры.

💡 Совет: requirements.txt для каждого урока

В каждом уроке могут быть разные зависимости. Создавай отдельный requirements.txt или используй общий для всего курса. Главное — не забыть активировать виртуальное окружение перед работой.

🎯

Чек-лист: всё готово к работе

Пройди по этому чек-листу, чтобы убедиться, что всё настроено правильно:

☐ Python 3.10+ установлен (python3 --version)
☐ Создано виртуальное окружение (python3 -m venv venv)
☐ Виртуальное окружение активировано (source venv/bin/activate)
☐ aiosend установлен (pip install -U aiosend)
☐ python-dotenv установлен (pip install python-dotenv)
☐ Создано приложение в @CryptoTestnetBot
☐ Включены Checks, Transfers, Webhooks в настройках безопасности
☐ Токен скопирован и сохранён в .env файле (CRYPTO_PAY_TOKEN=...)
☐ .env добавлен в .gitignore
☐ Проверка подключения: python check_connection.py — успешно
📌

Что важно запомнить

1️⃣
aiosend требует Python 3.10+. Проверь версию перед установкой. Используй виртуальное окружение.
2️⃣
Установка через pip: pip install -U aiosend. Есть 8 альтернативных способов (uv, poetry, pdm, pipx, rye, conda, pipenv).
3️⃣
Токен получается через @CryptoTestnetBot (для тестов) или @CryptoBot (для реальных платежей). Создай приложение → скопируй токен.
4️⃣
Никогда не храни токен в коде! Используй .env-файл (python-dotenv) и добавь .env в .gitignore.
5️⃣
Для разработки используй ТОЛЬКО TESTNET. MAINNET — только для production. Не путай токены!
6️⃣
Включи Checks, Transfers и Webhooks в настройках безопасности приложения. Иначе соответствующие методы будут возвращать ошибку.
7️⃣
Проверь подключение через python -c "from aiosend import CryptoPay; ..." или с помощью скрипта check_connection.py.
⚙️

Практическая задача

Задание: Установить aiosend, получить токен, проверить подключение

Выполни следующие шаги и убедись, что всё работает:

  1. Проверь версию Python: python3 --version. Если < 3.10 — обнови.
  2. Создай директорию aiosend-course/module-01/lesson-1.2/.
  3. Создай виртуальное окружение и активируй его.
  4. Установи aiosend и python-dotenv через pip.
  5. Открой @CryptoTestnetBot в Telegram, создай приложение, скопируй токен.
  6. Включи Checks, Transfers, Webhooks в настройках безопасности приложения.
  7. Создай файл .env с токеном: CRYPTO_PAY_TOKEN=твой_токен.
  8. Создай файл .gitignore и добавь в него .env, venv/, __pycache__/.
  9. Создай скрипт check_connection.py (как в уроке) и запусти его.
  10. Убедись, что скрипт выводит информацию о приложении без ошибок.

Если что-то пошло не так — вернись к соответствующим разделам урока. Если всё получилось — ты готов к следующему уроку!

Урок 1.2: Установка и настройка

9 вопросов