SoapClient使用注意事项:
第一要加上 cache_wsdl参数,以防服务器调用的是缓存的wsdl文件
然后是参数传递,如果是使用PHP自己写的WebService,参数传递按正常方式即可
1、$client->FunctionName($param1,$param2);
2、$client->__soapCall("FunctionName",array($param1,$param2));
3、$client->__soapCall("FunctionName",array("param1"=>$param1,"param2"=>$param2));
而如果是调用Java或者C#写的WebService,参数应该使用二维数组传递,否则Java或C#会接受不到PHP提交的参数
try {
$client = new SoapClient("http://www.xxx.com/api?wsdl", array('cache_wsdl' => 0));
$xml = "
<Xml>
<Data>
...
</Data>
</Xml>";
// print_r($client->__getFunctions());
// print_r($client->__getTypes());
// $client->__soapCall('接口函数名称', array(array("参数名" => 参数值)));
// 针对Java或者C#做兼容处理,使用二维数组,如果是PHP写的webservice,可直接使用$client->GetData($xml);
print_r($client->__soapCall('GetData', array(array("xml" => $xml))));
} catch (SOAPFault $e) {
print $e;
}
鉴权:
如果WebService使用HTTP认证:
如果你使用的是NuSOAP的话,大致代码如下:
$client = new nusoap_client("http://{$login}@{$password}:www.domain.com/wsdl", true);
$client->setCredentials($login, $password);
如果你使用的是PHP内置的SOAP扩展的话:
$client = new SoapClient("http://www.domain.com/wsdl", array(
'login' => $login,
'password' => $password
));
如果WebService使用SOAP Header做验证,这个可以通过PHP内建SOAP扩展的SoapHeader来做,我就不多说了。