#php #coinbase-api #coinbase-php
#php #coinbase-api #coinbase-php
Вопрос:
Я пытаюсь пройти аутентификацию в Coinbase, используя следующий PHP-код, и я продолжаю получать сообщение об ошибке с недопустимой подписью.
Учитывая, что info() является функцией (в конечном итоге превратит ее в объект), которая получает API_KEY, API_SECRET, USERAGENT и базовый URL-адрес Coinbase (каждый протестирован), и что get_coinbase_time(), который был протестирован для получения времени эпохи из Coinbase, я не испытываю радости. Я предполагаю, что ошибка находится в строке, где определен знак $. В документах не очень ясно, как решить эту проблему. Может кто-нибудь оценить мой код и порекомендовать изменения или предложить код, который может сработать, из которого я могу извлечь уроки.
Спасибо!
<?php
var_dump(get_coinbase_access('/v2/accounts'));
function get_coinbase_access($path){
$data = get_coinbase_time() . 'GET' . $path;
$sign = hash_hmac("sha256", $data, info('secret'));
$headers = array();
$headers[] = 'CB-ACCESS-KEY: ' . info('key');
$headers[] = 'CB-ACCESS-SIGN: ' . $sign;
$headers[] = 'CB-ACCESS-TIMESTAMP: ' . get_coinbase_time();
$headers[] = 'CB-VERSION: 2016-03-08';
$headers[] = 'Content-Type: application/json';
$ch= curl_init(info('url') . $path);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HTTPGET, TRUE);
curl_setopt($ch, CURLOPT_USERAGENT, info('useragent'));
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$response = curl_exec($ch);
$res = json_decode($response, TRUE);
return $res;
}
?>
Ответ №1:
Я не эксперт (просто работаю над этим …)
Если вас интересует Coinbase, а не CoinbasePro, то я думаю, что в разделе [документы, которые вам нужны] [1] говорится:
Заголовок CB-ACCESS-SIGN генерируется путем создания HMAC sha256 с использованием секретного ключа в строке предварительного хэша timestamp method requestPath body (где представляет конкатенацию строк). Значение метки времени совпадает с заголовком CB-ACCESS-TIMESTAMP .
Итак, у вас все в неправильном порядке.
Я думаю, вы могли бы использовать что-то вроде этого:
function signature($request_path='', $body='', $timestamp, $method='GET') {
$w= $timestamp.$method.$request_path.$body;
return hash_hmac("sha256", $w, API_SECRET, false);}
Ответ №2:
Попробуйте это:
$timestamp = time();
$body = '';
$message = $timestamp . 'GET' . $path . $body;
$sign = hash("sha256", COINBASE_SECRET_KEY . $message);