【问题标题】:Why php's soapCall gives string conversion error?为什么php的soapCall会出现字符串转换错误?
【发布时间】:2011-05-22 08:09:32
【问题描述】:
 // 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);

【问题讨论】:

  • 如果你的api只支持字符串,也许你应该序列化数组...
  • @Ibu 这不是我从 API 服务器收到的错误...我在调用生成期间收到此错误
  • 错误说,数组到字符串的转换,所以错误与被转换的数组有关,你能显示代码的第269行吗
  • 我已经编辑了帖子并显示了@Ibu,这是拨打电话的那一行

标签: php soap-client


【解决方案1】:

这可能已经解决了,但我也遇到了问题,当我终于找到解决方案时,我想我应该在这里发布。 (解决方法不是nusoap,它会抛出同样的错误。)

错误似乎仅来自soapCall调用生成,实际上是导致它的Web服务。当您运行 __soapCall 时,它首先询问服务器参数应该具有哪些数据类型,然后尝试遵守。因此,如果您在服务需要一个字符串时尝试提供一个数组,它会在生成请求时执行数组到字符串的转换。

【讨论】:

    【解决方案2】:

    我认为你应该看看手册如何soapcall work

    $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 中所示示例的排序错误

    【讨论】:

    • 我知道使用 String 可以正常工作。我需要传递一个带有 3 的数组!选项 House、Appartment 和 DetachedHouse,这样搜索会返回更多结果。 :(((
    • 我不认为它支持你想要做的事情,也许你可以单独传递你想要的 3 个选项
    • 只是想知道。如何?也许 Nusoap?任何想法,我怎么能用 Nusoap 打同样的电话?使用 Nusoap,我在传递标头时遇到问题...我已将代码的标头部分放在原始帖子中...
    • 也许为此添加一个新问题是个好主意,我对 Nusoap 不熟悉...抱歉
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多