FastPay Connect — это проект для демонстрации интеграции различных платёжных систем с использованием FastAPI.
Проект поддерживает следующие платёжные системы:
- ЮKassa (бывшая Яндекс.Касса)
- Tinkoff Касса
- CloudPayments
- UnitPay
- Робокасса
FastPay Connect служит учебным материалом и демонстрационным примером того, как подключить и настроить различные платёжные системы для обработки онлайн-платежей.
fastpay_connect/
│
├── app/
│ ├── __init__.py # Инициализация приложения
│ ├── main.py # Главный файл для запуска FastAPI
│ ├── payment_gateways/ # Интеграции платёжных систем
│ │ ├── yookassa.py # ЮKassa
│ │ ├── tinkoff.py # Tinkoff Касса
│ │ ├── cloudpayments.py # CloudPayments
│ │ ├── unitpay.py # UnitPay
│ │ └── robokassa.py # Робокасса
│ ├── routes/ # Маршруты
│ │ ├── payment_routes.py # Работа с платёжными системами
│ │ └── webhook_routes.py # Обработка webhook-уведомлений
│ ├── utils/ # Вспомогательные функции
│ ├── config.py # Конфигурации платёжных систем
│ └── database.py # Подключение к базе данных
│
├── .env # Конфиденциальные данные
├── requirements.txt # Зависимости проекта
├── README.md # Описание проекта
└── run.py # Точка входа для запуска приложения
fastpay_connect— это теперь основная папка проекта.main.py— запускает FastAPI-приложение и подключает все маршруты для платёжных систем.payment_gateways/— папка, где находятся интеграции с различными платёжными системами (ЮKassa,Tinkoff,CloudPayments,UnitPay,Робокасса).- Маршруты
payment_routes.pyиwebhook_routes.py— определяют все взаимодействия с платёжными системами и обработку webhook-уведомлений. config.py— хранит конфигурации для всех платёжных систем, которые будут использоваться в проекте.models/— если будет нужна база данных, в этом каталоге будут храниться модели для хранения информации о платежах.helpers.py— вспомогательные функции, такие как создание подписи, обработка ошибок и другие утилиты..env— файл для хранения всех конфиденциальных данных (например, API-ключей и секретных ключей).
Для установки зависимостей выполните команду:
pip install -r requirements.txtСоздание файла .env:
YOOKASSA_API_KEY=your_yookassa_api_key
TINKOFF_API_KEY=your_tinkoff_api_key
CLOUDPAYMENTS_API_KEY=your_cloudpayments_api_key
UNITPAY_API_KEY=your_unitpay_api_key
ROBKASSA_API_KEY=your_robokassa_api_key
Для запуска приложения используйте команду:
uvicorn app.main:app --reload
После этого вы сможете получить доступ к API, например, по адресу http://127.0.0.1:8000
Каждый платёжный шлюз имеет свой собственный маршрут для создания платежа. Для создания платежа необходимо отправить POST-запрос с необходимыми параметрами.
- URL:
/payments/yookassa - Метод:
POST - Тело запроса (JSON):
{ "amount": 1000, "currency": "RUB", "description": "Оплата за курс по Python" }
- URL:
/payments/tinkoff - Метод:
POST - Тело запроса (JSON):
{ "amount": 2000, "currency": "RUB", "description": "Оплата за курс по C++" }
- URL:
/payments/cloudpayments - Метод:
POST - Тело запроса (JSON):
{ "amount": 1500, "currency": "RUB", "description": "Оплата за курс по JavaScript" }
- URL:
/payments/unitpay - Метод:
POST - Тело запроса (JSON):
{ "amount": 500, "currency": "RUB", "description": "Оплата за курс по PHP" }
- URL:
/payments/robokassa - Метод:
POST - Тело запроса (JSON):
{ "amount": 1200, "currency": "RUB", "description": "Оплата за курс по Go" }
Для каждой платёжной системы предусмотрены маршруты для обработки уведомлений о статусе транзакций (webhook).
- URL:
/webhooks/yookassa - Метод:
POST - Тело запроса (JSON):
{ "payment_id": "123456789", "status": "success", "amount": 1000, "currency": "RUB", "transaction_id": "TX123456789" }
- URL:
/webhooks/tinkoff - Метод:
POST - Тело запроса (JSON):
{ "order_id": "123456789", "status": "success", "amount": 2000, "currency": "RUB", "transaction_id": "TX987654321" }
- URL:
/webhooks/cloudpayments - Метод:
POST - Тело запроса (JSON):
{ "payment_id": "123456789", "status": "success", "amount": 1500, "currency": "RUB", "transaction_id": "TX543210987" }
- URL:
/webhooks/unitpay - Метод:
POST - Тело запроса (JSON):
{ "payment_id": "987654321", "status": "success", "amount": 500, "currency": "RUB", "transaction_id": "TX135792468" }
- URL:
/webhooks/robokassa - Метод:
POST - Тело запроса (JSON):
{ "order_id": "987654321", "status": "success", "amount": 1200, "currency": "RUB", "transaction_id": "TX246813579" }
Каждый из маршрутов возвратит стандартный ответ в формате JSON:
-
Успех (200 OK):
{ "status": "success", "message": "Платёж успешно создан" } -
Ошибка (400 Bad Request):
{ "status": "error", "message": "Неверные данные в запросе" } -
Ошибка (500 Internal Server Error):
{ "status": "error", "message": "Ошибка сервера" }
Для выполнения запросов к API необходимо настроить и указать API-ключи для каждой платёжной системы в файле .env, как указано в секции настройки проекта.
- Перейдите на сайт ЮKassa.
- Зарегистрируйтесь или войдите в личный кабинет.
- В разделе "Интеграции" выберите "API" и создайте новый API-ключ.
- Сохраните ключ в безопасном месте 🔒.
- Перейдите на сайт Tinkoff API.
- Зарегистрируйтесь в личном кабинете.
- В разделе "Настройки" получите публичный и секретный API-ключи.
- Перейдите на сайт CloudPayments.
- Зарегистрируйтесь и войдите в личный кабинет.
- В разделе "Настройки" получите API-ключи.
- Перейдите на сайт UnitPay.
- Зарегистрируйтесь и создайте аккаунт.
- В разделе "Настройки" найдите свой API-ключ.
- Перейдите на сайт Робокасса.
- Зарегистрируйтесь и войдите в личный кабинет.
- В разделе "Настройки" получите API-ключи.
- Храните ключи в безопасном месте, например, в переменных окружения или секретных хранилищах.
- Никогда не размещайте ключи в публичных репозиториях 🚫.
YOOKASSA_API_KEY, TINKOFF_API_KEY, CLOUDPAYMENTS_API_KEY, UNITPAY_API_KEY, ROBOKASSA_API_KEY — ключи для авторизации и взаимодействия с платёжными системами. Замените эти значения на реальные ключи, полученные при регистрации в платёжных системах.
DATABASE_URL — строка подключения к базе данных. Пример с SQLite для локальной разработки и с PostgreSQL для продакшн окружения. Вы можете использовать любую другую базу данных по мере необходимости.
SECRET_KEY — секретный ключ для безопасности, например, для подписи сессий или JWT токенов.
ALLOWED_HOSTS — список хостов, которые могут подключаться к вашему серверу. Используйте это в целях безопасности, чтобы ограничить доступ только с определённых адресов.
DEBUG — флаг для включения/выключения режима отладки. Включайте его только в локальной разработке. На продакшн сервере должно быть установлено значение False.
MAIL_USERNAME, MAIL_PASSWORD, MAIL_SERVER, MAIL_PORT — параметры для настройки почтового сервера, если приложение будет отправлять письма.
Эти маршруты предназначены для обработки уведомлений от платёжных систем о статусе транзакций.
Этот проект лицензирован под лицензией MIT
Для получения дополнительной информации ознакомьтесь с файлом LICENSE
Дуплей Максим Игоревич
Дата: 15.10.2024 - 30.10.2024
Версия: 1.0
