Как объявить тело CURL для вызова CoinBase API

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

Coinbase требовался заголовок CB-ACCESS-SIGN для аутентификации. Заголовок CB-ACCESS-SIGN создается путем создания HMAC sha256 с использованием секретного ключа на временной метке строки предварительного хэширования + метод + 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

тело (где + представляет конкатенацию строк).

Где стоимость тела?

1

Решение

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

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

Надеюсь это поможет

0

Другие решения

Создайте подпись так:

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