Ошибка в SOAP запросе

S@fer

Новичок
Ошибка в SOAP запросе

Здравсвуйте.
Дали задание написать SOAP клиента к веб-сервису.
Есть веб-сервис, расположенный по адресу http://emexonline.com:3000/maximaws/service.wsdl. Описание WSDL документа здесь: http://emexonline.com:3000/maximaws/service.asmx
Никак не получается выполнить процедуру "SearchPart" (процедура поиска запчастей в БД), имеет входные парамтеры: пользователь, номер детали, условие на отображение замен по номеру.
Тестовая процедура и авторизация проходит успешно, но на посике выходит ошибка:
Fatal error: SOAP-ERROR: Encoding: object hasn't 'ShowSubsts' property in Z:\home\test1.ru\www\app\views\orde rrrr\index.thtml on line 53
Приведу код:
PHP:
$client = new SoapClient("http://emexonline.com:3000/maximaws/service.wsdl",array("trace"=>1,"exceptions"=>0)); 
  class Customer 
  { 
     public $Customer; 
     public function __construct() 
     { 
        $this->Customer = array( 
        "UserName" => "логин", 
        "Password" =>  "пароль", 
        "SubCustomerId" => "0", 
        "CustomerId" =>  "0"); 
     } 
  } 
  class FindByNumber 
  { 
    public $FindByNumber; 
    public function __construct() 
    { 
       $this->FindByNumber=array( 
       "Available"=>"", 
       "bitOldNum"=>True, 
       "PercentSupped"=>0, 
       "PriceId"=>0, 
       "Region"=>"", 
       "Delivery"=>0, 
       "Make"=>"", 
       "DetailNum"=>"", 
       "PriceLogo"=>"", 
       "Price"=>True, 
       "PartNameRus"=>"", 
       "PartNameEng"=>"", 
       "WeightGr"=>0, 
       "MakeName"=>""); 
    } 
  } 
  $Test = $client->Test(); 
  print_r($Test); 

  $Polz = new Customer; 
  $Polz=$client->Login($Polz); 
  print_r($Polz); 

  $FindNumber = new FindByNumber; 
  $detail='GDB1143'; 
  $FindNumber = $client->SearchPart($Polz,$detail,true); 
  print_r($FindNumber);
 

MiRacLe

просто Чудо
замени вызов $client->SearchPart на что-то вроде:


$client->__call('SearchPart',array(array( 'Customer' => new Customer(),'DetaulNum' => "GDB1143",'ShowSubsts' => true)));
 

S@fer

Новичок
Спасибо, за ответ.
Попробовал как вы написали
PHP:
$client->__call('SearchPart',array(array('Customer' => $Polz ,'DetaulNum' => 'GDB1143','ShowSubsts' => true)));
//или так разницы в запросе не было
$client->SearchPart(array('Customer' => $Polz ,'DetaulNum' => 'GDB1143','ShowSubsts' => true));
//оба варианты вроде бы идентичны
Ошибок нет, но поиск не происходит.
На сервер уходит запрос:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://emexonline.com:3000/MaximaWS/"><SOAP-ENV:Body><ns1:SearchPart><ns1:Customer/><ns1:ShowSubsts>false</ns1:ShowSubsts></ns1:SearchPart></SOAP-ENV:Body></SOAP-ENV:Envelope>
и возвращает пустой ответ.
В запросе почему-то не уходят данные пользователя и номер детали, а только условие.

Запрос должен быть примерно таким:
<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Body><SearchPart xmlns="http://emexonline.com:3000/MaximaWS/"><Customer><UserName>логин</UserName><Password>пароль</Password><SubCustomerId>0</SubCustomerId><CustomerId>1234</CustomerId></Customer><DetailNum>GDB1143</DetailNum><ShowSubsts>true</ShowSubsts></SearchPart></SOAP-ENV:Body></SOAP-ENV:Envelope>
 

MiRacLe

просто Чудо
Внимательно посмотри и найди ошибку в своём коде и опечатку в моём.
 

S@fer

Новичок
Спасибо. Ошибку нашел.
Номер детали стал передаваться. Но данные пользователя нет. немного доработал. получилось следующее:
PHP:
$pl=array("UserName"=>"логин","Password"=>"пароль","SubCustomerId"=>"0","CustomerId"=>"1234");
$FindNumber = $client->SearchPart(array('Customer'=>$pl,'DetailNum' => 'GDB1143','ShowSubsts' => True));
Заработало. Спасибо за помощь.
 
Сверху