Почему php's soapCall выдает ошибку преобразования строки? - PullRequest
0 голосов
/ 22 мая 2011
 // Set username and password
    $ih_soap_user= $this->config->item('interUser');
    $ih_soap_pass=$this->config->item('interPass');


    //echo $ih_soap_user.':P:'.$ih_soap_pass;
    // Set soap namespace
    $ih_soap_ns = 'http://www.interhome.com/webservice';
    // Create new instance of SoapClient with the interhome web service URL
    $client = new
    SoapClient($this->config->item('interSoap'),array('trace'=>'1'));
    // Create new soap header and set username and password
    $header = new SoapHeader($ih_soap_ns,
            'ServiceAuthHeader',
    array('Username' => $ih_soap_user,'Password' =>
    $ih_soap_pass),
    true
    );
    // Prepare p// Prepare parameters


  $params = array('inputValue' =>array(
        'Page'=>$page,
        'PageSize'=>'10',
        'OrderDirection'=>'Ascending',//Descending
        'OrderBy'=>'Price',//Favorite,Place
        'LanguageCode'=>'EN',
        'CurrencyCode'=>'EUR',

        'CountryCode'=>trim($ajaxSearchCountryCode),
        'RegionCode'=>trim($ajaxSearchRegionCode),
        'PlaceCode'=>$ajaxSearchPlaceCode,
        'CheckIn'=> $ajaxSearchCheckinDate,
        'Duration'=>'7',
       'ThemeFilter'=>$ajaxSearchTheme,
       'HouseApartmentType'=>array('House'=>'House'),
       'SpecialOffer'=>'AnySpecialOffer',
         'PaxMin'=>'1',
         'PaxMax'=>'',
          'RoomsMin'=>'1',
         'RoomsMax'=>'',



    ) );



    try{
    $result = $client->__soapCall("Search",array('parameters'=> $params),null,$header);

Привет, ребята. Любая идея, почему этот вызов, когда я передаю любой не пустой массив, как, например, как я сделал для 'HouseApartmentType', возвращает эту ошибку

Обнаружена ошибка PHP

Важность: Уведомление

Сообщение: преобразование массива в строку

Имя файла: controllers / Houses.php

Номер строки: 269

И когда это только пустой массив или строка, работает функция мыльного вызова ... Мне нужно передать массив опций одному параметру ....

LINE 269 равен

$result = $client->__soapCall("Search",array('parameters'=> $params),null,$header);

Ответы [ 2 ]

3 голосов
/ 15 августа 2012

Возможно, это уже решено, но у меня тоже были проблемы с этим, и я подумал, что мне следует опубликовать здесь, когда я наконец нашел решение. (Решение не nusoap, оно выдает ту же ошибку.)

Ошибка, по-видимому, возникает только при генерации вызова soapCall, ее вызывает веб-служба. Когда вы запускаете __soapCall, он сначала запрашивает у сервера, какие типы данных должны иметь параметры, а затем пытается соответствовать. Поэтому, если вы попытаетесь передать массив, когда служба ожидает строку, она выполнит преобразование массива в строку при генерировании запроса.

1 голос
/ 22 мая 2011

я думаю, вы должны посмотреть в руководстве, как soapcall работает :

$params = array(
     'Page'=>$page,
     'PageSize'=>'10',
     'OrderDirection'=>'Ascending',//Descending
     'OrderBy'=>'Price',//Favorite,Place
     'LanguageCode'=>'EN',
     'CurrencyCode'=>'EUR',
     'CountryCode'=>trim($ajaxSearchCountryCode),
     'RegionCode'=>trim($ajaxSearchRegionCode),
     'PlaceCode'=>$ajaxSearchPlaceCode,
     'CheckIn'=> $ajaxSearchCheckinDate,
     'Duration'=>'7',
     'ThemeFilter'=>$ajaxSearchTheme,
     'HouseApartmentType'=>'House', // changed to string instead of array
     'SpecialOffer'=>'AnySpecialOffer',
     'PaxMin'=>'1',
     'PaxMax'=>'', 
     'RoomsMin'=>'1', 
     'RoomsMax'=>'' );  

Я упростил массив, и вы должны проверить его и посмотреть, если это тот результат, который выищите.

Также ищите ошибки заказа как пример, показанный в php.net

...