Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   SOAP запрос 1С (заполнение реквизитов юрлиц) (http://forums.kuban.ru/f1040/soap_zapros_1s_zapolnenie_rekvizitov_yurlic-6297557.html)

Sasha 24.11.2014 00:34

SOAP запрос 1С (заполнение реквизитов юрлиц)
 
Добрый день,
У 1С для подписчиков ИТС есть SOAP-сервис, отправив на который ИНН, в ответ получаешь всё остальное :-)
Хочу прикрутить его к 7.7

Собственно использую скрипт и объект WinHttp.WinHttpRequest.5.1

Запрос у меня выглядит следующим образом

[code]sRequest = "<?xml version=""1.0"" encoding=""UTF-8""?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns=""http://ws.orgregister.company1c.com/"">
<SOAP-ENV:Body>
<getCorporationRequisitesByINN>
<INN>7777777777</INN>
<configurationName>TiS77</configurationName>
</getCorporationRequisitesByINN>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>" [/code]

Так вот на этот запрос приходит ответ

[b]"Marshalling Error: Invalid XML character (0x420); can only be output using character entity when using ISO-8859-1 encoding"[/b]

Вообще не понимаю, что ему надо. Вот прошу помощи общественности, чего не хватает, чтобы это дело заработало

Helen1986 24.11.2014 00:48

используй символы кодировки ISO-8859-1 и пребудет с тобой счастье

Sasha 24.11.2014 01:06

кодировку подставил вот в таком виде
[code]oHTTP.SetRequestHeader "Content-Type", "text/xml;charset=ISO-8859-1"[/code]

Ситуация не изменилась. Как-то не соображу, как еще можно символы этой ИСО использовать :-) Надо ткнуть носом

Sasha 24.11.2014 01:11

(1)Спасибо за пинок, заработало :-)

Sasha 24.11.2014 09:41

(+3)если быть точнее необходимо было указать кодировку UTF-8 через SetRequestHeader, а не просто в тексте запроса.
Попутно еще вопрос? А существует ли сходный сервис для простых смертных без подписки ИТС? :-)

VZ 24.11.2014 10:11

4-Sasha > Вообще-то, сведения о юридических лицах принадлежат МФ (точнее, его департаменту по налогам), а никак не 1С...
Следовательно, [b][em]И[/em][/b]сходный сервис следует искать на сайте ФНС.

Ткачик 24.11.2014 12:36

(4) Для 7.7 не встречал, а для 8-ки такие обработки написаны (не мной):

[url]http://infostart.ru/public/285781/[/url]
[url]http://infostart.ru/public/281276/[/url]
[url]http://infostart.ru/public/276742/[/url]

Осталось только переписать это под клюшки.

Sasha 24.11.2014 23:13

5-VZ > Для не авторизованных запросов со стороны нашел только проверку статуса контрагента по ИНН, но направление интересное, будем копать :-)
6-Ткачик > Обработка интересная, скачаю посмотрю. Судя по тому, что используется капча - это не SOAP )

serpent 16.05.2016 14:34

Если не трудно... можно взглянуть на Ваш скрипт и обращение с объектом WinHttp.WinHttpRequest.5.1
для запроса к 1с Вэб Серверу...

Чучундер 16.05.2016 22:40

Sasha, если заработает - получение по ИНН - поделишься мну? (м.б. в обмен на что-то если такое что-то смогу найти у себя).

VZ 18.05.2016 10:27

