新手请教,望高手朋友不吝赐教,无比感谢中。
今天一大早开始研究Webservice,有一本不太专业的参考书,随便找了一个服务端的Wsdl,想调用其中的方法,结果搞了一天,无果,老报错,郁闷。
代码如下:
<?php
$client = new SoapClient('http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?WSDL',array('encoding'=>'gb2312'));
$param=array('theStockCode'=>'sh600031');
$result = $client->__soapcall('getStockInfoByCode',$param);
$jg=$result->getStockInfoByCodeResult;
print_r($jg); 
?>
就这么些,不多,没有服务端代码,Soap模块什么的都已打开能检测到,用的是Apache+php+mysql;连JAVA都没装,一个方向就是专心搞PHP,运行后出现错误提示:Fatal error: Uncaught SoapFault exception: [soap:Server] 服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。 in C:\Program Files\6000345.php:4 Stack trace: #0 C:\Program Files\6000345.php(4): SoapClient->__soapCall('getStockInfoByC...', Array) #1 {main} thrown in C:\Program Files\6000345.php on line 4

解决方案 »

  1.   

    本帖最后由 xuzuning 于 2013-03-05 08:03:50 编辑
      

  2.   

    原码如下,其中参考了朋友指点的代码写法<?php
    $client = new SoapClient('http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?WSDL',array('encoding'=>'gb2312'));
    $param = array('theStockCode'=>'sh600031');
     $result = $soapClient->getStockInfoByCode($param);
    print_r($result->getStockInfoByCodeResult);
    ?>
    照朋友教的,运行后,有如下错误提示。
    Fatal error: Call to a member function getStockInfoByCode() on a non-object on line 4
      

  3.   

    soapclient与$client,一个是实例化对象, 一个是变量名称,这点我还分得清楚,在程序里也没有混淆。我现在的疑惑是,自己的代码有语法错误,还是引用对象不规范。又或者是wsdl文件路径问题,我头都大了,没有头绪,好难,其实目标简单,就是将股票价格显示在客户端,有谁最好亲自试下,然后给出结果。再次感谢。
      

  4.   


    哦?是么。你区分清楚了?
    这是什么?:
    $client = new SoapClient('http://www.webxml.com.cn/WebServices/ChinaStockWebService.asmx?WSDL',array('encoding'=>'gb2312'));
    $param = array('theStockCode'=>'sh600031');
     $result = $soapClient->getStockInfoByCode($param);
    print_r($result->getStockInfoByCodeResult);明显应该是: $result = $client->getStockInfoByCode($param);
      

  5.   

    试过了,还是不行,Fatal error: Uncaught SoapFault exception: [HTTP] Unable to parse URL in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\CreateSoap\600033.php:15 Stack trace: #0 [internal function]: SoapClient->__doRequest('<?xml version="...', 'www.webxml.com....', 'http://WebXml.c...', 1, 0) #1 C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\CreateSoap\600033.php(15): SoapClient->__soapCall('getStockInfoByC...', Array) #2 {main} thrown 这么长的错误提示不知如何是好了。,
      

  6.   

    结贴。找到原因。php真他娘的弱,在远程服务器端调用天气预报接口成功,同样的写法调用股票接口却错误频出,新手无耐,只能啃书,书海茫茫,毫无头绪,不是不下功夫,只是搜索范围太广,不知如何是好,还好,运气来了,原来WEB调用真的很简单,想要的东西出来了,原来只有三四行脚本,但苦了我很多日子。找到WSDL,然后用语句$client = new SoapClient 加载它,这是关键的一步,接下来就是引用其中的方法了,我走了很多弯路,导致我以为自己走的路全错了。如:$param = array('theCityName'=>"南阳");
    $result = $client->__soapCall('getWeatherbyCityName',array('paramters'=>$param));
    成功,但换成股票接口WSDL,引用其中方法,正确传参后,失败,反复试验,终于找到解决方法,原来是数组问题,不应用以上写法,换一种写法传参就很顺利拿到东西了
      

  7.   

    如:$param = array('theCityName'=>"南阳");
    $result = $client->__soapCall('getWeatherbyCityName',array('paramters'=>$param));
    成功,但换成股票接口WSDL,引用其中方法,正确传参后,失败,反复试验,终于找到解决方法,原来是数组问题,不应用以上写法,换一种写法传参就很顺利拿到东西了
    请楼具体说下"换成怎样的方法传参才能成功,谢谢!!!"
    最近也在研究soap,希望楼主指点一二,谢谢!!!
      

  8.   

    找到WSDL,然后用语句$client = new SoapClient 加载它,这是关键的一步,接下来就是引用其中的方法了,
    为什么我引用不了其中的方法啊 ,求楼主赐教啊