Author

Topic: API для биржи bitfinex.com (PHP) (Read 3672 times)

legendary
Activity: 2128
Merit: 1019
September 25, 2015, 02:51:03 PM
#8
Все решили а я зря топик читал(
Для вас тоже занятие найдется)
То что в этой теме решили, но появилась другая проблема. Поскольку она уж очень специфическая (только для тех кто сам пользуется API этой биржи), я ее описал в этом сообщении в топике биржи Bitfinex

Заметим, что проблема - еще более специфическа, чем Вы отметили.
Еще нужно, не просто пользоваться АПИ этой биржи, а разбираться именно в АПИ + ПХП.  ))
newbie
Activity: 24
Merit: 0
September 24, 2015, 11:04:38 PM
#7
Все решили а я зря топик читал(
Для вас тоже занятие найдется)
То что в этой теме решили, но появилась другая проблема. Поскольку она уж очень специфическая (только для тех кто сам пользуется API этой биржи), я ее описал в этом сообщении в топике биржи Bitfinex
hero member
Activity: 504
Merit: 500
September 24, 2015, 03:55:53 PM
#6
Все решили а я зря топик читал(
newbie
Activity: 24
Merit: 0
September 24, 2015, 12:01:07 PM
#5
Спасибо, разобрался. Строчка с "str_replace" ни на что не влияет - работает и с ней и без нее. POST-данные никакие не отправлял, только добавил одну строчку
Code:
$payload = base64_encode($payload);
и все заработало
member
Activity: 108
Merit: 12
September 24, 2015, 09:20:25 AM
#4
Без разницы. Да и зачем убирать, если убрать то json-данные будут
Code:
{
 "request": "\/v1\/account_infos",
 "nonce": "1234"
}
если не убирать, то будет аналогично как в примере на https://www.bitfinex.com/pages/api
Code:
{
 "request": "/v1/account_infos",
 "nonce": "1234"
}

А все ж уберите. Ваш вариант тоже вполне валидный JSON, но при обработке может неправильно раскодироваться.

И предположу, что проблема может оказаться в том, что вы им ваш JSON фактически не посылаете.

В описании они намекают на то, что JSON ожидается в payload POST-запроса (т.е. нужно сделать что-нибудь вроде:
Code:
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);

А что касается X-BFX-PAYLOAD хедера, то это у них для аутентификации, и в этом поле ожидается то, что вы подготовили (payload), еще и свернутое base64:

payload = parameters-dictionary -> JSON encode -> base64
signature = HMAC-SHA384(payload, api-secret) as hexadecimal
send (api-key, payload, signature)


И для основы подписи для X-BFX-SIGNATURE тоже ожидается payload в base64.
newbie
Activity: 24
Merit: 0
September 24, 2015, 09:04:44 AM
#3
Без разницы. Да и зачем убирать, если убрать то json-данные будут
Code:
{
 "request": "\/v1\/account_infos",
 "nonce": "1234"
}
если не убирать, то будет аналогично как в примере на https://www.bitfinex.com/pages/api
Code:
{
 "request": "/v1/account_infos",
 "nonce": "1234"
}
member
Activity: 108
Merit: 12
September 24, 2015, 08:54:44 AM
#2
Вот это уберите:

$payload = str_replace("\/", "/", $payload);

...и инвалиды отстанут.
newbie
Activity: 24
Merit: 0
September 24, 2015, 08:22:29 AM
#1
Пытаюсь создать PHP-скрипт для API биржи https://www.bitfinex.com
Прошу помочь тем кто знаком с API этой биржи.
На сайте биржи есть документация https://www.bitfinex.com/pages/api (с пояснениями, но без примеров целого скрипта, как на других биржах). Делаю все вроде по этим инструкциям, но получаю ошибку. Я создал на бирже ключи, написал скрипт, но получаю такую ошибку:
Code:
{"message":"Invalid json."}
Вот сам скрипт
Quote
$key = ""; // Ключ
$secret = ""; // Секретный ключ

// Формирование массива с данными
$arr = array();
$arr["request"] = "/v1/account_infos";
$arr["nonce"] = time()."";

// Кодирование данных в JSON-формат
$payload = json_encode($arr);
$payload = str_replace("\/", "/", $payload);

// Хеширование
$signature = hash_hmac("sha384", $payload, $secret);

// Формирование массива c заголоавками headers
$headers = array();
$headers[0] = "X-BFX-APIKEY: $key";
$headers[1] = "X-BFX-PAYLOAD: $payload";
$headers[2] = "X-BFX-SIGNATURE: $signature";

// Запрос
$ch = curl_init("https://api.bitfinex.com/v1/account_infos");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$resultat = curl_exec($ch);

// Вывод результата
echo $resultat;
?>
В документации на сайте сказано что, к примеру, для создания нового ордера нужно делать запрос на адрес https://api.bitfinex.com/v1/order/new и формировать json такого типа
Code:
{
 "request": "/v1/order/new",
 "nonce": "1234",
 "option1": ...
}
Я для начала, чтобы не ошибиться с параметрами ("option1": ... и т. д.) взял такой запрос где параметры не нужны - это информационный запрос на адрес https://api.bitfinex.com/v1/account_infos
По аналогии с приведенным выше примером, json должен быть таким
Code:
{
 "request": "/v1/account_infos",
 "nonce": "1234"
}
В скрипте выше он такой и есть, с учетом того что параметр "nonce" при каждом запросе увеличивается, но ответ приходит
Code:
{"message":"Invalid json."}
В коде выше я, разумеется, удалил свои ключи.
Как модифицировать этот скрипт чтобы в него можно было в самом начале добавить свои ключи и в результате получался правильный api-запрос на https://api.bitfinex.com/v1/account_infos
Или может быть у кого-то есть другой готовый скрипт, в котором можно было бы только добавить свои ключи и сделать какой-либо корректный запрос через API на биржу bitfinex.com?
Jump to: