Сообщение на форуме
23 марта 2018 в 19:13:56
Счетчик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-запроса и фрагменты сообщения. Больше они не нужны.
УдалитьФайлы(ФайлЗапроса);
УдалитьФайлы(ФайлОтвета);
Если ОтветСоответствие = Неопределено или ОтветСервера = Неопределено Тогда
Возврат;
КонецЕсли;