Этот вопрос закрыт для ответов, так как повторяет вопрос Как написать soap запрос на php по данному wsdl?
@tatarrr95

Как написать SOAP запрос на PHP по готовому wsdl?

Есть wsdl файл:
<?xml version="1.0"  encoding="UTF-8" ?>
<definitions 
  xmlns="http://schemas.xmlsoap.org/wsdl/" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  name="esia_usl" 
  targetNamespace="urn:TFOMS-EsiaUsl" 
  xmlns:tns="urn:TFOMS-EsiaUsl" 
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"   
  >
<types>
		<xs:schema 
			xmlns:xs="http://www.w3.org/2001/XMLSchema" 			
			targetNamespace="urn:TFOMS-EsiaUsl" 
			elementFormDefault="qualified" 
			xmlns:tns="urn:TFOMS-EsiaUsl"
		>	
    <xs:complexType name="InputParams">
      <xs:sequence>
        <xs:element name="fam" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
        <xs:element name="im" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
        <xs:element name="ot" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
        <xs:element name="dr" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
        <xs:element name="dmin" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
        <xs:element name="dmax" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
      </xs:sequence>  
    </xs:complexType>    

    <xs:complexType name="Usl">
		  <xs:sequence>
			  <xs:element name="lpu" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
        <xs:element name="nmlpu" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>            
        <xs:element name="smo" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>            
        <xs:element name="nmusl" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
        <xs:element name="uslok" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
        <xs:element name="ds" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>                        
        <xs:element name="dtbeg" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
        <xs:element name="dtend" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>            
        <xs:element name="sum" type="xs:decimal" minOccurs="1" maxOccurs="1"></xs:element>
      </xs:sequence>  
    </xs:complexType>   

    <xs:complexType name="UslData">
      <xs:sequence>
        <xs:element name="usl" type="tns:Usl" minOccurs="0" maxOccurs="unbounded"></xs:element>
      </xs:sequence>  
    </xs:complexType>   

   </xs:schema> 
</types>      
  <message name="request_msg">
    <part name="input_params" type="tns:InputParams"/>    
  </message>
  <message name="response_msg">
    <part name="usl_list" type="tns:UslData"/>
  </message>  
  <portType name="EsiaUslType">
    <operation name="getUsl">
      <input message="tns:request_msg"/>
      <output message="tns:response_msg"/>
    </operation>   
  </portType>
  <binding name="EsiaUslBinding" type="tns:EsiaUslType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="getUsl">
      <soap:operation soapAction="" style="document"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>    
  </binding>
  <service name="EsiaUslService">
    <port name="EsiaUslPort" binding="tns:EsiaUslBinding">
      <soap:address location="http://192.168.10.13/soap/server_esia.php"/>
    </port>
  </service>
</definitions>


Пишу:
$client = new SoapClient("http://site/esia.wsdl");
var_dump($client->__getFunctions());


Выдает:
array(1) { [0]=> string(41) "UslData getUsl(InputParams $input_params)" }


На var_dump($client->__getTypes()) выдает:
array(3) { 
   [0]=> string(99) "struct InputParams { string fam; string im; string ot; string dr; string dmin; string dmax; }" 
   [1]=> string(141) "struct Usl { string lpu; string nmlpu; string smo; string nmusl; string uslok; string ds; string dtbeg; string dtend; decimal sum; }" 
   [2]=> string(28) "struct UslData { Usl usl; }" }


Так вот, мне при запросе к SOAP надо выполнить функцию getUsl();
Какие параметры правильно передать ф этой функции? Параметром должен быть один класс InputParams или параметрами должен быть список из содержимого InputParams, как в моем примере ниже?
$result = $client->getUsl(fam, im, ot, dr, dmin, dmax);


И сразу еще такой вопрос, fam, im, ot должны быть у меня на русском языке. Кодировка по которой работает soap сервер utf-8. Но код страницы и сама страница с которой я передаю этот запрос работает в кодировке windows-1251. Как правильно передавать и выполнять запрос?
  • Вопрос задан
  • 423 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы