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

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

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

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