我试图获得网站的api响应。
这个网站说encrypted POST parameters with HMAC-SHA512 alghoritm using your secret API key
,但我没有丝毫的线索如何做到这一点。我尝试的每种方法都会产生相同的错误:"缺少密钥或签名。
<?php
error_reporting(E_ALL);
$key = 'API_KEY';
$secret = 'SECRET_KEY';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://bitgrail.com/api/v1/balances");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $key);
$ch = hash_hmac('sha512',$ch,$secret);
$output = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
print_r($output);
答案 0 :(得分:0)
来自api docs:
所有私人呼叫必须由HTTP POST呼叫组成,包含以下2个标头:
KEY - 公共API密钥
SIGNATURE - 使用您的秘密API密钥使用HMAC-SHA512 alghoritm加密的POST参数
私人呼叫需要额外的POST参数,即nonce
nonce - 整数,总是大于先前调用的nonce。
所以你必须创建两个标题,KEY(你的密钥)和SIGNATURE(发布数据的HMAC哈希,你的秘密作为密钥)。
天平
要获得BitGrail上存在的所有硬币的余额,除了认证之外,您不需要参数。
我认为这意味着您不必提交任何发布数据,但现有数据除外。
代码:
$key = 'API_KEY';
$secret = 'SECRET_KEY';
$url = "https://bitgrail.com/api/v1/balances";
$data = http_build_query(array("nonce" => time()));
$sig = hash_hmac('sha512', $data, $secret);
$headers = array("KEY: $key", "SIGNATURE: $sig");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$output = curl_exec($ch);
curl_close($ch);
echo $output;