Перейти к публикации

Рекомендованные сообщения

Добрый день!

Не удается сформировать POST запрос,  выдает ошибку "signature verification failed"

GET запросы и авторизация отрабатывают нормально.

Может кто уже сталкивался с такой проблемой?

 

Процедура Запрос()
    
    apikey    = "";
    apisecret = "";
    method = "/v1/order";
    server = "api.kucoin.com";
    ПутьЗапроса = method;

    nonce = Формат(((УниверсальноеВремя(ТекущаяДата()) - дата(1970,1,1,1,0,0))+1*60*60)*1000, "ЧГ=0");
    
    ЗаголовокHTTP = Новый Соответствие(); 
    ЗаголовокHTTP.Вставить("content-type", "application/x-www-form-urlencoded;");
    
    SSL = Новый ЗащищенноеСоединениеOpenSSL;
    HTTPСоединение = Новый HTTPСоединение(server,,,,,,SSL);
    
    ТелоЗапроса = "";
    
    СтрокаПараметров = "amount=2&price=0.00019&symbol=KCS-BTC&type=sell";
    
    signature   = ПутьЗапроса+"/"+nonce+"/"+СтрокаПараметров;

    ТелоЗапроса = СтрокаПараметров; 


    payload = signature;
    payload = Base64Строка(ПолучитьДвоичныеДанныеИзСтроки(payload, КодировкаТекста.UTF8));
    sign=hash_hmac_sha256(payload,apisecret);
    
    ЗаголовокHTTP.Вставить("KC-API-SIGNATURE", sign);
    ЗаголовокHTTP.Вставить("KC-API-KEY", apikey);
    ЗаголовокHTTP.Вставить("KC-API-NONCE", nonce);
    ЗаголовокHTTP.Вставить("Connection", "Keep-alive");
    ЗаголовокHTTP.Вставить("GET", ПутьЗапроса + " HTTP/1.1");
    ЗаголовокHTTP.Вставить("Host", server);
    ЗаголовокHTTP.Вставить("User-Agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64)");

    ЗаголовокHTTP.Вставить("Accept-Charset", "utf-8");
    ЗаголовокHTTP.Вставить("Accept", "application/json, text/javascript, */*; q=0.01");

    

Запрос = Новый HTTPЗапрос(ПутьЗапроса, ЗаголовокHTTP);
    
    Попытка
    Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
    HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(Запрос);
Исключение
    КонецПопытки;
    
   Ошибка = ИнформацияОбОшибке();

   HTTPОтвет = Новый Структура("КодСостояния, Описание", 500, Ошибка.Причина.Описание);
   Состояние(HTTPОтвет.Описание);

КонецПроцедуры

 

Функция hash_hmac_sha256(Строка, СекретныйКлюч,base64 = Ложь)
    Текст = Новый COMОбъект("System.Text.UTF8Encoding");
    Криптография = Новый COMОбъект("System.Security.Cryptography.HMACSHA256");
    Криптография.Key = Текст.GetBytes_4(СекретныйКлюч);
    Если base64 Тогда
        ТекстASCII = Новый COMОбъект("System.Text.ASCIIEncoding");
        ХешБайт = Криптография.ComputeHash_2(ТекстASCII.GetBytes_4(Строка)).Выгрузить();
    Иначе
        ХешБайт = Криптография.ComputeHash_2(Текст.GetBytes_4(Строка)).Выгрузить();
    КонецЕсли;
    Хеш = ConvToHexString(ХешБайт);
    Возврат Хеш;
КонецФункции

 

Функция ConvToHexString(ХешБайт)
    
    Соотв16 = Новый Соответствие;
    Соотв16.Вставить(0 , "0");
    Соотв16.Вставить(1 , "1");
    Соотв16.Вставить(2 , "2");
    Соотв16.Вставить(3 , "3");
    Соотв16.Вставить(4 , "4");
    Соотв16.Вставить(5 , "5");
    Соотв16.Вставить(6 , "6");
    Соотв16.Вставить(7 , "7");
    Соотв16.Вставить(8 , "8");
    Соотв16.Вставить(9 , "9");
    Соотв16.Вставить(10, "a");
    Соотв16.Вставить(11, "b");
    Соотв16.Вставить(12, "c");
    Соотв16.Вставить(13, "d");
    Соотв16.Вставить(14, "e");
    Соотв16.Вставить(15, "f");
    
    Хеш = "";
    Для Каждого Байт Из ХешБайт Цикл
        Чс = Цел(Байт/16);
        Хеш = Хеш + Прав("0" + Соотв16.Получить(Чс) + Соотв16.Получить(Байт-Чс*16), 2);
    КонецЦикла;
    
    Возврат Хеш;

КонецФункции
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

О! Мсье знает толк в извращениях!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, barrer29 сказал:

Все спасибо, разобрался.

Может быть всем расскажете?

 Вдруг на форум зайдет другой крипто-1С-энтузиаст с подобным вопросом? 🙂 

На ваше усмотрение, разумеется.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На самом деле все оказалось просто, перед хешированием данных, удалить лишние символы у кодированной строки, конкретно символы перевода строки. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×