Пишу бота

xpycteamset
На сайте с 05.10.2009
Offline
129
772

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

У биржи есть API, получить необходимые данные оказалось достаточно просто, а отправить им данные достаточно сложно (по крайней мере для меня).

Подсобите, четвертый день и третью ночь мучаю блокнот.

Их саппорт молчит как партизан :gm:

Вариант стандартного скриптика

<?php 

$mt = explode(' ', microtime());
$NONCE = $mt[1] . substr($mt[0], 2, 6);

// API settings
$key = "Секретный ключ";
$secret = "Секретный ключ 2";

$url = "https://api.exmo.com/v1/order_cancel";

$req['nonce'] = $NONCE;

// generate the POST data string
$post_data = http_build_query($req, '', '&');

$sign = hash_hmac('sha512', $post_data, $secret);

// generate the extra headers
$headers = array(
'Sign: ' . $sign,
'Key: ' . $key,
);

// our curl handle (initialize if required)
static $ch = null;
if (is_null($ch)) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; PHP client; ' . php_uname('s') . '; PHP/' . phpversion() . ')');
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
$res = curl_exec($ch);
if ($res === false) throw new Exception('Could not get reply: ' . curl_error($ch));
$dec = json_decode($res, true);
if ($dec === null)
throw new Exception('Invalid data received, please make sure connection is working and requested API exists');

$obj = json_decode($res,true);
print_r ($obj);

?>

А мне например надо закрыть ордер и я должен передать примерно следующее:

	

api_query("order_cancel", Array(
"order_id"=>104235
));
//104235 - ID ордера

Разумом понимаю что наверное надо через CURLOPT_POSTFIELDS, но как правильно строку составить?

[umka]
На сайте с 25.05.2008
Offline
456
#1

Неужели в примерах к API нет готового кода?

Функцию api_query() вы откуда взяли?

Чтобы передать параметры POST-ом в вашем коде, их нужно добавить в массив $req.

Ну и ещё включить опцию:

curl_setopt($ch, CURLOPT_POST, true);

Лог в помощь!
xpycteamset
На сайте с 05.10.2009
Offline
129
#2
[umka:
]Неужели в примерах к API нет готового кода?

Достаточно скудное описание к API там.

[umka:
]Функцию api_query() вы откуда взяли?

Из примера.

[umka:
]Ну и ещё включить опцию:
curl_setopt($ch, CURLOPT_POST, true);

По интернету вычитал что если если CURLOPT_POSTFIELDS, то CURLOPT_POST не нужен, поэтому и не писал.

[umka:
]Чтобы передать параметры POST-ом в вашем коде, их нужно добавить в массив $req.

Вставлял, но выдает белую страницу

$req['nonce'] = $NONCE, "order_id: 496173233";

В чем я здесь накасячил? Ошибки включены, просто пустая страница.

[umka]
На сайте с 25.05.2008
Offline
456
#3
xpycteamset:
В чем я здесь накасячил?

Вы должны в POST_FIELDS передать массив с параметрами для POST.

Поищите в интернете примеры, как в PHP задаются массивы.

Сделвйте вывод массива $req и посмотрите, что у вас в нём.

А то пока у меня создаётся ощущение, что "бота" пишу я :)

S
На сайте с 30.09.2016
Offline
469
#4
xpycteamset:
$req['nonce'] = $NONCE, "order_id: 496173233";

В чем я здесь накасячил?

Накосячил в том, что написал полную ахинею. При таком уровне программирования даже непонятно, что и советовать. Не освоены основы языка.

Отпилю лишнее, прикручу нужное, выправлю кривое. Вытравлю вредителей.
xpycteamset
На сайте с 05.10.2009
Offline
129
#5
[umka:
;15449710]Поищите в интернете примеры, как в PHP задаются массивы.

Не ну тут достаточно все просто:

делал в двух вариантах

$order_cancel['order_cancel'] = array("order_id"=>"496173233");
$order_cancel['order_id']="496173233";

По print_r (); все выдает хорошо.

Но как только вставляю в $req пустая страница. и не показывает что в нем.

$req['nonce'] = $NONCE, $order_cancel['order_cancel'];
$req['nonce'] = $NONCE, $order_cancel['order_id'];



---------- Добавлено 27.01.2018 в 16:21 ----------

Во я...

$req['nonce'] = $NONCE;

$req['order_id'] = '496173233';

И все заработало

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий