Binance REST API — размещение заказа PHP (POST) через строку запроса

Я борюсь с использованием REST API Binance. Мне удалось получить рабочий запрос GET через строку запроса, такую ​​как пинг сервера, информация о тикере и т. Д. Моя задача сейчас — выполнить запрос POST через строку запроса с использованием cURL. Я собирал код из разных мест и обращался к API, чтобы заставить кусочки работать, но я не уверен, почему я получаю эту ошибку, возвращенную из результата … {«code»: — 1102, «msg»: «Обязательный параметр ‘signature’ не был отправлен, был пуст / пуст или неправильно сформирован.»}
(ОШИБКА, ВЫЯВЛЕННАЯ НА САЙТЕ). Я повторяю сигнатуру и ее бред, так что я думаю, что hash_hmac, выполненный сверху, будет работать, но, честно говоря, мне очень повезло, что запрос GET сработал. У кого-нибудь есть какие-либо предложения относительно того, почему это будет сломано? Спасибо!

$apikey = "MYKEY";
$apisecret = "MYSECRET";

$timestamp = time();
$signature = hash_hmac('sha256', "TRXBTC&type=market&side=buy&quantity=100.00&recvWindow=10000000000000000&timestamp=".$timestamp, $apisecret);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://www.binance.com/api/v3/order/test");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, "symbol=TRXBTC&type=market&side=buy&quantity=100.00&recvWindow=10000000000000000&timestamp=".$timestamp);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded","X-MBX-APIKEY: ".$apikey,"signature: ".$signature));
$response = curl_exec($ch);
curl_close($ch);

echo $response;

1

Решение

Согласно их документации по API:

Для подписанных конечных точек требуется дополнительный параметр, подпись, который должен быть отправлен в Строка запроса или же тело запроса.

Вы отправляете подпись ни одним из этих методов и вместо этого отправляете ее через заголовок.

Изменить это:

curl_setopt($ch, CURLOPT_POSTFIELDS, "symbol=TRXBTC&type=market&side=buy&quantity=100.00&recvWindow=10000000000000000&timestamp=".$timestamp);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded","X-MBX-APIKEY: ".$apikey,"signature: ".$signature));

К этому:

curl_setopt($ch, CURLOPT_POSTFIELDS, "symbol=TRXBTC&type=market&side=buy&quantity=100.00&recvWindow=10000000000000000&timestamp=" . $timestamp . "&signature=" . $signature);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded","X-MBX-APIKEY: ".$apikey));
1

Другие решения

Других решений пока нет …