没有关于这个或任何样本的文档可供探索,所以我卡住了我的头发。要连接到Coinkite API,我需要发送三个创建签名的标头。我可以用相同的结果重新创建他们的测试签名。所以现在当我实际发送签名以获得json时,我收到了身份验证错误。
{ "help_msg": "Bad signature for endpoint: /v1/my/self", "message": "Unauthorized", "status": 401 }
这是我的代码:
date_default_timezone_set('UTC');
function sign($endpoint, $force_ts=false)
{
$API_KEY = 'xxxx';
$API_SECRET = 'xxx';
if($force_ts) {
$ts = $force_ts;
} else {
$now = new DateTime();
$ts = $now->format(DateTime::ISO8601);
}
$data = $endpoint . '|' . $ts;
$hm = hash_hmac('sha256', $data, $API_SECRET);
return array($hm, $ts);
}
$sign = (sign('/v1/my/self'));
$ch = curl_init('https://api.coinkite.com/v1/my/self');
curl_setopt($ch,CURLOPT_HTTPHEADER,array('X-CK-Key: {$API_KEY}', 'X-CK-Sign: {$sign[0]}', 'X-CK- Timestamp: {$sign[1]}'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
我唯一改变的是标题符号和时间戳变量。 $ hm和$ ts会给标题符号和时间戳值太短的错误,所以我从$ sign给它们数组以使它工作,但我现在正在创建一个“错误的签名。”
如何发送所需的项目以使签名进行身份验证?
答案 0 :(得分:1)
我运行了你的程序,第一次打印出来了:
{
"help_msg": "Header field is missing: X-CK-Timestamp",
"message": "Unauthorized",
"status": 401
}
所以我注意到X-CK-和Timestamp之间有一个额外的空间。纠正错字,但它仍然失败...所以我添加了一行:
curl_setopt($ch, CURLOPT_VERBOSE, 1);
..现在它打印正在发送的标头。他们有{}和$签到...而不是你想要的值。就我而言。希望它有所帮助!
PS:一旦你开始工作,你必须撤销这个密钥!现在全世界都知道你已经在这里发布了它。任何人都可以拿走您的资金或至少弄乱您的帐户。