from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import logging
# Создаем приложение FastAPI
api_app = FastAPI()
# Настройка логирования
logging.basicConfig(level=logging.DEBUG, format="%(asctime)s - %(levelname)s - %(message)s")
class CallbackData(BaseModel):
status: str
invoice_id: str
amount_crypto: float
currency: str
order_id: str
token: str
@api_app.post("/callback")
async def handle_callback(callback_data: CallbackData):
"""
Обработчик для входящих данных в формате JSON.
"""
try:
logging.debug(f"Полученные данные: {callback_data}")
# Обработка данных
if callback_data.status == "success":
logging.info(f"Успешная обработка платежа: Invoice ID={callback_data.invoice_id}, сумма={callback_data.amount_crypto} {callback_data.currency}")
else:
logging.warning(f"Платеж со статусом {callback_data.status} не обработан")
return {"message": f"Платеж со статусом {callback_data.status} обработан частично"}
return {"message": "Callback обработан успешно"}
except Exception as e:
logging.error(f"Ошибка при обработке callback: {str(e)}")
raise HTTPException(status_code=500, detail="Внутренняя ошибка сервера")
INFO: 35.233.203.43:3072 - "POST /callback HTTP/1.1" 422 Unprocessable Entity
INFO: 35.233.203.43:3072 - "POST /callback HTTP/1.1" 422 Unprocessable Entity
INFO: 35.233.203.43:3073 - "POST /callback HTTP/1.1" 422 Unprocessable Entity
INFO: 35.233.203.43:3072 - "POST /callback HTTP/1.1" 422 Unprocessable Entity
DEBUG:python_multipart.multipart:Calling on_field_name with data[977:989]
DEBUG:python_multipart.multipart:Calling on_field_data with data[990:1003]
DEBUG:python_multipart.multipart:Calling on_field_end with no data
DEBUG:python_multipart.multipart:Calling on_end with no data
INFO: 35.233.203.43:3074 - "POST /callback HTTP/1.1" 422 Unprocessable Entity
from fastapi import FastAPI, HTTPException, Request
from pydantic import BaseModel
import logging
# Создаем приложение FastAPI
api_app = FastAPI()
# Настройка логирования
logging.basicConfig(level=logging.INFO)
# Создаем Pydantic-модель для структуры JSON
class CallbackData(BaseModel):
status: str
invoice_id: str
amount_crypto: float
currency: str
order_id: str
token: str
@api_app.post("/callback")
async def handle_callback(callback_data: CallbackData):
"""
Обработчик для входящих JSON postback-уведомлений от CryptoCloud.
"""
try:
# Логируем входящие данные
logging.info(f"Callback получен: {callback_data}")
# Деструктурируем данные из модели
status = callback_data.status
invoice_id = callback_data.invoice_id
amount_crypto = callback_data.amount_crypto
currency = callback_data.currency
order_id = callback_data.order_id
token = callback_data.token
# Логика обработки
if status == "success":
logging.info(f"Успешная обработка платежа: Invoice ID={invoice_id}, сумма={amount_crypto} {currency}")
# Здесь добавьте вашу бизнес-логику, например, обновление баланса пользователя
else:
logging.warning(f"Платеж со статусом {status} не обработан")
return {"message": f"Платеж со статусом {status} обработан частично"}
# Возвращаем успешный ответ
return {"message": "Callback обработан успешно"}
except Exception as e:
logging.error(f"Ошибка при обработке callback: {str(e)}")
raise HTTPException(status_code=500, detail="Внутренняя ошибка сервера")
INFO: 35.233.203.43:3072 - "POST /callback HTTP/1.1" 422 Unprocessable Entity
P.S и все таки ответ пришел в from)