Почему php soapCall выдает ошибку преобразования строки?

#php #soap-client

#php #soap-client

Вопрос:

  // 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

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

СТРОКА 269 — это

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

Комментарии:

1. если ваш api поддерживает только строки, возможно, вам следует сериализовать массив…

2. @Ibu это не ошибка, которую я получаю от сервера API… Я получаю эту ошибку во время генерации вызова

3. В ошибке указано преобразование массива в строку итак, ошибка как-то связана с преобразуемым массивом, можете ли вы показать строку # 269 вашего кода

4. Я уже отредактировал сообщение и показал его @Ibu, это строка, в которой выполняется вызов

Ответ №1:

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

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

Ответ №2:

я думаю, вам следует взглянуть на руководство о том, как работает 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

Комментарии:

1. Я знаю, что со строкой это работает. Мне нужно передать массив с 3! вариантами House, Appartment и DetachedHouse, чтобы поиск возвращал больше результатов. :(((

2. я не думаю, что он поддерживает то, что вы пытаетесь сделать, может быть, вы можете передать 3 варианта, которые вы хотите по отдельности

3. просто чтобы знать. как? может быть, Nusoap? Есть идеи, как я мог бы выполнить тот же вызов с Nusoap? С Nusoap у меня проблема с передачей заголовка… Я поместил заголовочную часть кода в исходное сообщение…

4. Возможно, было бы неплохо добавить новый вопрос для этого, я не знаком с Nusoap … извините