Bitcoin Forum
June 20, 2024, 03:02:06 PM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: API для биржи bitfinex.com (PHP)  (Read 3659 times)
gerzikon (OP)
Newbie
*
Offline Offline

Activity: 24
Merit: 0


View Profile
September 24, 2015, 01:22:29 PM
 #1

Пытаюсь создать PHP-скрипт для API биржи https://www.bitfinex.com
Прошу помочь тем кто знаком с API этой биржи.
На сайте биржи есть документация https://www.bitfinex.com/pages/api (с пояснениями, но без примеров целого скрипта, как на других биржах). Делаю все вроде по этим инструкциям, но получаю ошибку. Я создал на бирже ключи, написал скрипт, но получаю такую ошибку:
Code:
{"message":"Invalid json."}
Вот сам скрипт
Quote
<?php
$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?
cryptodev
Member
**
Offline Offline

Activity: 108
Merit: 12


View Profile
September 24, 2015, 01:54:44 PM
 #2

Вот это уберите:

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

...и инвалиды отстанут.
gerzikon (OP)
Newbie
*
Offline Offline

Activity: 24
Merit: 0


View Profile
September 24, 2015, 02:04:44 PM
 #3

Без разницы. Да и зачем убирать, если убрать то json-данные будут
Code:
{
 "request": "\/v1\/account_infos",
 "nonce": "1234"
}
если не убирать, то будет аналогично как в примере на https://www.bitfinex.com/pages/api
Code:
{
 "request": "/v1/account_infos",
 "nonce": "1234"
}
cryptodev
Member
**
Offline Offline

Activity: 108
Merit: 12


View Profile
September 24, 2015, 02:20:25 PM
 #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.
gerzikon (OP)
Newbie
*
Offline Offline

Activity: 24
Merit: 0


View Profile
September 24, 2015, 05:01:07 PM
 #5

Спасибо, разобрался. Строчка с "str_replace" ни на что не влияет - работает и с ней и без нее. POST-данные никакие не отправлял, только добавил одну строчку
Code:
$payload = base64_encode($payload);
и все заработало
Deres
Hero Member
*****
Offline Offline

Activity: 504
Merit: 500


View Profile
September 24, 2015, 08:55:53 PM
 #6

Все решили а я зря топик читал(
gerzikon (OP)
Newbie
*
Offline Offline

Activity: 24
Merit: 0


View Profile
September 25, 2015, 04:04:38 AM
 #7

Все решили а я зря топик читал(
Для вас тоже занятие найдется)
То что в этой теме решили, но появилась другая проблема. Поскольку она уж очень специфическая (только для тех кто сам пользуется API этой биржи), я ее описал в этом сообщении в топике биржи Bitfinex
hazarun
Legendary
*
Offline Offline

Activity: 2128
Merit: 1019


View Profile
September 25, 2015, 07:51:03 PM
 #8

Все решили а я зря топик читал(
Для вас тоже занятие найдется)
То что в этой теме решили, но появилась другая проблема. Поскольку она уж очень специфическая (только для тех кто сам пользуется API этой биржи), я ее описал в этом сообщении в топике биржи Bitfinex

Заметим, что проблема - еще более специфическа, чем Вы отметили.
Еще нужно, не просто пользоваться АПИ этой биржи, а разбираться именно в АПИ + ПХП.  ))
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!