Имя: Пароль:
1C
1С v8
Подключение библиотеки mesprowrp.dll
0 busy1
 
25.12.20
16:22
Добрый день. Необходимо использовать mesprowrp.dll для интеграции с ПС Contact. Библиотеку подключил успешно. Но при попытки подписать, подпись не формирует. Может быть кто то имеет успешный опыт использования этой библиотеки. Поделитесь кодом, пожалуйста.
Вот мой пример:
Функция СоздатьПодпись(strBuffer)
    
    strBuffer = "This Unicode string has 2 characters outside the ASCII range";    
    ДвоичныеДанные = ПолучитьДвоичныеДанныеИзСтроки(strBuffer,КодировкаТекста.UTF8,Истина);
    Buffer = Base64Строка(ДвоичныеДанные);
    
    SignObj = Новый COMОбъект("System.Object");
    Cryptor = Новый COMОбъект("MesProWrp.ContactCryptor");
    Cryptor.IsBase64 = True;    
    Signature = Cryptor.Sign(Buffer,SignObj);
    Возврат Signature;
    
КонецФункции
1 acht
 
25.12.20
16:45
Традиционный вопрос - а что по этому говорит автор этой dll?
2 busy1
 
25.12.20
16:47
Автор говорит, что всё ОК. Все работает.
3 acht
 
25.12.20
16:49
(2) И, наверно, показывает это на конкретных примерах?
4 busy1
 
25.12.20
16:50
Да только эти примеры в exe и не фига не 1с
5 acht
 
25.12.20
16:51
(4) Тогда откуда ожидание, что это вообще подключается к 1С?
6 b_ru
 
25.12.20
16:55
А что это за SignObj такой пустой и зачем он Cryptor'у нужен? Наверное в нем же должен быть "This Unicode string has 2 characters outside the ASCII range", а сейчас там пустота
7 busy1
 
25.12.20
17:02
Есть документация:
function Sign(constBuffer: OleVariant; outSignature: OleVariant): Integer; stdcall;
8 busy1
 
25.12.20
17:10
Меня смущает вот эта строка MesProWrp.dll представляет собой Active X библиотеку
9 acht
 
25.12.20
17:18
(7) А что еще написано в документации по поводу параметров?
10 Kassern
 
25.12.20
17:21
(7) скинь пример кода для других языков
11 busy1
 
25.12.20
17:41
(10) Сейчас студию установлю
12 busy1
 
25.12.20
17:43
Вот пример от разработчика, который тоже не работает
13 busy1
 
25.12.20
17:43
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MesProWrp;

namespace SignTest
{
    class Program
    {
        static void Main(string[] args)
        {
            string Data = "Some text data";
            string Data64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(Data));
            object SignObj;
            ContactCryptor Cryptor = new ContactCryptor();
            Cryptor.IsBase64 = true;
            int Res = Cryptor.Sign(Data64, out SignObj);

            Console.WriteLine($"Sign result:{Res}");
            if (Res == 0)
            { Console.WriteLine($"Signature:{SignObj.ToString()}"); }

            Console.Write("Press any key");
            Console.ReadKey();
        }
    }
}
14 acht
 
25.12.20
17:46
(12) > который тоже не работает
Гм/
15 busy1
 
25.12.20
17:54
(14) Возможно я там не так работаю в visual stidio
16 busy1
 
25.12.20
17:56
Меня беспокоит out SignObj. А именно out - это указатель. Как это перевести в термины 1с.
17 acht
 
25.12.20
18:04
(16) Метод создаст объект нужного типа и вернет указатель на него переменную SignObj. Какой у объекта тип и что с ним делать - в документации. Нет в документации - не будет в 1С.
18 acht
 
25.12.20
18:09
Можешь попробовать перед вызовом поставить переменную SignObj = Неопределено и посмотреть, что в ней будет после вызова Sign
19 Perchik1984
 
15.03.21
07:06
Приветствую Коллега!.)
Удалось ли решить проблему? У меня сейчас точно такая же задача.
20 Максим Нижегородец
 
15.03.21
15:17
(19) Если эта DLL - Active X, то работать с ней как с 1С ВК нельзя. Можно попробовать поместить Active X на неуправляемую форму (из этого может, что-нибудь получиться).
21 H A D G E H O G s
 
15.03.21
15:23
На всякий случай не забываем делать

Buffer = Base64Строка(ДвоичныеДанные);

Buffer = СтрЗаменить(Buffer,Символы.ПС,"");
22 Perchik1984
 
15.03.21
15:56
(21) Убрать символы переноса строки тоже не помогает. Переменная SignObj = неопределено.
23 fisher
 
15.03.21
15:58
Если типы данных параметров с одинэсными не стыкуются, тады ой.
24 Perchik1984
 
15.03.21
16:08
Вроде стыкуются
25 fisher
 
15.03.21
16:15
(24) Тогда бы у тебя не было проблем с SignObj
26 fisher
 
15.03.21
16:16
И кстати. Что не так? Ошибка? Неправильный результат?
27 Garykom
 
