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

Я хочу использовать php curl для взаимодействия с API. Простые вызовы API, которые не требуют передачи данных, являются успешными. Что я хочу сделать, это создать адрес.
CLI curl работает. Пример команды curl для командной строки приведен ниже:

локон https://api.coinbase.com/v2/accounts/82de7fcd-db72-5085-8ceb-bee19303080b/addresses \
-X POST \
-H ‘Тип контента: приложение / json’ \
-H ‘Авторизация: Носитель abd90df5f27a7b170cd775abf89d632b350b7c1c9d53e08b340cd9832ce52c2c’ \
-d ‘{«name»: «Новый адрес получения»}’
}

Мой php код выдержки

$apiurl = "https://api.coinbase.com";
$secret = "coinbase api secret";
$method = "POST";
$requestPath = "/v2/accounts/actualAccountID/addresses";
$body = "";
$url = $apiurl.$requestPath;
$data["name"] = "curl smj6 ary";
$body=json_encode($data);

$string = $timestamp.$method.$requestPath.$body;
$sig = hash_hmac('sha256', $string, $secret);
$ch = curl_init();
// Disable SSL verification
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// Will return the response, if false it print the response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
// Set the url
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_VERBOSE, true);

if($method == "POST"){

curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $body);
}

$headers = [
"CB-ACCESS-KEY: xxx",
"CB-ACCESS-SIGN:$sig",
"CB-ACCESS-TIMESTAMP: $timestamp",
"CB-VERSION: 2018-03-21",
"accept: application/json;charset=utf-8"];

curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// Execute
$result_json = curl_exec($ch);

Возвращается

{«errors»: [{«id»: «authentication_error», «message»: «неверная подпись»}]}

Так как работает с листингом пользователя. Я предполагаю, что ошибка происходит, когда я передаю данные в curl.

Похожие вопросы, которые я нашел на SO, но ни один не решает мою проблему. Пожалуйста помоги!

  1. Неверная подпись Coinbase
  2. CoinBase "неверная подпись" PHP Buy API Request
  3. Как объявить тело CURL для вызова CoinBase API
  4. Аутентификация по ключу API для Coinbase

ОБНОВИТЬ:

$apiurl = "https://api.coinbase.com/v2/";
$requestPath = "accounts/$accountid/addresses";

возвращает ту же ошибку

1

Решение

Есть сайты, которые конвертируют синтаксис cURL командной строки в PHP, например https://incarnate.github.io/curl-to-php/

Я просто вставил вашу команду и:

// Generated by curl-to-PHP: http://incarnate.github.io/curl-to-php/
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, "https://api.coinbase.com/v2/accounts/82de7fcd-db72-5085-8ceb-bee19303080b/addresses");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"name\": \"New receive address\"}");
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = "Content-Type: application/json";
$headers[] = "Authorization: Bearer abd90df5f27a7b170cd775abf89d632b350b7c1c9d53e08b340cd9832ce52c2c";
$headers[] = "CB-ACCESS-KEY: <your api key>";
$headers[] = "CB-ACCESS-SIGN: <the user generated message signature>";
$headers[] = "CB-ACCESS-TIMESTAMP: <a timestamp for your request>";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

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

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

Других решений пока нет …