Не работает запрос на API бинанс фьючерс

Есть ли тут спецы по апи бинанс для фьючерсов? Не могу понять, где у меня ошибка. Делаю запрос через php, через прослойку прокси, так как прямой запрос с браузера бинанс просто не обрабатывает. Запрос на открытие позиции.

Есть связка из файлов: config.php - тут ключи, которые работают, так как эти же ключи использую для получения баланса пользователя на определенной паре. Есть файл proxy.php - который получает запрос и отправляет его дальше в апи бинанс, создавая иллюзию запроса с сервера Есть скрипт запроса, который создает запрос для proxy.php

Вот файл proxy.php

<?php
// Разрешаем все источники
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // Кэшируем на 1 день

// Обрабатываем запросы OPTIONS
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
    }

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
        header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
    }

    exit(0);
}

// Загружаем конфигурацию API из файла конфигурации
$config = include('config.php');
$API_KEY = $config['API_KEY'];
$API_SECRET = $config['API_SECRET'];

// Получаем данные из запроса
$input = json_decode(file_get_contents('php://input'), true);
// $input теперь содержит массив с данными запроса
print_r($input);
// Проверяем наличие обязательных параметров в запросе
$requiredParams = ['symbol', 'side', 'type', 'timeInForce', 'quantity', 'price', 'recvWindow', 'timestamp'];
foreach ($requiredParams as $param) {
    if (!isset($input[$param])) {
        http_response_code(400); // Неверный запрос
        exit("Parameter '$param' is missing");
    }
}

$symbol = $input['symbol'];
$side = $input['side'];
$type = $input['type'];
$timeInForce = $input['timeInForce'];
$quantity = $input['quantity'];
$price = $input['price'];
$recvWindow = $input['recvWindow'];
$timestamp = $input['timestamp'];

// Формируем строку запроса для подписи
$queryString = "symbol=$symbol&side=$side&type=$type&timeInForce=$timeInForce&quantity=$quantity&price=$price&recvWindow=$recvWindow&timestamp=$timestamp";

// Вычисляем подпись
$signature = hash_hmac('sha256', $queryString, $API_SECRET);

// Добавляем подпись к данным запроса
$input['signature'] = $signature;

// Отправляем запрос к Binance API
$url = "https://dapi.binance.com/dapi/v1/order";

$headers = [
    "Content-Type: application/json",
    "X-MBX-APIKEY: $API_KEY"
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($input)); // отправляем данные в формате JSON

$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
}
curl_close($ch);

// Возвращаем результат клиенту
echo $response;
?>

Далее скрипт

async function openPositionOnExchange(symbol, side, type, timeInForce, quantity, price) {
    const timestamp = Date.now();
    const recvWindow = 5000;

    const requestBody = {
        symbol,
        side,
        type,
        timeInForce,
        quantity,
        price,
        recvWindow,
        timestamp
    };

    try {
        const response = await fetch('proxy.php', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(requestBody)
        });

        if (!response.ok) {
            throw new Error(`Failed to open position. HTTP error! status: ${response.status}`);
        }

        const data = await response.json();
        return { success: true, data };
    } catch (error) {
        return { success: false, error: error.message };
    }
}

Вызов этой функции я делаю так:

  // Отправляем запрос на открытие позиции на бирже
const response = await openPositionOnExchange(symbol, tradeDirection2, 'LIMIT', 'GTC', stakeAmount, positionPrice);

Естественно все данные передаются в файл proxy.php корректно, сделал вывод логов.

Далее стандартный файл config.php, который работает, естественно сами ключи стер

<?php
$config = [
    'API_KEY' => "Mier4S...........",
    'API_SECRET' => "Im0................"
];

header('Content-Type: application/json');
echo json_encode($config);
?>

А по итогу получаю ошибку "code":-2014,"msg":"API-key format invalid."


Ответы (0 шт):