Имя: Пароль:
1C
1С v8
API WebMoney. Загрузка операций в 1С
0 i_rodionov
 
11.09.16
20:57
У меня был сервер Win 2003 x64, на котором я успешно реализовал для интернет магазина выписки из движений кошелька WebMoney. Теперь они мигрировали на Win 2012 x64 в немецком облаке. И все перестало работать. Сервер Вебмани отвечает, что проблема с сертификатами защищенного веб-соединения. У кого был такой опыт, поделитесь, пожалуйста.
Спасибо.
1 i_rodionov
 
11.09.16
21:02
Дополнительно. Если забирать данные вручную из 1С клиента, то все хорошо (32 разряда). Если регламентное задание - перестало работать на Win2012 x64, хотя классно работало на Win 2003 x64
2 i_rodionov
 
11.09.16
21:16
Неужели никто не работал в Webmony?
3 Кащей Бессмертный
 
11.09.16
21:17
Если жалуется на сертификат, то нужно вызывать код с сервера и смотреть, что за сертификаты он там спрашивает.
Вполне вероятно, что не хватает какого-то корневого сертификата.
4 Cyberhawk
 
11.09.16
21:18
Плохо мигрировали. Ты админ?
5 i_rodionov
 
11.09.16
21:19
(4) не, не админ. Но я прописал все сертификаты в корневое хранилище
6 i_rodionov
 
11.09.16
21:20
(4) иначе у меня даже 32 разряда бы не работало (из клиента 1С)
7 Кащей Бессмертный
 
11.09.16
21:23
Вопрос - а пользователь сервера в это хранилище вхож ?
8 i_rodionov
 
11.09.16
21:25
(7) Да, когда это делает юзер интерактивно, нажимает кнопку в обработке, все замечательно (исполняется код в контексте 32 разряда). Когда это делает регламент (уже 64 разряда) под той же ролью - не работает
9 i_rodionov
 
11.09.16
21:26
(7) там RDP все юзеры и сервер на одном сервере
10 Cyberhawk
 
11.09.16
21:26
Поставь 8.3.9 х64 клиент и проверь с толстого клиента обычного приложения
11 Cyberhawk
 
11.09.16
21:27
Так ты поймешь, в чем дело - в 64 битах или в разных пользователях ОС, из-под которых выполняется код
12 Cyberhawk
 
11.09.16
21:27
Ну а для быстрого решения проблемы можешь просто запускать службу сервера приложений из-под полноценного пользовтеля ОС
13 Cyberhawk
 
11.09.16
21:28
(под которым все работает в 32б, например)
14 i_rodionov
 
11.09.16
21:28
(10) Оно же не вышло официально?
15 Cyberhawk
 
11.09.16
21:29
(14) Ну так тебе ж проверить чисто
16 i_rodionov
 
11.09.16
21:29
(12) Админ уверяет, что у службы дофига прав. Думаешь, пользователь службы не может прочесть корневой каталог сертифов?
17 Cyberhawk
 
11.09.16
21:30
(16) У процессов, запускаемых как служба, есть отличия в поведении и окружении ОС по сравнению с теми, которые запускаются в интерактивном сеансе ОС...
18 i_rodionov
 
11.09.16
21:33
(17) Я это заметил ,когда их переводил. Много, что было сделано через COM, я переписывал через ADO. Но не знаю, что еще сделать. Если есть подсказка, буду благодарен
19 Кащей Бессмертный
 
11.09.16
21:33
(16) Вполне реально, что для него их просто нет.
20 Кащей Бессмертный
 
11.09.16
21:34
(18) Просто COM из 64 в 32 - напрямую не работает. Нужно костыли делать.
21 i_rodionov
 
11.09.16
21:34
(20) Я от них ушел в АДО. Но Вебмани - вебная штука, уйти некуда
22 i_rodionov
 
11.09.16
21:37
А заодно, Оффтоп. Тут кто-нибудь делал интеграцию с LaModa? Это селлер центр
23 Кащей Бессмертный
 
11.09.16
21:38
(21) Web-то можно через HTTPСоединение обрабатывать.
24 i_rodionov
 
11.09.16
21:39
(23) Ясное дело. Только перестало работать в Win2012
25 Кащей Бессмертный
 
11.09.16
21:40
(24) А вообще - процесс с сервера запросы отправляет ?

