Не работает запрос на 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×tamp=$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."