|   |   | 
| 
 | Подскажите пожалуйста по выполнению 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 он явно не знает.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |