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