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