Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/quaddarv1ne/fastpay_connect

fastpay_connect — это проект для демонстрации интеграции различных платёжных систем через FastAPI В проекте реализованы интеграции с популярными платёжными шлюзами, такими как: ЮKassa (бывшая Яндекс.Касса), Tinkoff Касса, CloudPayments, UnitPay, Робокасса
https://github.com/quaddarv1ne/fastpay_connect

2024 cloudpayments fastapi fastapi-crud fastapi-framework fastapi-sqlalchemy maximdupley paypal python quadd4rv1n7 robokassa unitpay yandex youkassa

Last synced: about 1 month ago
JSON representation

fastpay_connect — это проект для демонстрации интеграции различных платёжных систем через FastAPI В проекте реализованы интеграции с популярными платёжными шлюзами, такими как: ЮKassa (бывшая Яндекс.Касса), Tinkoff Касса, CloudPayments, UnitPay, Робокасса

Awesome Lists containing this project

README

        

# FastPay Connect

![FastPay Connect](fastpay_connect.png)

**FastPay Connect** — это проект для демонстрации интеграции различных платёжных систем с использованием `FastAPI`.

## 🔗 Интеграции

Проект поддерживает следующие платёжные системы:

- **ЮKassa** (бывшая Яндекс.Касса)
- **Tinkoff Касса**
- **CloudPayments**
- **UnitPay**
- **Робокасса**

### 📚 О проекте

FastPay Connect служит учебным материалом и демонстрационным примером того, как подключить и настроить различные платёжные системы для обработки онлайн-платежей.

---

## 📁 Структура проекта

```plaintext
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 # Точка входа для запуска приложения
```

---

### Описание изменений

1. `fastpay_connect` — это теперь основная папка проекта.
2. `main.py` — запускает FastAPI-приложение и подключает все маршруты для платёжных систем.
3. `payment_gateways/` — папка, где находятся интеграции с различными платёжными системами (`ЮKassa`, `Tinkoff`, `CloudPayments`, `UnitPay`, `Робокасса`).
4. Маршруты `payment_routes.py` и `webhook_routes.py` — определяют все взаимодействия с платёжными системами и обработку webhook-уведомлений.
5. `config.py` — хранит конфигурации для всех платёжных систем, которые будут использоваться в проекте.
6. `models/` — если будет нужна база данных, в этом каталоге будут храниться модели для хранения информации о платежах.
7. `helpers.py` — вспомогательные функции, такие как создание подписи, обработка ошибок и другие утилиты.
8. `.env` — файл для хранения всех конфиденциальных данных (например, API-ключей и секретных ключей).

**Для установки зависимостей выполните команду:**

```bash
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`

---

### API Маршруты

### 1. Создание платежа

Каждый платёжный шлюз имеет свой собственный маршрут для создания платежа. Для создания платежа необходимо отправить POST-запрос с необходимыми параметрами.

#### Создание платежа через ЮKassa

- **URL:** `/payments/yookassa`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"amount": 1000,
"currency": "RUB",
"description": "Оплата за курс по Python"
}
```

#### Создание платежа через Tinkoff

- **URL:** `/payments/tinkoff`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"amount": 2000,
"currency": "RUB",
"description": "Оплата за курс по C++"
}
```

#### Создание платежа через CloudPayments

- **URL:** `/payments/cloudpayments`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"amount": 1500,
"currency": "RUB",
"description": "Оплата за курс по JavaScript"
}
```

#### Создание платежа через UnitPay

- **URL:** `/payments/unitpay`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"amount": 500,
"currency": "RUB",
"description": "Оплата за курс по PHP"
}
```

#### Создание платежа через Робокасса

- **URL:** `/payments/robokassa`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"amount": 1200,
"currency": "RUB",
"description": "Оплата за курс по Go"
}
```

---

### 2. Обработка Webhook уведомлений

Для каждой платёжной системы предусмотрены маршруты для обработки уведомлений о статусе транзакций (webhook).

#### Обработка webhook уведомлений от ЮKassa

- **URL:** `/webhooks/yookassa`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"payment_id": "123456789",
"status": "success",
"amount": 1000,
"currency": "RUB",
"transaction_id": "TX123456789"
}
```

#### Обработка webhook уведомлений от Tinkoff

- **URL:** `/webhooks/tinkoff`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"order_id": "123456789",
"status": "success",
"amount": 2000,
"currency": "RUB",
"transaction_id": "TX987654321"
}
```

#### Обработка webhook уведомлений от CloudPayments

- **URL:** `/webhooks/cloudpayments`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"payment_id": "123456789",
"status": "success",
"amount": 1500,
"currency": "RUB",
"transaction_id": "TX543210987"
}
```

#### Обработка webhook уведомлений от UnitPay

- **URL:** `/webhooks/unitpay`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"payment_id": "987654321",
"status": "success",
"amount": 500,
"currency": "RUB",
"transaction_id": "TX135792468"
}
```

#### Обработка webhook уведомлений от Робокасса

- **URL:** `/webhooks/robokassa`
- **Метод:** `POST`
- **Тело запроса (JSON):**
```json
{
"order_id": "987654321",
"status": "success",
"amount": 1200,
"currency": "RUB",
"transaction_id": "TX246813579"
}
```

---

### Ответы на запросы

Каждый из маршрутов возвратит стандартный ответ в формате JSON:

- **Успех (200 OK)**:
```json
{
"status": "success",
"message": "Платёж успешно создан"
}
```

- **Ошибка (400 Bad Request)**:
```json
{
"status": "error",
"message": "Неверные данные в запросе"
}
```

- **Ошибка (500 Internal Server Error)**:
```json
{
"status": "error",
"message": "Ошибка сервера"
}
```

---

### Примечание

Для выполнения запросов к API необходимо настроить и указать API-ключи для каждой платёжной системы в файле `.env`, как указано в [секции настройки проекта](###настройка-проекта).

---

### ⚙️ Конфигурация

`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` — параметры для настройки почтового сервера, если приложение будет отправлять письма.
Эти маршруты предназначены для обработки уведомлений от платёжных систем о статусе транзакций.

---

**Автор:** Дуплей Максим Игоревич

**Дата:** 12.11.2024