HMAC SHA256签名PHP CURL

时间:2018-01-05 09:54:04

标签: php curl hmac

我正在尝试签署我的请求,但它为我提供此请求的签名无效。

这是我签名的方式。

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&timestamp=".$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);

1 个答案:

答案 0 :(得分:1)

您不需要对Binance的查询字符串进行url编码。您还没有包含recvWindow或时间戳,看起来您也错过了第一个参数的关键字。

尝试:

$querystring = "symbol=LTCBTC&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=0.1&recvWindow=50000&timestamp=".$timestamp;
$signature = hash_hmac('SHA256',$querystring ,$secret);