我正在尝试签署我的请求,但它为我提供此请求的签名无效。
这是我签名的方式。
SIGNED端点需要在查询字符串或请求正文中发送附加参数签名。 端点使用HMAC SHA256签名。 HMAC SHA256签名是密钥HMAC SHA256操作。使用secretKey作为密钥,使用totalParams作为HMAC操作的值。 签名不区分大小写。 totalParams定义为与请求正文连接的查询字符串
我的代码如下:
$ch = curl_init();
$timestamp = round(microtime(true) * 1000);
$secret = 'bmrLfulhggHgudLEHzRj7zNz**************p3KladNAcI4qLg';
$querystring = urlencode("LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1");
$signature = hash_hmac('SHA256',$querystring ,$secret);
curl_setopt($ch, CURLOPT_URL, "https://api.binance.com/api/v3/order/test?symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=50000×tamp=".$timestamp."&signature=".$signature."");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
$headers = array();
$headers[] = "X-Mbx-Apikey: EAXHTI2ZyuWqVdVC*****************RsVrptYUnl2XYM9f";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
print_r($result);
if (curl_errno($ch)) {
echo 'Error:' . curl_error($ch);
}
curl_close ($ch);
答案 0 :(得分:1)
您不需要对Binance的查询字符串进行url编码。您还没有包含recvWindow或时间戳,看起来您也错过了第一个参数的关键字。
尝试:
$querystring = "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=50000×tamp=".$timestamp;
$signature = hash_hmac('SHA256',$querystring ,$secret);