Имя: Пароль:
1C
1С v8
ошибки при парсинге ответа веб-сервиса в 1С (fiddler говорит, что ответ корректный)
0 novichok79
 
02.09.20
09:34
Доброго времени суток, коллеги.
Есть тестовый веб-сервис одной из гос. контор.
http://ruzditest.eisnot.ru:8280/services/ruzdiUploadNotificationPackageService_v1_0?wsdl
В общем-то ничего особенного (на 8.3.14 и 8.3.17) формирую туда запрос по XDTO схеме, полученной из WSПрокси.
Отправляю этот запрос:
WSПрокси.uploadNotificationPackage(ДанныеДляОтправки.ОбъектЗапроса, registrationId, packageStateCode)
Смотрю результат запроса через Fiddler: от сервиса приходит ответ в 1С, но 1С его как-то неправильно читает - ругается на несоответствие типов одного из полей, хотя данные в отправленном поле проходят проверку через ФасетXDTO, указанный в типе поля.
Ругань следующая:
Ошибка при вызове метода контекста (uploadNotificationPackage): При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса:  {http://fciit.ru/eis2/ruzdi/uploadNotificationPackageService/v1_0}:ruzdiUploadNotificationPackageService_v1_0:uploadNotificationPackage(): При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка проверки данных XDTO:
Значение: '' не соответствует простому типу: {http://fciit.ru/eis2/ruzdi/uploadNotificationPackageService/v1_0}guidType
Значение не соответствует образцу
Поле в запросе заполнено как надо, о чем свидетельсвует тело запроса, посылаемого из 1С:
<m:packageId>bf7ae31a-557e-4728-b4d8-25bf36f9f8e4</m:packageId>
В чем может быть ошибка?
1 acht
 
02.09.20
09:46
Судя по сообщению об ошибке у тебя там пустая строка
2 novichok79
 
02.09.20
10:15
(1) ха! если бы

тело запроса

POST http://ruzditest.eisnot.ru:8280/services/ruzdiUploadNotificationPackageService_v1_0.ruzdiUploadNotificationPackageService_v1_0HttpSoap11Endpoint HTTP/1.1
Host: ruzditest.eisnot.ru:8280
Proxy-Authorization: NTLM TlRMTVNTUAABAAAAB7IIogkACQA1AAAADQANACgAAAAKAGFKAAAAD1NLSUxMRVJTRVJWRVJXT1JLR1JPVVA=
User-Agent: 1C+Enterprise/8.3
Accept: */*
Connection: Keep-Alive
Content-Type: text/xml;charset=utf-8
SOAPAction: "http://fciit.ru/eis2/ruzdi/uploadNotificationPackageService";
Content-Length: 3339

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">;
    <soap:Body>
        <m:uploadNotificationPackageRequest xmlns:m="http://fciit.ru/eis2/ruzdi/uploadNotificationPackageService/v1_0">;
            <m:pledgeNotificationPackage xmlns:xs="http://www.w3.org/2001/XMLSchema";
                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
                <m:packageId>816980f7-3787-4c89-acda-95a3c8794367</m:packageId>
                <m:uip>5000000004535190000000692</m:uip>
                <m:senderType>1</m:senderType>
                <m:pledgeNotificationList>

тело ответа:

HTTP/1.1 200 OK
Vary: Accept-Encoding
Content-Type: text/xml; charset=utf-8
X-Powered-By: PHP/7.2.23
Date: Wed, 02 Sep 2020 07:12:51 GMT
Transfer-Encoding: chunked
Connection: Keep-Alive

30d
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"; xmlns:ns1="http://fciit.ru/eis2/ruzdi/uploadNotificationPackageService/v1_0"><SOAP-ENV:Body>;      <v1:uploadNotificationPackageResponse xmlns:v1="http://fciit.ru/eis2/ruzdi/uploadNotificationPackageService/v1_0">;
         <v1:registrationId></v1:registrationId>
         <v1:packageStateCode>
            <v1:code>13</v1:code>
            <v1:message>Ошибка разбора/сохранения документа пакета. Следующие уведомления уже существуют: 0f2cc4a5ec5811eab81800155d015a07</v1:message>
         </v1:packageStateCode>
      </v1:uploadNotificationPackageResponse></SOAP-ENV:Body></SOAP-ENV:Envelope>
3 novichok79
 
02.09.20
10:15
у меня оно заполненное, а вот в ответе - пустое.
4 acht
 
02.09.20
10:23
(3) Ну вот иди к этим, которые X-Powered-By: PHP/7.2.23, и выясняй, почем они отдают пустое значение. Хотя должны вообще не отдавать этот тег:

<xsd:complexType name="uploadNotificationPackageResponseType">
    <xsd:annotation>
        <xsd:documentation>
    Статус по приему пакета уведомлений.
    registrationId -  регистрационный идентификатор пакета в системе в случае успешного приема
                packageStateCode - статус обработки
        </xsd:documentation>
    </xsd:annotation>
    <xsd:sequence>
        <xsd:element minOccurs="0" name="registrationId" type="tns:guidType"/>
        <xsd:element name="packageStateCode" type="tns:StateType"/>
    </xsd:sequence>
</xsd:complexType>

Или корячь схему на своей стороне, пытаясь обойти их бзики.
5 acht
 
02.09.20
10:25
6 novichok79
 
02.09.20
10:26
(5) спасибо. это я понял, в фиддлере видно, что 1С схему получает с этого URL.
7 novichok79
 
02.09.20
10:26
(4) напишу еще 1 запрос в их ТП