Имя: Пароль:
1C
1С v8
Подскажите пожалуйста по выполнению Java функции в 1с
,
0 fly7
 
22.04.15
12:35
пишу так

    ScrptCtrl = новый COMОбъект("MSScriptControl.ScriptControl");
    ScrptCtrl.Language="JScript";
    ScrptCtrl.AddCode("
        |apiSignature(String userId, String key, String nonce, String secret) throws Exception
        |{
        |    String data = userId+key+nonce;
        |    Mac hmacSha256 = Mac.getInstance('HmacSHA256');
        |    SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), 'HmacSHA256');
        |    hmacSha256.init(secretKey);
        |    return Hex.encodeHexString(hmacSha256.doFinal(data.getBytes())).toUpperCase();
        |}");
        
    signature = ScrptCtrl.Eval("apiSignature('" + userid + "'," + api_key + "'," + nonce + "'," + secret + "')");


выдает ошибку
{ВнешняяОбработка.ПолучитьВокеров.МодульОбъекта(55)}: Ошибка при вызове метода контекста (AddCode)
    ScrptCtrl.AddCode("
по причине:
Произошла исключительная ситуация (Ошибка компиляции Microsoft JScript): Предполагается наличие ')'
1 Лефмихалыч
 
22.04.15
12:43
(0) А кто тебе сказал, что MSScriptControl в сосотянии выполнять код Java? Он может выполнить JavaScript или VB, но ни как не Java

Ну и причина синтаксической ошибки в том, что внутри строки кавычки нужно дублировать:



ПереМенная = "вот сейчас будет кавычка ""внутри"" строки"
2 TStan
 
22.04.15
12:54
JS <> Java, или в заголовке очепятка?
3 fly7
 
22.04.15
12:58
(2) Java
мне надо получить сигнатуру, путем шифрования с секретом
на сайте дана такая функция

Example (Java):

public static String apiSignature(String userId, String key, String nonce, String secret) throws Exception {
    String data = userId+key+nonce;
    Mac hmacSha256 = Mac.getInstance("HmacSHA256");
    SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256");
    hmacSha256.init(secretKey);
    return Hex.encodeHexString(hmacSha256.doFinal(data.getBytes())).toUpperCase();
}
4 Garykom
 
гуру
22.04.15
13:00
(3) код java можно установив java машину выполнять практически на любой железке

т.е. выкинь "MSScriptControl"
5 Garykom
 
гуру
22.04.15
13:01
(4)+ правильно будет наваять на java (раз есть код частично готовый) прогу (консольную) и вызывать/запускать ее с параметрами из 1С, потом результат откуда нуна забирать
6 Лефмихалыч
 
22.04.15
13:02
(3) ты это можешь выполнить из 1С только путем КомандаСистемы("javac.exe path\to\applet")

MSScriptControl это выполнить не может
7 Garykom
 
гуру
22.04.15
13:03
(5)+ да эту прогу на java наваянную раз 1С 8.X засунуть в двоичные данные еще можно и перед запуском сохраняешь в темп и там запускаешь
8 fly7
 
22.04.15
14:24
Рассчитал подпись на одном онлайн сайте, отправил ее на мой сервер, а он все равно отвечает

{"code":-7,"message":"Signature error"}

отправляю так
    signature = МодульBTCE.ЗашифроватьSHA256(userId + api_key + nonce, secret);
    
    ПостСообщение =
        "key=" + api_key +
        "&nonce=" + nonce +
        "&signature=" + signature;//+
    //    "&pageEnable=0" +
    //    "&page=1" +
    //    "&pageSize=100";
        
    ИмяФайлаИсх = ПолучитьИмяВременногоФайла();
    ДлинаСообщения = МодульBTCE.ЗаписатьСтрокуВФайлUTF8безBOM(ИмяФайлаИсх, ПостСообщение);
    
    HTTPЗапрос = Новый HTTPЗапрос;
    //HTTPЗапрос.АдресРесурса = "api/workers.htm";
    HTTPЗапрос.АдресРесурса = "api/poolStats.htm";
    HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded");
    HTTPЗапрос.Заголовки.Вставить("Content-Length", ДлинаСообщения);
    HTTPЗапрос.УстановитьИмяФайлаТела(ИмяФайлаИсх);
    
    Соединение = Новый HTTPСоединение("antpool.com",,,,, 5, Новый ЗащищенноеСоединениеOpenSSL);
    ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
    Ответ = ОтветHTTP.ПолучитьТелоКакСтроку();
9 fly7
 
22.04.15
14:25
в чем может быть косяк? спросить у китайцев не получается
10 Лефмихалыч
 
22.04.15
14:31
(9) в чем косяк-то?
11 fly7
 
22.04.15
15:01
косяк в том, что API отвечает что не верная сигнатура

{"code":-7,"message":"Signature error"}

хотя я ее рассчитал в онлайн шифровальщике, с моим расчетом полностью совпадает
12 Torquader
 
23.04.15
00:53
А в 1С, насколько я помню, есть обращение к криптопровайдерам.

Потом, не забываем, что все сигнатуры требуют, чтобы строки были в кодировке UTF-8, а не двухбайтовые, как в 1С, JavaScript и т.п.

P.S. можно скачать библиотеку javascript с генератором подписей и перевести её на 1С.
(У меня, например, где-то sha256 на VbScript валяется - сам писал - ничего там сложного нет).
13 Котокот
 
23.04.15
01:00
Sha256 можно получить средствами 1С (если речь идёт именно об этом)
14 Torquader
 
23.04.15
01:14
(13) Да у него всё равно там в кавычках ошибка, да и про метод Call он явно не знает.