Доброго времени суток. Работа с API платформы, есть код:
<?
$KEY = "kCw1.......Be";
$SECRET = "xo......ejVX8Cyj2NN";
$BASE_URL = 'https://api.site.com/';
for ($x = 0; $x < 42; $x++){
$sql = mysqli_query($db, "SELECT * FROM `sale`");
if(mysqli_num_rows($sql) > 0) {
$result = mysqli_fetch_assoc($sql);
$tic = $result['tic'];
$id = $result['id'];
$symbol = $tic;
if($result['side'] == 'BUY') {
$response = signedRequest('GET', 'api/v3/', [
'symbol' => $symbol
]);
if($response[0]['symbol'] == $symbol and $response[0]['side'] == "BUY") {
// Ничего пока что не делаем
} else {
$num_coins = $result['numbers_of_coin'];
$take_price = $result['take_price'];
$zapros = "api/v3/exchange=".$symbol;
$response = sendRequest('GET', $zapros);
$count_sym = strpos($response['symbols'][0]['filters'][0]['tckSize'], '1')-2+1;
$take_price = number_format($take_price, $count_sym, '.', ',');
$response = signedRequest('POST', 'api/v3/', [
'symbol' => $symbol,
'side' => 'BUY',
'type' => 'LIMIT',
'timeInForce' => 'GTC',
'quantity' => $num_coins,
'price' => $take_price,
]);
echo json_encode($response) . "<br><br>";
}
}
function signature($query_string, $secret) {
return hash_hmac('sha256', $query_string, $secret);
}
function signedRequest($method, $path, $parameters = []) {
global $SECRET;
$parameters['timestamp'] = round(microtime(true) * 1000);
$query = buildQuery($parameters);
$signature = signature($query, $SECRET);
return sendRequest($method, "${path}?${query}&signature=${signature}");
}
function sendRequest($method, $path) {
global $KEY;
global $BASE_URL;
$url = "${BASE_URL}${path}";
echo "Запрос: ". PHP_EOL;
echo $url. PHP_EOL . "<br>";
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-MBX-APIKEY:'.$KEY));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, $method == "POST" ? true : false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$execResult = curl_exec($ch);
$response = curl_getinfo($ch);
curl_close ($ch);
return json_decode($execResult, true);
}
function buildQuery(array $params)
{
$query_array = array();
foreach ($params as $key => $value) {
if (is_array($value)) {
$query_array = array_merge($query_array, array_map(function ($v) use ($key) {
return urlencode($key) . '=' . urlencode($v);
}, $value));
} else {
$query_array[] = urlencode($key) . '=' . urlencode($value);
}
}
return implode('&', $query_array);
}
?>
В итоге
$response = signedRequest
вообще не исполняется, как будто его и нет.
Или иногда возникает ошибка
PHP Fatal error: Cannot redeclare signature() (previously declared
.
Не могу понять, в чём проблем. Скрипт либо просто игнорирует часть с
$response = signedRequest
без ошибок.
Либо выдаёт ошибку выше. Почему так? Спасибо заранее за помощь.