第一次试着用php调用http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx的验证qq是否在线的web服务header("Content-Type: text/html;charset=utf-8");$client = new SoapClient("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl");
$p = $client->__call('qqCheckOnline', array());
$p = $p->getSupportProvinceResult->string;
print_r($p);
unset ($p);返回的错误为Fatal error: Uncaught SoapFault exception: [soap:Server] 服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。 in C:\wamp\www\test_Jpgraph\testWS.php:5 Stack trace: #0 C:\wamp\www\test_Jpgraph\testWS.php(5): SoapClient->__call('qqCheckOnline', Array) #1 {main} thrown in C:\wamp\www\test_Jpgraph\testWS.php on line 5这种传参应该如何做另外试过一个无参的方法,成功返回了的header("Content-Type: text/html;charset=utf-8");$client2 = new SoapClient("http://www.webxml.com.cn/WebServices/ChinaZipSearchWebService.asmx?WSDL");
$p = $client2->__call('getSupportProvince', array ());
$p = $p->getSupportProvinceResult->string;
print_r($p);
unset ($p);

解决方案 »

  1.   


    是说的这个?$client->__call('methodName',array('requestObj'=>$requestObj));
      

  2.   


    不好意思,我现在的代码贴做了一点,现在是header("Content-Type: text/html;charset=utf-8");$client = new SoapClient("http://www.webxml.com.cn/WebServices/ChinaZipSearchWebService.asmx?WSDL");
    $params=array("number"=>"88888888");
    $p = $client->__call('getSupportProvince', array ('parameters'=>$params));
    $p = $p->getSupportProvinceResult->string;
    print_r($p);
    unset ($p);
    据说php调用C#的web服务有点特别?能指名具体代码吗?
      

  3.   

    额,手头有点事,代码贴错了,我现在代码是,传参依然不行
    $client = new SoapClient("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl");
    $params=array("op"=>"88888888");
    $p = $client->__call('qqCheckOnline ', array ('parameters'=>$params));
    print_r($p);
    unset ($p);
    另外,这个服务的描述是http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?disco
      

  4.   


    我用过nusoap,可以搞C#的service
    可以在这里下载代码包
    http://sourceforge.net/projects/nusoap/我的代码忘记放哪里了
    不过这个网上抓的代码应该足够兄台需要了吧
    <?php
    require_once('lib/nusoap.php');
    $client = new nusoap_client('http://localhost:3333/Service.asmx?wsdl');$params = array(
            'anId' => 3, //new soapval('anId', 'int', 3),
            'action' => 'OMNOMNOMNOM',
            'parameters' => array(
                    'firstName' => 'Scott',
                    'lastName' => 'Smith'
            )
    );
    $result = $client->call('DoSomething', $params, 'http://tempuri.org/webservices/DoSomething', 'http://tempuri.org/webservices/DoSomething');
    print_r($result);
    ?>
      

  5.   

    $client = new SoapClient("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl");
    $res = $client->qqCheckOnline(array('qqCode' => '************'));//**替换QQ号
    echo $res->qqCheckOnlineResult;//print Y OR N
      

  6.   


    这个网上有用nusoap的,有不用的,不过我能调用webservice就行,不过这个参数传递我还真没看懂,说是要传一个二维数组进去吗?
      

  7.   

    补充://print Y OR N还有 E,可能是QQ号不存在的情况
      

  8.   


    恩,这样可以弄好了,恩我还想问问你,本来是调用别的,想找个qq的试试,不过我用
    http://www.webxml.com.cn/WebServices/WeatherWebService.asmx
    天气预报服务,虽然也是可行的,但是那个服务似乎可以把诸如'北京'传给theCityName,而不是想下面这样,用对应的代码54511,但是我把'北京'传进去就报错了~分都给你吧
    $client = new SoapClient("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl");
    $res    = $client->getWeatherbyCityName(array('theCityName' => '54511'));
    print_r($res->getWeatherbyCityNameResult);
      

  9.   

    用汉字我试了可以,要以 UTF-8 格式传入,
      

  10.   


    你看是这样吗,我下面这样的跑不了header("Content-Type: text/html;charset=utf-8");
    $client = new SoapClient("http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl");
    $res    = $client->getWeatherbyCityName(array('theCityName' => '北京'));
    print_r($res->getWeatherbyCityNameResult);
      

  11.   

    我猜,你的文件保存格式是 GBK你试试这样改数组,,前面的header去掉吧array('theCityName' => iconv('GBK', 'UTF-8', '北京'))