标签: webservicephpsoapstringencodingparsing
2010-09-08 12:00
7614人阅读
收藏
举报
NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService,是一个开源软件。它完全采用PHP语言编写、通过HTTP收发SOAP消息的一系列PHP类,由NuSphere Corporation(http://www.nusphere.com/)开发。
它的优势是不需要扩展库的支持,这种特性使它可用于所有的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 = $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}!";
??? }
?>
注:
????? 1.文件代码不能有任何输出,否则调用时会报类似如下错误:
???????????? XML error parsing SOAP payload on line x(行号): Reserved XML Name
????? 2.要以UTF-8 无BOM格式保存,不然客户端调用会出错。
3.客户端:建立nusoapClient.php文件。
<?php
??? require_once("lib/nusoap.php");
??? /*
?????? 通过WSDL调用WebService
?????? 参数1 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($paras);
??? 检查错误,获取返回值
??? if (!$err=$client->getError()) { echo "返回结果:",0); font-family:'Courier New'; font-size:10pt">$result;? }
??? else { echo 调用出错:$err; }
?>
注:用nusoap实现WebService,不要开启php的SOAP扩展