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

Пытаюсь сделать интеграцию платежного сервиса. Сейчас на стадии разработки получения 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
    }
}
  • Вопрос задан
  • 49 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
Ну так сервер тебе json присылает, а ты ожидаешь x-www-form-urlencoded
Ответ написан
Ваш ответ на вопрос

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

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