我希望你能帮助我,因为我找不到问题。
我使用的是 v1 版本的 bingX API,但它无缘无故停止工作,因此我决定创建一个完整的新代码并将其更新到 v2 版本。然而,我遇到了一个错误,我无法解决它的时间比我尝试解决它的时间还要长。
尝试连接到 API 并生成某些操作或查询时,出现以下错误:
placeMarketOrder: {"code":80014,"msg":"时间戳无效","data":{}}
执行获取查询时遇到的另一个错误是这样的或类似的:
placeMarketOrder: {"code":80014,"msg":"空时间戳或时间戳不匹配","data":{}}
我不确定这个错误是由于时间戳还是签名造成的。
这些是文档中的错误代码:
常见业务错误代码:
100001 - 签名验证失败,
100500 - 内部系统错误,
80001 - 请求失败,
80012 - 服务不可用,
80014 - 参数无效,
80016 - 订单不存在,
80017 - 职位不存在。
我正在测试的代码来自GitHub上的BingX文档:
<?php
$url = "https://open-api.bingx.com";
$apiKey = "Set your api key here!!";
$secretKey = "Set your secret key here!!";
function getOriginString(array $params) {
// combine origin string
$originString = "";
$first = true;
foreach($params as $n => $v) {
if (!$first) {
$originString .= "&";
}
$first = false;
$originString .= $n . "=" . $v;
}
return $originString;
}
function getSignature(string $originString) {
global $secretKey;
$signature = hash_hmac('sha256', $originString, $secretKey, true);
$signature = bin2hex($signature);
return $signature;
}
function getRequestUrl(string $path, array $params) {
global $url;
$requestUrl = $url.$path."?";
$first = true;
foreach($params as $n => $v) {
if (!$first) {
$requestUrl .= "&";
}
$first = false;
$requestUrl .= $n . "=" . $v;
}
return $requestUrl;
}
function httpPost($url)
{
global $apiKey;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_USERAGENT, "curl/7.80.0");
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"X-BX-APIKEY:".$apiKey,
));
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
function placeMarketOrder(string $symbol, string $side, string $quantity, string $positionSide) {
// interface info
$path = "/openApi/swap/v2/trade/order";
// interface params
$params = array();
$params['symbol'] = $symbol;
$params['side'] = $side;
$params['type'] = "MARKET";
$params['quantity'] = $quantity;
$params['positionSide'] = $positionSide;
$date = new DateTime();
$params['timestamp'] = $date->getTimestamp()*1000;
// generate signature
$originString = getOriginString($params);
$signature = getSignature($originString);
$params["signature"] = $signature;
// send http request
$requestUrl = getRequestUrl($path, $params);
$result = httpPost($requestUrl);
echo "\t";
echo $result;
echo "\n";
}
echo "placeMarketOrder:\n";
placeMarketOrder("LINK-USDT", "BUY", "5", "LONG");
?>
添加参数“recvWindow”=>“10000”