2017-02-16 4 views
1

В настоящее время я работаю над небольшим приложением, используя API Coinbase.Как объявить тело CURL для вызова API CoinBase

Для подтверждения подлинности Coinbase необходим CB-ACCESS-SIGN. Заголовок CB-ACCESS-SIGN генерируется путем создания массива sha256 HMAC с использованием секретного ключа в методе prestash string timestamp + method + requestPath + body (где + представляет конкатенацию строк).

См.страницу 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

тело (где + обозначает строку конкатенация).

Куда поедает стоимость?

ответ

0

Изменить способ для создания подпись

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

Надежда эта помощь

+0

До сих пор не работает чувак, я получил неверную подпись. Я думаю, что неправильно писать подпись: timestamp + method + requestPath + body (где + представляет конкатенацию строк). и я не знаю, что означает значение «тела» –

+0

Я редактирую код, повторите попытку –

0

Создать подпись, как это:

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