首先
SoapClient類
這個類用來使用Web services。SoapClient類可以作為給定Web services的客戶端。
它有兩種操作形式:
* WSDL 模式
* Non-WSDL 模式
在WSDL模式中,構造器可以使用WSDL文件名作為參數,並從WSDL中提取服務所使用的信息。
non-WSDL模式中使用參數來傳遞要使用的信息。這個類有許多可以用來使用服務的有用的方法。其中SoapClient::__soapCall()是最重要的。這個方法可以用來調用服務中的某個操作。
<?php
/**
* Client端
*/
$ws = " http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
$client = new soapclient($ws,array ('trace'=>0,'uri'=>' http://WebXml.com.cn/'));
$client->soap_defencoding = 'UTF-8';
$client->decode_utf8 = false;
/**
* 使用$client->__getFunctions();
*可以得到webservice提供的方法
*下面調用的即是其中一個
*這個方法是用來獲得某省的城市的
*具體的說明可以在瀏覽器中輸入
* http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl查看
**/
$client->getSupportCity("福建");//這個方法要求的參數是string型或為空
?>
錯誤信息如下:
Fatal error: Uncaught SoapFault exception: [soap:Server] 服務器無法處理請求。 ---> 未將對象引用設置到對象的實例。 in D:\EclipseDocument\weather\Client.php:23 Stack trace: #0 [internal function]: SoapClient->__call('getSupportCity', Array) #1 D:\EclipseDocument\weather\Client.php(23): SoapClient->getSupportCity('??????') #2 {main} thrown in D:\EclipseDocument\weather\Client.php on line 23
試用
$client->__call('getSupportCity', '福建');
一樣出錯
webmethod 說明:
- <wsdl:types>
- <s:schema elementFormDefault="qualified" targetNamespace="http://WebXml.com.cn/">
- <s:element name="getSupportCity">
- <s:complexType>
- <s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="byProvinceName" type="s:string" />
</s:sequence>
</s:complexType>
</s:element>
是什么原因導致的呢?
該怎么解決?
回答:
.net 對php調用其webservice 有一個規則
代碼如下
$param["arg1"]="value1";
$client->__Call('WebMethodName',array($param));
鍵名 agr1 是方法 WebMethodName 的參數名,不能變
__call()函數
第一個參數是要調用的方法
第二個參數是二維數組
示例二、
web融合業務調用電信的服務器方法http://219.143.33.58/WebConsumeTest/WebConsume.asmx
try{ $client = new SoapClient("http://219.143.33.58/WebConsumeTest/WebConsume.asmx?wsdl"); //$addResult = $client->__getFunctions(); //$timeResult = $client->webConsumeReq(array('SPID'=>"35101282",'productID'=>"135000000000000229025",'address'=>"13386530106",'content'=>"abc123")); //$addResult = $client->add(1,6); $addResult = $client->__call('webConsumeReq',array(array('SPID'=>"35101282",'productID'=>"135000000000000229025",'address'=>"13386530106",'content'=>"abc123"))); //$addResult = $client->__soapCall('webConsumeReq',array('SPID'=>"35101282",'productID'=>"135000000000000229025",'address'=>"13386530106",'content'=>"abc123")); var_dump( $addResult); }catch(Exception $e){ printf("Message=%s \n",$e->__toString()); }
調用成功。