Coinbase Api 密钥验证无效令牌
Coinbase Api Key Authentication Invalid Token
我可能遗漏了一些非常明显的东西,但我无法弄清楚我的请求有什么问题。
有没有人设法连接到 Coinbase API 并且可以指出我的错误。
要求:
<?php
// Keys from Coinbase
$key = 'public_key';
$secret = 'secret_key';
date_default_timezone_set("UTC");
// CB-ACCESS-TIMESTAMP
$cb_access_timestamp = time();
// CB-ACCESS-KEY
$cb_access_key = $key;
// CB-ACCESS-SIGN
$method = 'GET';
$request_path = 'v2/user';
$body = '';
$pre_hash = $cb_access_timestamp . $method . $request_path . $body;
$cb_access_sign = hash_hmac('sha256', $pre_hash, $secret);
// Start request
$ch = curl_init("https://api.coinbase.com/v2/user");
curl_setopt($ch, CURLOPT_HEADER, array(
"CB-ACCESS-KEY:". $cb_access_key,
"CB-ACCESS-SIGN:". $cb_access_sign,
"CB-ACCESS-TIMESTAMP:". $cb_access_timestamp
)
);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$response = curl_exec($ch);
echo 'response:<pre>' . print_r($response, true). '</pre>';
curl_close($ch);
回复:
{"errors":[{"id":"invalid_token","message":"The access token is invalid"}]}
看到这让我非常伤心,我想我会分享我是如何让它工作的
调整后的代码如下:
<?php
// Keys from Coinbase
$key = 'public key';
$secret = 'private key';
date_default_timezone_set("UTC");
// CB-ACCESS-TIMESTAMP
$cb_access_timestamp = time();
// CB-ACCESS-KEY
$cb_access_key = $key;
// CB-ACCESS-SIGN
$method = 'GET';
$request_path = '/v2/user'; // CHANGE 1 - my request path had the incorrect slashes being used
$body = '';
$pre_hash = $cb_access_timestamp . $method . $request_path . $body;
$cb_access_sign = hash_hmac('sha256', $pre_hash, $secret);
// Start request
$ch = curl_init("https://api.coinbase.com/v2/user");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array();
$headers[] = "CB-ACCESS-KEY: $cb_access_key";
$headers[] = "CB-ACCESS-SIGN: $cb_access_sign";
$headers[] = "CB-ACCESS-TIMESTAMP: $cb_access_timestamp";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // CHANGE 2 - Need to use CURLOPT_HTTPHEADER. I was previously using CURLOPT_HEADER which was incorrect.
//return the transfer as a string
$response = curl_exec($ch);
curl_close($ch);
?>
我可能遗漏了一些非常明显的东西,但我无法弄清楚我的请求有什么问题。
有没有人设法连接到 Coinbase API 并且可以指出我的错误。
要求:
<?php
// Keys from Coinbase
$key = 'public_key';
$secret = 'secret_key';
date_default_timezone_set("UTC");
// CB-ACCESS-TIMESTAMP
$cb_access_timestamp = time();
// CB-ACCESS-KEY
$cb_access_key = $key;
// CB-ACCESS-SIGN
$method = 'GET';
$request_path = 'v2/user';
$body = '';
$pre_hash = $cb_access_timestamp . $method . $request_path . $body;
$cb_access_sign = hash_hmac('sha256', $pre_hash, $secret);
// Start request
$ch = curl_init("https://api.coinbase.com/v2/user");
curl_setopt($ch, CURLOPT_HEADER, array(
"CB-ACCESS-KEY:". $cb_access_key,
"CB-ACCESS-SIGN:". $cb_access_sign,
"CB-ACCESS-TIMESTAMP:". $cb_access_timestamp
)
);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$response = curl_exec($ch);
echo 'response:<pre>' . print_r($response, true). '</pre>';
curl_close($ch);
回复:
{"errors":[{"id":"invalid_token","message":"The access token is invalid"}]}
看到这让我非常伤心,我想我会分享我是如何让它工作的
调整后的代码如下:
<?php
// Keys from Coinbase
$key = 'public key';
$secret = 'private key';
date_default_timezone_set("UTC");
// CB-ACCESS-TIMESTAMP
$cb_access_timestamp = time();
// CB-ACCESS-KEY
$cb_access_key = $key;
// CB-ACCESS-SIGN
$method = 'GET';
$request_path = '/v2/user'; // CHANGE 1 - my request path had the incorrect slashes being used
$body = '';
$pre_hash = $cb_access_timestamp . $method . $request_path . $body;
$cb_access_sign = hash_hmac('sha256', $pre_hash, $secret);
// Start request
$ch = curl_init("https://api.coinbase.com/v2/user");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array();
$headers[] = "CB-ACCESS-KEY: $cb_access_key";
$headers[] = "CB-ACCESS-SIGN: $cb_access_sign";
$headers[] = "CB-ACCESS-TIMESTAMP: $cb_access_timestamp";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); // CHANGE 2 - Need to use CURLOPT_HTTPHEADER. I was previously using CURLOPT_HEADER which was incorrect.
//return the transfer as a string
$response = curl_exec($ch);
curl_close($ch);
?>