Самый простой способ перекодировки - это использование виндовой команды CHCP, которая меняет кодовую страницу для ввода/вывода (866, 1251, 65001(UTF-8):
[em]@echo off
chcp 866 >nul
for /f "tokens=*" %%i in (866.txt) do call:to1251 "%%i"
exit
:to1251
chcp 1251 >nul
echo %~1 >>1251.txt
chcp 866 >nul
exit /b[/em]

Кошерно использовать [b]iconv [-c] [-s] [-f encoding] [-t encoding] [inputfile ...][/b]
[url]http://www.gnu.org/software/libiconv/[/url]

serpent 18.05.2016 15:58

(9) Наверное заработало.. .его последняя активность в 2014 году, в данной ветке :(

Sasha 18.05.2016 17:32

(11) Время летит, жесть. Еле нашел у себя в запасниках эту обработку. Скрипт выглядит следующим образом
[code]Скрипт = "Function Execute
|Dim sEndPoint
|sEndPoint="""+ТочкаПодключения+"""
|Dim sNameSpace
|sNameSpace = """+ПространствоИмен+"""
|Dim sProcedure
|sProcedure="""+Процедура_+"""
|Dim oHTTP
|set oHTTP = CreateObject(""WinHttp.WinHttpRequest.5.1"")
|oHTTP.Open ""POST"", sEndPoint, false
|oHTTP.SetTimeouts 10000,90000, 3000000, 3000000
|oHTTP.SetCredentials """+ЛогинИТС+""","""+ПарольИТС+""",HTTPREQUEST_SETCREDENTIALS_FOR_PROXY
|sRequest = """+Запрос+"""
|
|oHTTP.SetRequestHeader ""Content-Type"", ""text/xml;charset=UTF-8""
|
|On Error Resume Next
|
|oHTTP.Send sRequest
|
|Dim fso
|set fso = CreateObject(""Scripting.FileSystemObject"")
|
|If Err.Number <> 0 Then
| Set tf = fso.CreateTextFile("""+ВремФайлНаДиске+""", true)
| tf.WriteLine(""<err><Status>1000</Status><Text>""+ Trim(Err.description) + ""</Text></err>"")
| tf.Close()
| Exit Function
| On Error Goto 0
|End If
| On Error Goto 0
|
|
|Execute=oHTTP.ResponseText
|if oHTTP.status = 200 Then
| if oHTTP.ResponseText = """" then
| Execute = ""Empty Response from Server""
| else
| Execute = oHTTP.ResponseText
| end if
|else
| Execute = ""<err><Status>""& oHTTP.status &""</Status><Text>http err ""& oHTTP.status &"" : ""& oHTTP.StatusText & ""</Text></err>""
|end if
|End Function
|
|
|Execute
|
|
|Dim fso
|set fso = CreateObject(""Scripting.FileSystemObject"")
|Dim tf
|set tf = fso.CreateTextFile("""+ВремФайлНаДиске+""", true)
|Data = Replace(Execute,""<?xml version=""""1.0"""" encoding=""""utf-8""""?>"",""<?xml version=""""1.0"""" encoding=""""windows-1251""""?>"")
|tf.WriteLine(Data)
|tf.WriteBlankLines(3)
|tf.Close()
|"; [/code]

Sasha 18.05.2016 17:34

Ну и соответственно запуск скрипта и чтение результатов
[code]VBS = СоздатьОбъект("Текст");
VBS.ДобавитьСтроку(Скрипт);
VBS.Записать(ВремФайлНаДиске+".vbs");

Сообщить("Запуск...");

Попытка
WshShell = СоздатьОбъект("WScript.Shell");
WshShell.Run("%comspec% /c"+ВремФайлНаДиске+".vbs",0,1);
Исключение
СообщитьОшибка("ОШИБКА! : "+ОписаниеОшибки(),,0);
ФС.УдалитьФайл(ВремФайлНаДиске+".vbs");
Возврат "";
КонецПопытки;

ФС.ПереименоватьФайл(ВремФайлНаДиске,ВремФайлНаДиске+".txt",1);

Сообщить("->"+ВремФайлНаДиске+".txt");

Сообщить("Парсим ответ...");

Если СтрДлина(ДанныеДляОтправки) = 10 Тогда
ДанныеКлиента = ДанныеЮридическогоЛица(ВремФайлНаДиске+".txt");
Иначе
ДанныеКлиента = ДанныеФизическогоЛица(ВремФайлНаДиске+".txt");
КонецЕсли;[/code]

serpent 18.05.2016 18:25

(12)(13) ОГРОМНОЕ спасибо. Будем пробовать.

serpent 19.05.2016 09:10

(12)
|oHTTP.SetCredentials """+ЛогинИТС+""","""+ПарольИТС+""",HTTPREQUEST_SETCREDENTIALS_FOR_PROXY

Это вроде пароль для прокси, а куда подставлять пароль логин ИТС?

Sasha 19.05.2016 11:29

(15) Ну, собственно тут и указываешь. заменяя HTTPREQUEST_SET CREDENTIALS_FOR_PROXY на HTTPREQUEST_SET CREDENTIALS_FOR_SERVER

Полное описание здесь
[url]https://msdn.microsoft.com/en-us/library/windows/desktop/aa384058%28v=vs.85%29.aspx[/url]

Вот почему у меня работало так, уже не помню ) Но ошибок не было, возвращался xml с верным ответом

serpent 19.05.2016 11:37

Еще вопросик
ТочкаПодключения [url]https://api.orgregister.1c.ru/orgregister/v2?wsdl[/url]
ПространствоИмен [url]http://ws.orgregister.company1c.com/[/url]

Процедура_ RequisitesWebServiceEndpointImpl2Service

???

Sasha 19.05.2016 11:48

(17) ну в моей обработке 1,5-летней давности еще v1&wdsl и процедуры getEntrepreneurRequisitesByINN для ип
getCorporationRequisitesByINN для организаций
пространство имен да, такое

Sasha 19.05.2016 11:49

(+18) Пример текста запроса в (0)

perpetum 19.05.2016 12:22

0-Sasha > Только сейчас заметил...
Где-то в начале 2015 г я тоже занимался таким вопросом.
Можете посмотреть по ссылкам, обработка есть на инфостарте и в свободном доступе там же,
а так же, обновленный вариант по работе с [b]api2[/b]-запросами к [b]контур-фокус[/b], смотрите по ссылкам:
[url]http://forums.kuban.ru/f1040/vopros_k_znatokam_kladra-7746713.html[/url]
[url]http://forums.kuban.ru/f1040/protestite_na_osnove_tipovoj_konfa_buh-7_7_616_-_dlya_proverkakontragentovpoegrn_i_zapolnenie_6-ndfl-7718764.html[/url]

[b]Базочку 1С - бухгалтерия 7.7, ОСН, релиз 616[/b], в архиве, с настройками под обработку [b]ПроверкаКонтрагентовПоЕГРН[/b],
всё ещё можно скачать здесь:
[url]http://hdd.tomsk.ru/file/ktzswqvz[/url]

perpetum 19.05.2016 12:36

20-perpetum >+ кроме перекодировки в [b]UTF-8[/b],
необходимо ещё преобразование строки запроса в [b]эскейп-последовательность[/b],
тогда сервер будет правильно реагировать на любой запрос с кириллицей
- можете посмотреть в тексте обработки [b]ПроверкаКонтрагентовПоЕГРН[/b].

serpent 19.05.2016 12:56

(20) В Вашей обработке нет примера по работе с 1С Сервисом.....
Пробовал Вашу, работает через раз(может из-за Контура)

perpetum 19.05.2016 13:33

22-serpent > - ну да, у меня не было доступа к сервису 1С-подключения,
потому даже не интересовался, насколько полноценно он функционирует и что там можно извлечь.
Потому из свободно-доступных, был [b]контур-фокус[/b].
Но в отношении [b]работы через раз[/b] - что-то из ряда вон.
Сервис либо работает, если сервер [b]контур-фокус[/b] доступен,
либо - нет и [b]никаких через раз[/b].

- Можете дать ссылку на вашу обработку? - интересно взглянуть на работу с сервисом 1С.

serpent 19.05.2016 13:39

(23) я пока разбираюсь со скриптом....
не выходит...
возвращает
ошибка №70
An error occurred in the secure channel support

serpent 19.05.2016 13:40

(23) весь скрипт на данной странице

perpetum 19.05.2016 14:13

24-serpent > Ответ некорректен - отвечая, необходимо указывать, что вы тестируете.
Если тестируете запрос к контур-фокус по моей обработке,
то вариант ошибки по проблеме безопасности, может быть связан с видом ваше ОС и её настройки.
Я сейчас тестирую свою обработку на w-7, проблем нет.

perpetum 19.05.2016 14:19

25-serpent > - а где же автор топика "[b]Sasha[/b]"?

serpent 19.05.2016 14:20

у меня XP-64

perpetum 19.05.2016 14:56

28-serpent >
[b]W-2003[/b] и [b]XP[/b] - с недавних пор страдают проблемой запросов [b]GET-send[/b]
- я сам пробовал разбираться с представителями компании [b]контур-фокус[/b]
- мне пояснили - [b]проблема в настройке безопасности, связанная с сервис-паком[/b].
По-видимому, [b]они поменяли у себя подход к системе безопасности[/b],
в результате, перестал работать алгоритм [b]GET-send[/b].
Мне так и не удалось исправить ОС по их рекомендации с сервис-паком,
пришлось установить ОС [b]W-7-64[/b], с которой запросы работают.

serpent 20.05.2016 13:40

(29) вот нашел для себя решение....
боролся долго со скриптом... на всех машинках есть отклик на моей нет(win XP64) возвращал "Error Message: An Error Occurred in the Secure Channel Support "
[url]https://support.microsoft.com/en-us/kb/198970[/url]

WinServer2003 и XP_SP2 не поддерживают работу по протоколу SHA1,2,...
лечится
[url]https://blogs.technet.microsoft.com/pki/2010/09/30/sha2-and-windows/[/url]

[url]https://blogs.technet.microsoft.com/pki/2010/09/30/sha2-and-windows/[/url]

serpent 20.05.2016 13:41

сори вторая ссылка
[url]http://superuser.com/questions/802693/sha2-support-for-windows-xp-sp2-any-hotfix-or-dll-available[/url]

serpent 20.05.2016 13:42

проверить, поддерживает ли ваш броузер SHA есть сайт
[url]https://ssltest39.ssl.symclab.com/[/url]

perpetum 20.05.2016 18:33

32-serpent > - для меня оказалось бесполезно, это как раз сервис-пак 2,
но в ОС w2003 или XP, отказывается работать Google Chrome - более не
поддерживает эти операционки и вскоре за этим объявлением, эти ОС отказались
делать запросы. Другой браузер Mozilla Firefox - сопровождается падением плагина и всё.
Потестить в нём совместимость с сайтом контур-фокус ещё можно,
но тест показывает несовместимость с системой защиты и тоже - запросам - каюк.
В общем - устроили в майкрософте безобразия...
Приходится принять, как неизбежное и перейти на w-7, что и сделал.


Текущее время: 03:22. Часовой пояс GMT +3.