许多机构已经采用了Apach和PHP作为他们的Web应用环境。在Web services模式中采用PHP可能看上去可能会比较难。但是事实上,搭配NuSoap,你可以轻松的应用PHP构建SOAP的客户端和服务器端。
PHP SOAP服务器
用PHP和NuSoap来建立SOAP服务器非常容易。基本上,你只要写出你想要暴露给你的Web services的函数,然后用NuSoap去注册它们就可以了。OK,另外还需要两步才能完成PHP SOAP服务器的建立。首先你还要在你的PHP代码中创建NuSoap对象的一个实例,然后用HTTP POST方法将原始数据传给NuSoap进行处理
NuSOAP的使用比较简单,其中最常用到的类是soap_server和soapclient, 其中soap_server用于创建 Webservice服务,类soapclient则用于调用Webservice .这两个类的定义都在lib/nusoap.php中,因此我们在创建 或调用Webservice接口程序时均需要引用该文件.
NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService。它是一个开源软件,是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类,由NuSphere
Corporation(http://dietrich.ganx4.com/nusoap/
)开发。NuSOAP的一个优势是不需要扩展库的支持,这种特性使得NuSoap可以用于所有的PHP环境,不受服务器安全设置的影响。
1.
首先,去
http://sourceforge.net/projects/nusoap/
下载
nusoap-0.9.5.zip ,解压后把 lib 文件夹放到与你的
WebService 程序相同的目录,如
/WebService/lib 。
2. 服务端:建立 nusoapService.php 文件。
<?php require_once ("lib/nusoap.php"); $server = new soap_server (); // 避免乱码 $server->soap_defencoding = ‘UTF-8‘; $server->decode_utf8 = false; $server->xml_encoding = ‘UTF-8‘; $server->configureWSDL ( ‘sayHello‘ ); // 打开 wsdl 支持 /* 注册需要被客户端访问的程序 类型对应值: bool->"xsd:boolean";
string->"xsd:string"; int->"xsd:int";
float->"xsd:float"; */ $server->register ( ‘sayHello‘, // 方法名 array ("name" => "xsd:string" ), // 参数,默认为 "xsd:string"; array ("return" => "xsd:string")// 返回值,默认为 "xsd:string";
); //isset 检测变量是否设置 $HTTP_RAW_POST_DATA = isset ( $HTTP_RAW_POST_DATA ) ? $HTTP_RAW_POST_DATA : ‘‘; //service 处理客户端输入的数据 $server->service ( $HTTP_RAW_POST_DATA ); /** * 供调用的方法 * @param $name */ function sayHello($name) { return "Hello, { $name } !"; } ?>
3. 客户端:建立 nusoapClient.php 文件。
<?php require_once ("lib/nusoap.php"); /* 通过 WSDL 调用 WebService 参数 1 WSDL 文件的地址 ( 问号后的 wsdl 不能为大写 ) 参数 2 指定是否使用 WSDL $client = new soapclient(‘http://localhost/WebService/nusoapService.php?wsdl‘,true); */ $client = new soapclient ( ‘http://localhost/WebService/nusoapService.php‘ ); $client->soap_defencoding = ‘UTF-8‘; $client->decode_utf8 = false; $client->xml_encoding = ‘UTF-8‘; // 参数转为数组形式传递 $paras = array (‘name‘ =>; ‘Bruce Lee‘ ); // 目标方法没有参数时,可省略后面的参数 $result = $client->call ( ‘sayHello‘, $paras ); // 检查错误,获取返回值 if (! $err = $client->getError ()) { echo " 返回结果: ", $result; } else { echo " 调用出错: ", $err; } ?>
注:
用 nusoap 实现 WebService, 不要开启 php 的 SOAP 扩展
文件代码不能有任何输出 , 否则调用时会报类似如下错误:
XML error parsing SOAP payload on line
x( 行号 ): Reserved XML Name