如何为CoinBase API调用声明CURL主体

时间:2017-02-16 04:51:13

标签: php curl httprequest coinbase-api

我目前正在使用Coinbase的API开发一个小应用程序。

Coinbase需要CB-ACCESS-SIGN标头进行身份验证。 CB-ACCESS-SIGN标头是通过在prehash字符串时间戳+方法+ requestPath + body(其中+表示字符串连接)上使用密钥创建sha256 HMAC生成的。

参考页https://developers.coinbase.com/api/v2?shell#api-key

创建地址,基于:https://developers.coinbase.com/api/v2?shell#create-address。我写了命令:

    $timestamp = time();
    $method = 'POST';
    $request_path = '/v2/accounts';
    $body = 'addresses';

    $account_id = 'myaaccount_id';
    $hash_input = $timestamp.''.$method.''.$request_path.''.$body;
    $apiSecret = 'myapi secret';
    $signature = hash_hmac('sha256', $hash_input, $apiSecret);
    $accesskey = 'myaccess_key';

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, 'https://api.coinbase.com/v2/accounts/'.$account_id.'/addresses');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');


    $headers = array();
    $headers[] = 'Cb-Access-Key: '.$accesskey;
    $headers[] = 'Cb-Access-Sign: '.$signature;
    $headers[] = 'Cb-Access-Timestamp: '.$timestamp;
    $headers[] = 'Cb-version: 2016-12-07';
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

    $result = curl_exec($ch);
    if (curl_errno($ch)) {
        echo 'Error:' . curl_error($ch);
    }
    curl_close ($ch);

但我总是得到回应:

{"errors":[{"id":"authentication_error","message":"invalid signature"}]}

我认为问题是CB-ACCESS-SIGN的请求正文

  

body(其中+表示字符串连接)。

身体价值在哪里?

2 个答案:

答案 0 :(得分:0)

更改创建签名的方式

$hash_input = $timestamp.$method.$request_path;
$signature  = hash_hmac("sha256", $hash_input, $apiSecret);

希望这个帮助

答案 1 :(得分:0)

像这样创建签名:

$Datas = $timestamp.$method.$request_path;
$hmacSig = base64_encode(hash_hmac("sha256", $Datas, base64_decode($apiSecret), true));