Поставить рядом apache и ходить к нему и смотреть, что и как работает - после того как в тесте всё будет ходить - переходить к рабочему серверу.
26 i_rodionov
 
11.09.16
21:43
(25) Да, все отлично, кроме того, что он отбрасывает соединение, как незащищенное. Стоящий рядом 2003 сервер x64 с теми же сертификатами все обрабатывает
27 i_rodionov
 
11.09.16
21:45
(25) рекомендуешь Фиддлером посмотреть общение серверов?
28 Кащей Бессмертный
 
11.09.16
21:45
(26) Вот и нужно смотреть, что происходит, когда ходишь на свой "домашний" сервер, и смотреть, какого сертификата не хватило.
А, может быть, ему ещё и флажок какой нужно поставить, чтобы он сертификаты использовал.
P.S. а, может быть, специалисты из 1С так быстро всё писали, что в 64-битной версии он просто не умеет работать.
29 Кащей Бессмертный
 
11.09.16
21:46
(27) Можно, только https-трафик не так просто смотреть.
Поэтому, лучше смотреть на своём сервере - там видно, что он запросил, и что ему сервер ответил.
30 Cyberhawk
 
11.09.16
21:46
А может какая-нибудь политика сети в 2012 бородит
31 i_rodionov
 
11.09.16
21:47
(28) У меня столько вопросов к Win2012, что всех не перечислить. Я сюда писал с надеждой, что кто-то столкнулся с проблемой и, может быть, нашел решение
32 i_rodionov
 
11.09.16
21:50
У меня еще впереди программирование авторизации в Приватбанк, Днепропетровск. То ли еще будет )
33 i_rodionov
 
