новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Форум

Обсуждение к заданию: Подключиться к бирже cryptopia.co.nz через 1с

    • #1
    • 23.03.2018 19:12
    0
    Помогите подключиться к бирже cryptopia.co.nz через API из 1с 8, с аналогичным кодом к другим биржам получается, а тут пишет "Signature does not match request parameters". Надо найти оши...  Подробнее>>
    • #2
    • 23.03.2018 19:13
    • Отредактировано: 23.03.2018 19:19:10
    0
    СчетчикNonce = 0;
    ТипЗапроса = "БалансПары";
    //ТипЗапроса = "ИсторияТоргов";

    КлючApi = "тут ключ";
    СекрКлючApi = "тут секретный ключ";

    Если ТипЗапроса = "БалансПары" Тогда
    Nonce = ПолучитьNonce(ТекущаяДата());
    Параметр = "Currency";
    ЗначениеПараметра = "BTC";
    СтруктураПараметров = Новый Соответствие;
    СтруктураПараметров.Вставить(Параметр, ЗначениеПараметра);
    СтрПарам_JSON = JSON_парсер.ЗаписатьJSON_(СтруктураПараметров, Ложь);
    //ЗашифрПар_JSON = Шифрование.СоздатьСтрокуBase64(Шифрование.MD5ХешСтрока(Шифрование.ПолучитьДвоичныеДанныеИзСтроки(СтрПарам_JSON)));
    ЗашифрПар_JSON = "aJUHUoqZt1zx7MZcD0ndCw=="; // в питоне выходной параметр в итоге взял. в 1с не смог получить такой
    НашЗапрос = КлючApi + "POST" + URLEncode("https://www.cryptopia.co.nz/api/getbalance") + Nonce + ЗашифрПар_JSON;
    ДопHTTP = "/getbalance";
    КонецЕсли;

    ФайлЗапроса = ПолучитьИмяВременногоФайла() + ".bot";
    ФайлОтвета = ПолучитьИмяВременногоФайла() + ".bot";
    //ХешЗапрос = Шифрование.ЗашифроватьSHA256(НашЗапрос, Шифрование.Decode64(СекрКлючApi));
    ТипhexBinary = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "hexBinary");
    ДвДанныеСекр = Base64Значение(СекрКлючApi);
    ДвоичныеДанные = ФабрикаXDTO.Создать(ТипhexBinary,ДвДанныеСекр);
    ХешЗапрос = HMAC(ДвоичныеДанные.ЛексическоеЗначение, НашЗапрос, "SHA256");
    //ХешЗапрос = Шифрование.ПолучитьДвоичныеДанныеИзСтроки(ХешЗапрос);
    //ХешЗапрос = Шифрование.СоздатьСтрокуBase64(ХешЗапрос);

    Если ХешЗапрос = "" Тогда
    Возврат;
    КонецЕсли;
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type", "application/json; charset=utf-8");
    ЗаголовокHTTP.Вставить("Authorization", "amx " + КлючApi+ ":" + ХешЗапрос+ ":" + Nonce);

    Текст = Новый ЗаписьТекста(ФайлЗапроса, КодировкаТекста.UTF8, "");
    Текст.ЗаписатьСтроку(НашЗапрос);
    Текст.Закрыть();
    SSL = Новый ЗащищенноеСоединениеOpenSSL(Неопределено, Неопределено);
    Попытка
    //Вариант 1
    НТТР = Новый HTTPСоединение("www.cryptopia.co.nz/api/",,,,,,Новый ЗащищенноеСоединениеOpenSSL());
    НТТР.ОтправитьДляОбработки(ФайлЗапроса, ДопHTTP, ФайлОтвета, ЗаголовокHTTP);

    //Вариант 2
    //НТТР = Новый HTTPСоединение(АктивнаяБиржа.ApiСтрокаЗапросов,,,,,5, SSL);
    //ЗапросHTTP = Новый HTTPЗапрос(АктивнаяБиржа.ApiСтрокаЗапросов, ЗаголовокHTTP);
    //ЗапросHTTP.УстановитьИмяФайлаТела(ФайлЗапроса); //Устанавливает имя файла, из которого будет прочитано тело POST-запроса.
    //ЗапросHTTP.УстановитьТелоИзСтроки(НашЗапрос, КодировкаТекста.UTF8);
    //ОтветHTTP = НТТР.ОтправитьДляОбработки(ЗапросHTTP);
    //СтрокаОтвета = ОтветHTTP.ПолучитьТелоКакСтроку();
    //Сообщить(СтрокаОтвета);
    Исключение
    //Сообщить("Отпал инет");
    КонецПопытки;

    //Чтение файла-ответа
    Файл = Новый Файл(ФайлОтвета);
    Если Файл.Существует() Тогда
    ТекстОтвета = Новый ТекстовыйДокумент();
    ТекстОтвета.Прочитать(ФайлОтвета);
    Если ТекстОтвета.КоличествоСтрок() > 0 Тогда
    ОтветСервера = ТекстОтвета.ПолучитьТекст();
    #Если Клиент Тогда
    Сообщить(ОтветСервера);
    ВыполнитьJSON(ОтветСервера);
    #КонецЕсли
    Иначе
    #Если Клиент Тогда
    Сообщить("Отправка файла на сервер: Получен пустой ответ сервера.");
    #Иначе
    ЗаписьЖурналаРегистрации("HTTPСоединение", УровеньЖурналаРегистрации.Ошибка, , , "Получен пустой ответ сервера.");
    #КонецЕсли
    КонецЕсли;
    КонецЕсли;

    //Разрушаем объект HTTP-запроса для освобождения файла POST-запроса.
    //В противном случае при попытке удаления файла получим ошибку совместного доступа.
    ЗапросHTTP = Неопределено;

    //Удаляем файлы POST-запроса и фрагменты сообщения. Больше они не нужны.
    УдалитьФайлы(ФайлЗапроса);
    УдалитьФайлы(ФайлОтвета);

    Если ОтветСоответствие = Неопределено или ОтветСервера = Неопределено Тогда
    Возврат;
    КонецЕсли;
Для участия в обсуждении Вам необходимо авторизоваться либо   зарегистрироваться