【问题标题】:Invalid Signature Coinbase无效的签名 Coinbase
【发布时间】:2015-10-17 19:02:14
【问题描述】:

我正在尝试使用 Coinbase 的 API,但我得到了无效的签名。

所以可能我实际上签错了,或者我遗漏了一些东西。

我应该根据要求使用什么?我应该在方法上使用 POST 还是 GET?

$urlapi = "https://api.coinbase.com/v2/time";
            $Key = "--------------";
            $Secret = "------------";               
            $fecha = new DateTime();
            $timestamp = $fecha->getTimestamp();
            $request="";
            $body="";
            $method="GET";  
            $Datas = $timestamp . $method . $request . $body;               
            $hmacSig = hash_hmac('sha256',$Datas,$Secret);
            $curl = curl_init($urlapi);
            curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type: application/json','CB-ACCESS-KEY: '.$Key,'CB-VERSION: 2015-07-07','CB-ACCESS-TIMESTAMP: '. $timestamp,'CB-ACCESS-SIGN: '.$hmacSig));
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            $resp = curl_exec($curl);
            if(!curl_exec($curl)){
            die('Error: "' . curl_error($curl) . '" - Code: ' . curl_errno($curl));
            }
            curl_close($curl);

            print_r($resp);

【问题讨论】:

    标签: coinbase-api


    【解决方案1】:

    获取当前时间是一个 GET 请求 (ref)。 HTTP 动词(GET/POST 等)可以在文档中找到每种类型的请求:

    在您的示例中,问题在于您的消息中的 $request 变量是空白的。应该是$request="/v2/time";

    hash_hmac 默认返回十六进制编码的字符串,所以散列部分是正确的。

    【讨论】:

    • 效果很好,我现在正在尝试 /v2/accounts,这样我就可以获得我的帐户列表,这只是一个。仍然是 GET 请求吗?因为我使用上面的代码得到了无效的签名。
    • 我想在哪里 bin2hex? bin2hex($hmacSig) 或 bin2hex($Datas)
    【解决方案2】:
    define('API_KEY', 'xxxx');
    define('API_SECRET', 'xxxxxxxxx');
    define('API_BASE', 'https://api.coinbase.com');
    define('API_VERSION', '2015-08-31');
    
    $headers = array(
          'Content-Type: application/json',
          'CB-VERSION: ' . API_VERSION
        );
    
    $url = API_BASE.'/v2/time';
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec($ch);
    curl_close($ch);
    $output = json_decode($response, true);
    print_r($output);
    

    会回来

    Array ( [data] => Array ( [iso] => 2015-12-01T10:35:58Z [epoch] => 1448966158 ) )
    

    【讨论】:

      【解决方案3】:

      你必须使用GET方法,因为只是为了获取一些信息,不需要认证。

      这是一种更简单的方法:

      $time = file_get_contents('https://api.coinbase.com/v2/time');
      $time = json_decode($time);
      $time = $time->data->epoch;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-07
        • 2020-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-12
        • 2015-04-21
        • 1970-01-01
        相关资源
        最近更新 更多