和大家分享下:
值得注意的是要保持和SoapClient接口一致的话,有几个地方要注意下:
1.nusoap_client的构造函数第二个参数要传递true,以说明访问的是一个wsdl。
2.然后要设置对应的编码,否则容易导致乱码
3在nusoap调用服务调用的时候也只能用call(方法名,参数键值对数组)的方式进行调用,soapclient的参数也是更简单按顺序构造的数组,没有用键值方式。
nusoap:
$this->service = new nusoap_client("http://localhost/moas/service.php?class=myworkManager&wsdl",true);
$this->service->soap_defencoding = 'utf-8';
$this->service->decode_utf8 = false;
$this->service->xml_encoding = 'utf-8';
$params = array("user"=>$user,"pwd"=>$pwd);
$result = $this->array_to_obj($this->service->call("getTicket",$params));
print_r($result->name);
4.最关键的一点,对于复杂对象nusoap的返回值是一个array,不同于SoapClient的stdObject,为了保持兼容性,搞了一个函数来进行数组和对象的转换,就是上面的array_to_obj ,实现过程如下:
function array_to_obj($array)
{
$obj = new stdClass();
foreach ($array as $key => $value)
{
if (is_array($value))
{
$obj->$key = $this->array_to_obj($value);
}
else
{
$obj->$key = $value;
}
}
return $obj;
}
NuSOAP是一组功能强大的PHP类,使得使用和创建SOAP消息变得相当简单。NuSOAP由Dirtrich Ayala编写,可以无缝地与很多最流行的SOAP服务实现交互,它遵循LGPL发布。NuSOAP提供了很多令人印象深刻的特性,包括:站长教学网 eduyo.com
●简单:NuSOAP的面向对象方法隐藏了SOAP消息组装、解析、提交和接收的有关细节,使用户集中于应用程序本身。
●WSDL生成和导入:NuSOAP可以生成一个对应于所发布Web服务的WSDL文档,并且能导入一个WSDL引用在NuSOAP客户端使用。
●代理类:NuSOAP可以生成的一个代理类,允许调用远程方法,如同调用本地方法一样。
●HTTP代理:出于多种原因(安全性和审计是其中两个原因),有些客户端被强制将请求委托给HTTP代理,由代理代表客户端执行请求。也就是说,需要所有SOAP请求都传递给此代理,而不是直接查询服务器。NuSOAP为指定代理服务器提供了基本支持。
●SSL:如果可以通过PHP使用CURL扩展,NuSOAP还支持通过SSL的安全通信。
php的SoapClient是专门用来访问web服务的类
PHP5里的SoapClient:
$this->service = new SoapClient("http://localhost/frontservice/service.php?class=myworkManager&wsdl");
$result = $this->service->getTicket($user,$pwd);
print_r($result->name);
(责任编辑:ken)