Пишут для доступа к данному API требуется авторизация и необходимо использовать POST метод.
URL — необходимо использовать следующий адрес https://api.exmo.com/v1/{api_name} где api_name - это наименование API метода
Авторизация осуществляется с помощью отправки на сервер следующих заголовков:
Key — Публичный ключ, его нужно взять настройках профиля пользователя
(пример: K-7cc97c89aed2a2fd9ed7792d48d63f65800c447b)
Sign — POST данные (param=val¶m1=val1), подписанные секретным ключом методом HMAC-SHA512, секретный ключ также нужно брать в настройках профиля пользователя
Мой код:
apikey = "K-565a352c53b772281ca10a9b9652114ea62c06c0";
apisecret = "S-3855d9a2915e4793e3fc5410a06b53e547263335 12";
ИмяФайлаВх = ПолучитьИмяВременногоФайла();
ИмяФайлаИсх = ПолучитьИмяВременногоФайла();
Сигнатура = HMAC_SHA512(apisecret, ПостСообщение); // функцию где-то нарыл в инете
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Sign", Сигнатура);
ЗаголовокHTTP.Вставить("Key", apikey);
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded;");
SSL = Новый ЗащищенноеСоединениеOpenSSL;
HTTP = Новый HTTPСоединение("api.exmo.com/v1/user_info",,,,,5,SSL);
// вот здесь не понятно, нужно ли писать просто имя "api.exmo.com" или "api.exmo.com/v1/user_info", не понятно куда нужно впихнуть имя метода user_info к примеру
Ответ = HTTP.ОтправитьДляОбработки(ИмяФайлаИсх, "/tapi", ИмяФайлаВх, ЗаголовокHTTP);
Показать
При подключении выдает что не подключился...
Вот небольшой набросок попытки подключения к АПИ, подскажите пожалуйста, что я делаю не так, и куда копать..
Функция ВызовФункцииAPIЭксмо(СЗ)
Результат = "";
apikey = "";
apisecret = "";
ИмяФайлаВх = ПолучитьИмяВременногоФайла() + ".bot";
ИмяФайлаИсх = ПолучитьИмяВременногоФайла() + ".bot";
ПостСообщение = "method=user_info&nonce="+ПолучитьНонс();
ПостСообщение = "nonce="+ПолучитьНонс();
Если ТипЗнч(СЗ) = Тип("Строка") Тогда
ПостСообщение = ПостСообщение + "&" + СЗ;
Иначе
Для Каждого ЭлСЗ Из СЗ Цикл
ПостСообщение = ПостСообщение + "&" + ЭлСЗ.Представление + "=" + ЭлСЗ.Значение;
КонецЦикла;
КонецЕсли;
БинПостСообщение = "";
Сигнатура = HMAC_SHA512(apisecret, ПостСообщение);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Sign", Сигнатура);
ЗаголовокHTTP.Вставить("Key", apikey);
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
Текст = Новый ЗаписьТекста(ИмяФайлаВх, КодировкаТекста.ANSI, "");
Текст.ЗаписатьСтроку(ПостСообщение);
Текст.Закрыть();
SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
Попытка
HTTP = Новый HTTPСоединение("api.exmo.me",,,,,, SSL);
HTTP.ОтправитьДляОбработки(ИмяФайлаВх, "v1/"+СЗ, ИмяФайлаИсх, ЗаголовокHTTP);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
// работает как на сервере, так и на клиенте
Текст = Новый ЧтениеТекста(
ИмяФайлаИсх, // имя
КодировкаТекста.ANSI, // кодировка
Символы.ПС, // разделитель строк (необ.)
,
Истина // монопольный режим (необ.)
);
// читаем пока есть что читать
Пока Истина Цикл
Строка = Текст.ПрочитатьСтроку();
Если Строка = Неопределено Тогда
Прервать;
Иначе
Результат = Строка;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
Процедура БалансЭксмоНажатие(Элемент)
Результат = ВызовФункцииAPIЭксмо("user_info");
Сообщить(Результат);
КонецПроцедуры
походу косяк где-то здесь
Sign — POST данные (param=valm1=val1), подписанные секретным ключом методом HMAC-SHA512, секретный ключ также нужно брать в настройках профиля пользователя
пробовал через post менеджеры сначала отработать?
например postman для хрома
и у тебя в коде где вызываются и какой метод ? trades, order_book , ticker , pair_settings, currency
для некоторых методов есть параметры pair, limit для некоторых они отсутствуют
и подпись должна быть что то вроде
SSL = Новый ЗащищенноеСоединениеOpenSSL(НовыйСертификатКлиентаФайл("C:\c\User1614.p12",ПарольСер));
технически при вызове HTTP.ОтправитьДляОбработки(HTTPЗапрос);
платформа сама подпишет запрос и не нужно HMAC_SHA512(apisecret, ПостСообщение);
Функция ВызовФункцииAPIЭксмо(СЗ)
Результат = "";
apikey = "";
apisecret = "";
ИмяФайлаВх = ПолучитьИмяВременногоФайла() + ".bot";
ИмяФайлаИсх = ПолучитьИмяВременногоФайла() + ".bot";
ПостСообщение = "method=user_info&nonce="+ПолучитьНонс();
ПостСообщение = "nonce="+ПолучитьНонс();
Если ТипЗнч(СЗ) = Тип("Строка") Тогда
ПостСообщение = ПостСообщение + "&" + СЗ;
Иначе
Для Каждого ЭлСЗ Из СЗ Цикл
ПостСообщение = ПостСообщение + "&" + ЭлСЗ.Представление + "=" + ЭлСЗ.Значение;
КонецЦикла;
КонецЕсли;
БинПостСообщение = "";
Сигнатура = HMAC_SHA512(apisecret, ПостСообщение);
ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Sign", Сигнатура);
ЗаголовокHTTP.Вставить("Key", apikey);
ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");
Текст = Новый ЗаписьТекста(ИмяФайлаВх, КодировкаТекста.ANSI, "");
Текст.ЗаписатьСтроку(ПостСообщение);
Текст.Закрыть();
SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
Попытка
HTTP = Новый HTTPСоединение("api.exmo.me",,,,,, SSL);
HTTP.ОтправитьДляОбработки(ИмяФайлаВх, "v1/"+СЗ, ИмяФайлаИсх, ЗаголовокHTTP);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
// работает как на сервере, так и на клиенте
Текст = Новый ЧтениеТекста(
ИмяФайлаИсх, // имя
КодировкаТекста.ANSI, // кодировка
Символы.ПС, // разделитель строк (необ.)
,
Истина // монопольный режим (необ.)
);
// читаем пока есть что читать
Пока Истина Цикл
Строка = Текст.ПрочитатьСтроку();
Если Строка = Неопределено Тогда
Прервать;
Иначе
Результат = Строка;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Показать
Процедура БалансЭксмоНажатие(Элемент)
Результат = ВызовФункцииAPIЭксмо("user_info");
Сообщить(Результат);
КонецПроцедуры
там при передаче сигнатуры выходит такая ошибка:
Сигнатура: 22cc6b2e0cd00f701d9d5510a6e5d4a6a67f9e5a61d7f8e4a203d3ae81b9ae2b
{"code":-1100,"msg":"Illegal characters found in parameter 'signature'; legal range is '^[A-Fa-f0-9]{64}$'."}
вроде как нету ее, от A-F, от 0-9, 64 символа...
но там get запрос, может быть что-то с кодировкой при передаче запроса?
(18) пока вроде нормально, потихоньку по 10% делает, но есть риски...я хочу на арбиртраж настроить, между несколькими биржами...тогда безрисково на разнице курсов
(18) бот не сложный, главное подключиться к нему, а так просто, я на бинансе сделал, там sha256, и немного по другому, get запросами...
хочу на эксмо тоже подключиться... и между биржами гонять
(20)
Добрый день!
Подскажите пожалуйста, удалось подключиться к EXMO и баланс вернуть?
У меня в результате приведенного кода возникает ошибка:
Error 40005: Authorization error, Incorrect signature.
Помогите, куда копать? В результате успеха обещаю вознаграждение.
Добрый день!
Подскажите пож-та как создается ордер на покупку/продажу.
Баланс выводит. получаю баланс приблизительно так -
Сообщить(ВызовФункцииAPIЭксмо("user_info")["balances"]["USD"]); Как правильно создать ордер, как правильно передать параметры в функцию?
ВызовФункцииAPIЭксмо("order_create"), но помимо "order_create" нужно еще передать массив
"pair"=>"BTC_USD",
"quantity"=>3,
"price"=>100,
"type"=>"buy" этот момент пока непонятен.
Спасибо заранее.
Добрый день!
Подскажите пож-та как создается ордер на покупку/продажу.
Баланс выводит. получаю баланс приблизительно так -
Сообщить(ВызовФункцииAPIЭксмо("user_info")["balances"]["USD"]);
Как правильно создать ордер, как правильно передать параметры в функцию?
ВызовФункцииAPIЭксмо("order_create"), но помимо "order_create" нужно еще передать массив
"pair"=>"BTC_USD",
"quantity"=>3,
"price"=>100,
"type"=>"buy"
этот момент пока непонятен.
Спасибо заранее.
В общем, сам спросил и сам решил проблему)
немного переписал функцию ВызовФункцииAPIЭксмо. теперь вызов выглядит так ВызовФункцииAPIЭксмо(API_metod, API_param)