гуру
15.03.21
16:19
1. Разрядность должна совпадать. Имхается dll 32 бит а сервер 1С часто 64
28 Serginio1
 
15.03.21
17:19
29 Perchik1984
 
16.03.21
12:07
За ссылки спасибо! Все перепробовал. Результат прежний.
busy1 - не поделитесь опытом решения данной проблемы?
30 Serginio1
 
16.03.21
18:10
(13)И никаких ошибок?
mesprowrp.dll какй разрядности?
https://stackoverflow.com/questions/10852634/using-a-32bit-or-64bit-dll-in-c-sharp-dllimport
31 Perchik1984
 
17.03.21
10:31
Получилось добиться от процедуры выдачу кодов ошибок.
Что сделал:
Зарегистрировал компоненту через regsvr32.exe (Ранее это тоже было сделано)
Потом в оснастке службы компонентов добавил в Приложения COM+ новое приложение и в компоненты подгрузил mesprowrp.dll

Теперь процедура начала выдавать ошибки. Но проблема другая:
Коды ошибок, которые выдает процедура не описаны в таблице кодов ошибок в документации к mesprowrp.dll.
32 Perchik1984
 
17.03.21
10:32
(30) mesprowrp.dll есть 32 и есть 64
Пробовал и ту и другую.
33 Perchik1984
 
17.03.21
14:51
Есть какие нибудь мысли?
34 Garykom
 
гуру
17.03.21
14:56
(33) Есть мысли трясти менагеров которые вам эту хре "продали"
35 Garykom
 
гуру
17.03.21
15:00
36 Garykom
 
гуру
17.03.21
15:07
На самом деле очень странно на левом форуме спрашивать как работать со специфической библиотекой.

Надо наверно напрямую обратиться к представителю/разработчику (или кому там еще где ее взяли) и попросить документацию с примерами на разных ЯП?
37 oleg_km
 
17.03.21
16:57
(36) Ну вообще да, это же наверное Сигнал-КОМ, один из разработчиков криптопровайдера. У них вроде даже форум есть, вот http://forum.signal-com.ru/.
38 Perchik1984
 
18.03.21
08:00
Разобрался. Всем спасибо!

Будущим поколениям:

1. Все файлы: mespro.dll, MesProWrp.dll, MesPro.INI - помещаем в папку с запускным файлом 1С, в моем случае C:\Program Files\1cv8\8.3.16.1148\bin\MesPro.ini
2. Помещаем файл MesProWrp.dll в C:\Windows\System32
3. Выполняем регистрацию c:\windows\system32\regsvr32.exe mesprowrp.dll

ВНИМАНИЕ! - ТОЛЬКО В ТАКОМ ПОРЯДКЕ РАБОТАЕТ!

Содержимое файла MesPro.INI:

[Folders]
CA Path=C:\QIWI\TestKeys2012\CA
Crl Path=C:\QIWI\TestKeys2012\Crls
Cert Path=C:\QIWI\TestKeys2012\Openkeys
Service Path=C:\QIWI\TestKeys2012\rand.opq
Private Key=C:\QIWI\TestKeys2012\Keys\00000001.key
Temp Path=c:\tmp
[CERTIFICATES]
Abonent Cert=C:\QIWI\TestKeys2012\Openkeys\stend2012.pem
Corresponder Cert=C:\QIWI\TestKeys2012\Openkeys\stend2012.pem

ТОЛЬКО В ТАКОМ ПОРЯДКЕ РАСПОЛАГАЙТЕ ОПИСАНИЕ ПУТЕЙ!!!!!

Листинг:

Cryptor = Новый COMОбъект("MesProWrp.ContactCryptor");
ФайлОтветаТУ = "";
Ответ = Cryptor.PrepareRequest(СтрокаФайлЗапросаБУ,НастрокиТочки.КодТочки,ФайлОтветаТУ,False,True);
39 Kassern
 
18.03.21
09:52
(38) Неужели обязательно в System32 пихать библиотеку? Разве нельзя было под админом запустить cmd и прописать regsvr32.exe "ПолныйПутьДоБиблиотеки"?
40 Garykom
 
гуру
18.03.21
10:15
(39) Там еще правильный regsvr32 (32 или 64 бит) надо https://support.ucs.ru/ru/book/export/html/8561
41 Perchik1984
 
18.03.21
10:22
(39) Пихал по разному. Завелось только так.
42 Garykom
 
гуру
18.03.21
10:40
(41) ты когда дела "3. Выполняем регистрацию c:\windows\system32\regsvr32.exe mesprowrp.dll"
в каталоге находился?
У тебя выше в 1 копия mesprowrp.dll в bin
43 Garykom
 
гуру
18.03.21
10:41
(42) *когда делал в каком каталоге находился?
какую копию " mesprowrp.dll" без путей зарегал?
44 Perchik1984
 
19.03.21
07:28
(43) В каталоге C:\QIWI\
какую копию " mesprowrp.dll" без путей зарегал? - c:\windows\system32\mesprowrp.dll
45 Garykom
 
гуру
19.03.21
08:51
(44) ыыы