Задать вопрос

Почему возникает ошибка 422 при получении ответа от сервера?

Пытаюсь сделать интеграцию платёжного сервиса.

Сейчас на стадии разработки получения callback об успешной оплате.

При подтверждении тестового счета получаю ошибку:

INFO: 35.233.203.43:3072 - "POST /callback HTTP/1.1" 422 Unprocessable Entity


Всю документацию уже перерыл.

Вот сам скрипт, который обрабатывает callback:
from fastapi import FastAPI, HTTPException, Form 
import logging 
from app.services.database import Session 
from app.models.user_model import User 
 
# Настройка логирования 
logging.basicConfig(level=logging.INFO) 
 
api_app = FastAPI() 
 
@api_app.post("/callback") 
async def handle_callback( 
    status: str = Form(...),          # Обязательное поле 
    invoice_id: str = Form(...),      # Обязательное поле 
    amount_crypto: float = Form(...), # Обязательное поле 
    currency: str = Form(...),        # Обязательное поле 
    order_id: str = Form(...),        # Обязательное поле 
    token: str = Form(...)            # Обязательное поле 
): 
    """ 
    Обработка POST-запросов с Content-Type: x-www-form-urlencoded. 
    """ 
    try: 
        # Логирование входящих данных 
        logging.info(f"Статус: {status}, Invoice ID: {invoice_id}, Amount Crypto: {amount_crypto}, " 
                     f"Currency: {currency}, Order ID: {order_id}, Token: {token}") 
 
        # Проверка обязательных данных 
        if not all([status, invoice_id, amount_crypto, currency, order_id, token]): 
            logging.error("Некорректные данные в запросе") 
            raise HTTPException(status_code=400, detail="Некорректные данные") 
 
        # Логика обработки 
        if status == "success": 
            logging.info(f"Успешная обработка платежа: Order ID={order_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="Внутренняя ошибка сервера")


А вот формат который посылает сервер:
{
    "status": "success",
    "invoice_id": "XXXXXXXX",
    "amount_crypto": 100,
    "currency": "USDT_TRC20",
    "order_id": "order_id",
    "token": b"token",
    "invoice_info": {
        "uuid": "INV-XXXXXXXX",
        "created": "2024-08-22 11:49:59.756692",
        "address": "address",
        "currency": {
            "id": 4,
            "code": "USDT",
            "fullcode": "USDT_TRC20",
            "network": {
                "code": "TRC20",
                "id": 4,
                "icon": "https://cdn.cryptocloud.plus/currency/crypto/TRX.svg",
                "fullname": "Tron"
            },
            "name": "Tether",
            "is_email_required": false,
            "stablecoin": true,
            "icon_base": "https://cdn.cryptocloud.plus/currency/icons/main/usdt.svg",
            "icon_network": "https://cdn.cryptocloud.plus/icons-currency/USDT-TRC20.svg",
            "icon_qr": "https://cdn.cryptocloud.plus/currency/icons/stroke/usdt.svg",
            "order": 1
        },
        "date_finished": "2024-08-22 11:51:53.753528",
        "expiry_date": "2024-08-23 11:49:59.746385",
        "side_commission": "client",
        "type_payments": "crypto",
        "amount": 100,
        "amount_": 100,
        "status": "overpaid",
        "invoice_status": "success",
        "is_email_required": false,
        "project": {
            "id": 0,
            "name": "My Project",
            "fail": "",
            "success": "",
            "logo": ""
        },
        "tx_list": [
            ""
        ],
        "amount_in_crypto": null,
        "amount_in_fiat": 0.0,
        "amount_usd": 100.0,
        "amount_to_pay": 102.0,
        "amount_to_pay_usd": 102.0,
        "amount_paid": 102.0,
        "amount_paid_usd": 102.0,
        "fee": 1.4,
        "fee_usd": 1.4,
        "service_fee": 0.8048,
        "service_fee_usd": 0.8,
        "received": 99.7952,
        "received_usd": 99.8,
        "to_surcharge": 0.0,
        "to_surcharge_usd": 0.0,
        "total_rub": 0,
        "step": 3,
        "test_mode": false,
        "type": "up",
        "aml_enabled": false,
        "aml_side": "merchant",
        "aml_checks": [],
        "links_invoice": null
    }
}
  • Вопрос задан
  • 279 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Stepik
    Полный курс по FastAPI: от новичка до профессионала
    1 месяц
    Далее
  • Слёрм
    Python: Работа с API и фреймворками
    1 месяц
    Далее
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы