SoapClient проблема. неправильно формируется строка запроса

Edson

Новичок
SoapClient проблема. неправильно формируется строка запроса

PHP:
<?php
  
     $client = new SoapClient("http://ws.emex.ru/EmExService.asmx?wsdl",array("trace"      => 1, "exceptions" => 0
));
     $result = $client->FindDetailAdv(11111111, "xxxxxxxxxx", "MC", "mr455003", true);
?>
Почему-то неправильно формируется строка запроса

PHP:
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
  <SOAP-ENV:Body>
     <ns1:FindDetailAdv/>
     <param1>xxxxxxxxxx</param1>
     <param2>MC</param2>
     <param3>mr455003</param3>
     <param4>true</param4>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Странный тег <ns1:FindDetailAdv/> и пропал один из параметров. В чем может быть проблема?
 

mity

Новичок
Попробуйте вызвать
PHP:
$result = $client->__call("FindDetailAdv",array(11111111, "xxxxxxxxxx", "MC", "mr455003", true));
Внимательно посмотрите схему http://ws.emex.ru/EmExService.asmx?wsdl
 

Edson

Новичок
Аналогично

PHP:
<?xml version="1.0" encoding="UTF-8"?>
   <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
       <SOAP-ENV:Body>
      <ns1:FindDetailAdv/>
         <param1>xxxxxxxxxx</param1>
         <param2>MC</param2>
         <param3>mr455003</param3>
         <param4>true</param4>
    </SOAP-ENV:Body>
  </SOAP-ENV:Envelope>
На какие моменты в схеме обратить внимание? Вот небольшие выдержки из схемы

PHP:
...
<s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> 

...

<s:element name="FindDetailAdv"> 
        <s:complexType> 
          <s:sequence> 
            <s:element minOccurs="1" maxOccurs="1" name="login" type="s:long" /> 
            <s:element minOccurs="0" maxOccurs="1" name="password" type="s:string" /> 
            <s:element minOccurs="0" maxOccurs="1" name="makeLogo" type="s:string" /> 
            <s:element minOccurs="0" maxOccurs="1" name="detailNum" type="s:string" /> 
            <s:element minOccurs="1" maxOccurs="1" name="findSubstitutes" type="s:boolean" /> 
          </s:sequence> 
        </s:complexType> 
      </s:element>

 <wsdl:message name="FindDetailAdvSoapIn"> 
    <wsdl:part name="parameters" element="tns:FindDetailAdv" /> 
  </wsdl:message> 
  <wsdl:message name="FindDetailAdvSoapOut"> 
    <wsdl:part name="parameters" element="tns:FindDetailAdvResponse" /> 
  </wsdl:message> 

  <wsdl:message name="FindDetailAdvHttpGetIn"> 
    <wsdl:part name="login" type="s:string" /> 
    <wsdl:part name="password" type="s:string" /> 
    <wsdl:part name="makeLogo" type="s:string" /> 
    <wsdl:part name="detailNum" type="s:string" /> 
    <wsdl:part name="findSubstitutes" type="s:string" /> 
  </wsdl:message> 
  <wsdl:message name="FindDetailAdvHttpGetOut"> 
    <wsdl:part name="Body" element="tns:ArrayOfDetailItem" /> 
  </wsdl:message> 

  <wsdl:message name="FindDetailAdvHttpPostIn"> 
    <wsdl:part name="login" type="s:string" /> 
    <wsdl:part name="password" type="s:string" /> 
    <wsdl:part name="makeLogo" type="s:string" /> 
    <wsdl:part name="detailNum" type="s:string" /> 
    <wsdl:part name="findSubstitutes" type="s:string" /> 
  </wsdl:message> 
  <wsdl:message name="FindDetailAdvHttpPostOut"> 
    <wsdl:part name="Body" element="tns:ArrayOfDetailItem" /> 
  </wsdl:message> 

...
 

mity

Новичок
Обратите внимание что сначала login =long, а затем login =string

Сохраните "схему" локально под именем например 1.wsdl и замените
<s:element minOccurs="1" maxOccurs="1" name="login" type="s:long" />
на
<s:element minOccurs="1" maxOccurs="1" name="login" type="s:string" />

инициализируйте так
PHP:
  $client = new SoapClient("http://localhost/1.wsdl",array("trace"      => 1, "exceptions" => 0 ));
и сравните запрос
 

Edson

Новичок
проблема решена

переделка скрипта

с

PHP:
$result = $client->FindDetailAdv(11111111, "xxxxxxxxxx", "MC", "mr455003", true);
на

PHP:
     $params=array();
     $params["login"]=11111111;  
     $params["password"]="xxxxxxxxxx";
     $params["makeLogo"]="MC"; 
     $params["detailNum"]="mr455003";
     $params["findSubstitutes"]=true;
     
     $result = $client->FindDetailAdv($params);
спасибо. вопрос закрыт
 
Сверху