|   |   | 
| 
 | Web-сервисы 1С | ☑ | ||
|---|---|---|---|---|
| 0
    
        PitNN 08.08.16✎ 14:39 | 
        Добрый день, коллеги.
 Подскажите, никак не могу разобраться. Нужно используя php передать в 1С массив данных используя web-сервисы. Создал XDTO-пакет, прописал в нем параметры. Создал web-сервис. В качестве одного из параметров указал созданный параметр XDTO-пакета. На php пишу: $Mass = ['article' => '111', 'brand' => 'xxx', 'name' => 'cup', 'reason' => 'отказ клиента', 'comment' => 'шляпа полная' ]; $params_ = array( 'id_order' => 'your google key4', 'guid' => '3523523hg32j4', 'quantity' => 10.5, 'struct_params' => Array($Mass) ); // Поcылка SOAP-запроса и получение результата $result = $client->CreateReturn($params_); В отладчике перехватываю вызов сервиса и вижу что заполнился только 'article', а остальные Неопределено. Если передать два элемента массива, то в первом элементе заполнится 'article', а во втором 'brand': [0]: article = 111; brand = Неопределено; name= Неопределено; reason = Неопределено; comment = Неопределено [1]: article = Неопределено; brand = xxx; name= Неопределено; reason = Неопределено; comment = Неопределено Подскажите, как правильно передать массив через web-сервис? | |||
| 1
    
        Fragster гуру 08.08.16✎ 14:42 | ||||
| 2
    
        Fragster гуру 08.08.16✎ 14:44 | 
        и да, в php, вроде array <> Array     | |||
| 3
    
        PitNN 08.08.16✎ 14:53 | 
        (1) Не прокатило. Передается только первый элемент массива.
 (2) Ранозначно | |||
| 4
    
        Fragster гуру 08.08.16✎ 14:55 | 
        (3) а можно wsdl выложить куда-нибудь? 
 когда-то такие же грабли были, вроде как раз дело во флагах было. Но очень давно | |||
| 5
    
        PitNN 08.08.16✎ 15:09 | 
        (4) 
 <code> <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap12bind="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soapbind="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://testo.ru" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsd1="http://testo.ru" xmlns:xsd2="http://www.testo.ru" name="ExchangeBitrix" targetNamespace="http://testo.ru"> <types> <xs:schema xmlns:tns="http://www.testo.ru" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.testo.ru" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:complexType name="Params"> <xs:choice> <xs:element name="Param" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:choice> <xs:element name="article" type="xs:string" minOccurs="0"/> <xs:element name="brand" type="xs:string" minOccurs="0"/> <xs:element name="name" type="xs:string" minOccurs="0"/> <xs:element name="reason" type="xs:string" minOccurs="0"/> <xs:element name="comment" type="xs:string" minOccurs="0"/> </xs:choice> </xs:complexType> </xs:element> </xs:choice> </xs:complexType> <xs:complexType name="StructParams"> <xs:sequence> <xs:element name="article" type="xs:string" nillable="true"/> <xs:element name="brand" type="xs:string" nillable="true"/> <xs:element name="name" type="xs:string" nillable="true"/> <xs:element name="reason" type="xs:string" nillable="true"/> <xs:element name="comment" type="xs:string" nillable="true"/> </xs:sequence> </xs:complexType> </xs:schema> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xs1="http://www.testo.ru" xmlns:xs2="http://testo.ru" targetNamespace="http://testo.ru" elementFormDefault="qualified"> <xs:import namespace="http://www.testo.ru"/> <xs:element name="GetStrHello"> <xs:complexType> <xs:sequence/> </xs:complexType> </xs:element> <xs:element name="GetStrHelloResponse"> <xs:complexType> <xs:sequence> <xs:element name="return" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="CreateReturn"> <xs:complexType> <xs:sequence> <xs:element name="id_order" type="xs:string"/> <xs:element name="guid" type="xs:string"/> <xs:element name="quantity" type="xs:float"/> <xs:element name="struct_params" type="xs1:Params"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="CreateReturnResponse"> <xs:complexType> <xs:sequence> <xs:element name="return" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> </types> <message name="GetStrHelloRequestMessage"> <part name="parameters" element="tns:GetStrHello"/> </message> <message name="GetStrHelloResponseMessage"> <part name="parameters" element="tns:GetStrHelloResponse"/> </message> <message name="CreateReturnRequestMessage"> <part name="parameters" element="tns:CreateReturn"/> </message> <message name="CreateReturnResponseMessage"> <part name="parameters" element="tns:CreateReturnResponse"/> </message> <portType name="ExchangeBitrixPortType"> <operation name="GetStrHello"> <input message="tns:GetStrHelloRequestMessage"/> <output message="tns:GetStrHelloResponseMessage"/> </operation> <operation name="CreateReturn"> <input message="tns:CreateReturnRequestMessage"/> <output message="tns:CreateReturnResponseMessage"/> </operation> </portType> <binding name="ExchangeBitrixSoapBinding" type="tns:ExchangeBitrixPortType"> <soapbind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetStrHello"> <soapbind:operation style="document" soapAction="http://testo.ru#ExchangeBitrix:GetStrHello"/> <input> <soapbind:body use="literal"/> </input> <output> <soapbind:body use="literal"/> </output> </operation> <operation name="CreateReturn"> <soapbind:operation style="document" soapAction="http://testo.ru#ExchangeBitrix:CreateReturn"/> <input> <soapbind:body use="literal"/> </input> <output> <soapbind:body use="literal"/> </output> </operation> </binding> <binding name="ExchangeBitrixSoap12Binding" type="tns:ExchangeBitrixPortType"> <soap12bind:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="GetStrHello"> <soap12bind:operation style="document" soapAction="http://testo.ru#ExchangeBitrix:GetStrHello"/> <input> <soap12bind:body use="literal"/> </input> <output> <soap12bind:body use="literal"/> </output> </operation> <operation name="CreateReturn"> <soap12bind:operation style="document" soapAction="http://testo.ru#ExchangeBitrix:CreateReturn"/> <input> <soap12bind:body use="literal"/> </input> <output> <soap12bind:body use="literal"/> </output> </operation> </binding> <service name="ExchangeBitrix"> <port name="ExchangeBitrixSoap" binding="tns:ExchangeBitrixSoapBinding"> <documentation> <wsi:Claim xmlns:wsi="http://ws-i.org/schemas/conformanceClaim/" conformsTo="http://ws-i.org/profiles/basic/1.1"/> </documentation> <soapbind:address location="http://192.168.10.111:81/test2/ws/obmen.1cws"/> </port> <port name="ExchangeBitrixSoap12" binding="tns:ExchangeBitrixSoap12Binding"> <soap12bind:address location="http://192.168.10.111:81/test2/ws/obmen.1cws"/> </port> </service> </definitions> </code> | |||
| 6
    
        Fragster гуру 08.08.16✎ 15:09 | 
        (5) вот я не зря просил "куда-нибудь"...     | |||
| 7
    
        PitNN 08.08.16✎ 15:14 | ||||
| 8
    
        Fragster гуру 08.08.16✎ 15:18 | 
        если я правильно понял - то ты хочешь четвертым параметром передать массив, а в объявлении у тебя четвертый параметр - не массив.
 тебе надо создать тип с одним полем и указать у него maxOccurs -1 и в него уже пихать массив | |||
| 9
    
        PitNN 08.08.16✎ 15:24 | 
        (8) У меня так и сделано. Четвертый параметр ссылается на тип Params, который объявлен в XDTO и у него свойство Params с maxOccurs -1     | |||
| 10
    
        PitNN 08.08.16✎ 15:25 | 
        (9) ... и у него свойство Param с maxOccurs -1     | |||
| 11
    
        Fragster гуру 08.08.16✎ 15:33 | 
        почему-то Params не как sequence, а как choice. попробуй в пакете XDTO не в типе Params у свойства добавлять вложенный тип, а указать у него тип (http://testo.ru)StructParams в окошке типов, чтобы он не был вложенным.     | |||
| 12
    
        PitNN 08.08.16✎ 16:01 | 
        (11) Не совсем понял что нужно сделать.     | |||
| 13
    
        PitNN 08.08.16✎ 16:05 | 
        (11) У меня сейчас вот так:
 http://itmages.ru/image/view/4701219/a268c7eb | |||
| 14
    
        Fragster гуру 08.08.16✎ 16:06 | ||||
| 15
    
        Fragster гуру 08.08.16✎ 16:07 | 
        (13) у Param дали влоежнное определение типа и укажи тип (над "минимальное количество")     | |||
| 16
    
        PitNN 08.08.16✎ 16:14 | 
        (15) Вот так, я полагаю:
 http://itmages.ru/image/view/4701280/81a5d320 | |||
| 17
    
        PitNN 08.08.16✎ 16:21 | 
        (14) УРА!!! Заработало!))) Спасибо огромное!)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |