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