11.09.16
22:06
WMID = Константы.ВебМани_ВМИД.Получить(); //Логин - айди кипера
    НомерКошелька = Константы.ВебМани_НомерКошелька.Получить();
    УникальныйНомерЗапроса = Формат(ТекущаяДата(),"ДФ=yyyyMMddHHmmss");
    
      Signer = Новый COMОбъект("WMSignerX.Signer");
    Signer.Login = WMID;
    Signer.Passwd = Константы.ВебМани_ПарольКипера.Получить();
    Signer.KeyFName = Константы.ВебМани_ПутьКФайлуКлючей.Получить();
    СтрокаПодписи = Signer.SignString(НомерКошелька+УникальныйНомерЗапроса); // зашифровывает строку подписи
    
    ДанныеЗапроса = "<w3s.request>";
    ДанныеЗапроса = ДанныеЗапроса + "<reqn>"+УникальныйНомерЗапроса+"</reqn>";
    ДанныеЗапроса = ДанныеЗапроса + "<wmid>"+WMID+"</wmid>";
    ДанныеЗапроса = ДанныеЗапроса + "<sign>"+СтрокаПодписи+"</sign>";
    ДанныеЗапроса = ДанныеЗапроса + "<getoperations>";
    ДанныеЗапроса = ДанныеЗапроса + "<purse>"+НомерКошелька+"</purse>";
    ДанныеЗапроса = ДанныеЗапроса + "<wmtranid></wmtranid>";  //номер операции в системе ВебМани. Пусто - фильтр не наложен
    ДанныеЗапроса = ДанныеЗапроса + "<tranid></tranid>"; // номер перевода. Пусто - фильтр не наложен
    ДанныеЗапроса = ДанныеЗапроса + "<wminvid></wminvid>"; //номер счета в системе ВебМани. Пусто - фильтр не наложен
    ДанныеЗапроса = ДанныеЗапроса + "<orderid></orderid>"; //номер заказа. Пусто - фильтр не наложен
    ДанныеЗапроса = ДанныеЗапроса + "<datestart>"+Формат(ДатаНачала,"ДФ='yyyyMMdd HH:mm:ss'")+"</datestart>";
    ДанныеЗапроса = ДанныеЗапроса + "<datefinish>"+Формат(ДатаКонца,"ДФ='yyyyMMdd HH:mm:ss'")+"</datefinish>";
    ДанныеЗапроса = ДанныеЗапроса + "</getoperations>";
    ДанныеЗапроса = ДанныеЗапроса + "</w3s.request>";  
    
    Прокси = Новый ИнтернетПрокси;
    Прокси.Установить("http","10.100.0.1",3128);
    
    Заголовки = Новый Соответствие;
    Заголовки.Вставить("Content-Type","text/xml");
    
    Запрос = Новый HTTPЗапрос("/asp/XMLOperations.asp", Заголовки);
    Запрос.УстановитьТелоИзСтроки(ДанныеЗапроса,КодировкаТекста.ANSI);
    
    SSL = Новый ЗащищенноеСоединениеOpenSSL(Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровWindows());
    //ЗаписьЖурналаРегистрации("ВебМани",,,,"НАЧАЛО");

    АдресСервера = "w3s.webmoney.ru";
    Попытка
        Соединение = Новый HTTPСоединение(АдресСервера,,,,Прокси,,SSL); // защищенное соединение!
    Исключение
        
        #Если Клиент Тогда
        Сообщить("Не удалось установить соединение с сервером :"
        + Символы.ПС + ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
        #КонецЕсли
    
        Возврат;
    КонецПопытки;
    
    ФайлРезультата = ПолучитьИмяВременногоФайла();
    Попытка
        Ответ = Соединение.ОтправитьДляОбработки(Запрос, ФайлРезультата);
        Соединение = Неопределено;
    Исключение
        
        #Если Клиент Тогда
        Сообщить(ИнформацияОбОшибке().Описание, СтатусСообщения.Важное);
        #КонецЕсли
    
        Возврат;
    КонецПопытки;
    //ЗаписьЖурналаРегистрации("ВебМани",,,,ФайлРезультата);
    //Возврат;
    
    Чтение = Новый ЧтениеXML;
    Чтение.ОткрытьФайл(ФайлРезультата);
    
    ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(Чтение);

    Чтение.Закрыть();
    УдалитьФайлы(ФайлРезультата);
    
    КоличествоОпераций = Число(ОбъектXDTO.operations.cnt);
    
    Если КоличествоОпераций = 0 Тогда
        Возврат;
    КонецЕсли;
    
    Если КоличествоОпераций = 1 Тогда
        ТекущаяОперация = ОбъектXDTO.operations.operation;
        
        Если ТекущаяОперация.pursedest = НомерКошелька Тогда
            ОбработатьПлатежВебМани(ТекущаяОперация, Перечисления.ВидыОперацийПоступлениеБезналичныхДенежныхСредств.ОплатаПокупателя);
        Иначе
            ОбработатьПлатежВебМани(ТекущаяОперация, Перечисления.ВидыОперацийППИсходящее.ОплатаПоставщику);
        КонецЕсли;
    Иначе
        
        Для Каждого ТекущаяОперация Из ОбъектXDTO.operations.operation Цикл
            
            Если ТекущаяОперация.pursedest = НомерКошелька Тогда
                ОбработатьПлатежВебМани(ТекущаяОперация, Перечисления.ВидыОперацийПоступлениеБезналичныхДенежныхСредств.ОплатаПокупателя);
            Иначе
                ОбработатьПлатежВебМани(ТекущаяОперация, Перечисления.ВидыОперацийППИсходящее.ОплатаПоставщику);
            КонецЕсли;
            
        КонецЦикла;
    КонецЕсли;
34 i_rodionov
 
11.09.16
22:14
Это пример кода, который работает в Win2003x64 и в клиенте 1С. Может, пригодится кому
35 Torquader
 
11.09.16
22:43
(34) А Signer в 64-битах правильно работает ?
36 i_rodionov
 
11.09.16
22:49
(35) Есть его две версии, в 32 и 64
37 i_rodionov
 
11.09.16
22:50
(35) Было опробованно на Win2003x64 - безупречно
38 Serginio1
 
11.09.16
22:57
39 i_rodionov
 
11.09.16
23:15
(38) Это для чего?
40 Serginio1
 
12.09.16
07:51
41 Serginio1
 
12.09.16
11:09
Кроме того ты можешь использовать эти библиотеки через COM

RegAsm.exe .\..\PUBLIC\v3.2-bin\WebMoney.Cryptography.dll \tlb
gacutil.exe /if .\..\PUBLIC\v3.2-bin\WebMoney.Cryptography.dll
gacutil.exe /if .\..\PUBLIC\v3.2-bin\BusinessTools.Cryptography.dll

Можешь зарегистрировать через мою
РегистрацияКомСервера.exe от администратора. Там регистрируется сразу и в 32 и 64 разрядные