我正在尝试编写API coinbase.com的请求,但我无法正确生成签名。我已经试图在2天内找到我的错误,但我不能。我在页面上分析了其他语言的代码:https://developers.coinbase.com/docs/wallet/api-key-autumnicathion但我没有看到实现方面的任何差异。
请帮帮我。
<?php
$g_coinbase_key = 'KcxisxqmWRVgtwsj';
$g_coinbase_secret = 'isOLGBLaEkCy3ROQMvmjonGmXK0KRmUS';
$time = time();
$method = "GET";
$path = '/v2/accounts/';
$sign = base64_encode(hash_hmac("sha256", $time.$method.$path, $g_coinbase_secret));
$ch = curl_init('https://api.coinbase.com'.$path);
$headers = array(
"CB-VERSION: 2017-10-26",
"CB-ACCESS-SIGN: ".$sign,
"CB-ACCESS-TIMESTAMP: ".$time,
"CB-ACCESS-KEY: ".$g_coinbase_key,
"Content-Type: application/json"
);
curl_setopt($ch, CURLOPT_HTTPGET, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
var_dump($result);
?>
结果:
{"errors":[{"id":"authentication_error","message":"invalid signature"}]}
答案 0 :(得分:0)
像这样创建签名:
$time = time();
$method = "GET";
$path = 'accounts';
$sign = base64_encode(hash_hmac("sha256", $time.$method.$path, base64_decode($g_coinbase_secret), true));
并替换
$ch = curl_init('https://api.coinbase.com'.$path);
与
$ch = curl_init('https://api.coinbase.com/v2/');
答案 1 :(得分:0)
替换
$sign = base64_encode(hash_hmac("sha256", $time.$method.$path, $g_coinbase_secret));
使用
$sign = hash_hmac("sha256", $time.$method.$path, $g_coinbase_secret);
Coibase Api使用hash_mac
答案 2 :(得分:0)
要正确创建签名 Coinbase Pro 将接受使用其 API 文档中的以下代码:
class CoinbaseExchange {
public function __construct($key, $secret, $passphrase) {
$this->key = $key;
$this->secret = $secret;
$this->passphrase = $passphrase;
}
public function signature($request_path='', $body='', $timestamp=false, $method='GET') {
$body = is_array($body) ? json_encode($body) : $body;
$timestamp = $timestamp ? $timestamp : time();
$what = $timestamp.$method.$request_path.$body;
return base64_encode(hash_hmac("sha256", $what, base64_decode($this->secret), true));
}
}