WebService接口之nusoap

来源:互联网 发布:软件著作权查询网站 编辑:程序博客网 时间:2024/05/29 15:45

nusoap是PHP环境下的WebService编程工具,用于创建或调用WebService。它是一个开源软件,是完全采用PHP语言编写的、通过HTTP收发SOAP消息的一系列PHP类。
nusoap的一个优势是不需要扩展库的支持,这种特性使得nusoap可以用于所有的PHP环境,不受服务器安全设置的影响。

1.下载nusoap文件
nusoap下载地址 文件在lib/nusoap.php
我的资源nusoap0.9.5

2.服务器端,建立nusoapService.php文件

// 引入nusoap文件require_once 'nusoap.php';$server = new soap_server();// 避免乱码$server->soap_defencoding = 'UTF-8';$server->decode_utf8 = false;$server->xml_encoding = 'UTF-8';$server->configureWSDL('测试接口'); // 打开wsdl支持/*注册需要被客户端访问的程序类型对应值:    bool->"xsd:boolean"    string->"xsd:string"    int->"xsd:int"    float->"xsd:float"*/$server->register(    'GetName',   // 方法名    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 GetName($name) {    return "获取名字为:,  { $name } !";}

3.客户端,建立 nusoapClient.php 文件

// 使用nusoap请关闭phpsoap扩展,否则有冲突require_once ("nusoap.php");/*通过 WSDL 调用 WebService参数 1 WSDL 文件的地址 (问号后的wsdl不能为大写)参数 2  指定是否使用 WSDL$client = new soapclient('http://localhost/api/nusoapService.php?wsdl',true);*/$client = new soapclient('http://localhost/api/nusoapService.php');    // 方法1//$client = new soapclient('http://localhost/api/nusoapService.php?wsdl',true);    // 方法2,如果没有打开wsdl支持,则这个方法错误// 避免乱码$client->soap_defencoding = 'UTF-8';$client->decode_utf8 = false;$client->xml_encoding = 'UTF-8';// 参数转为数组形式传递$paras = array('name' => 'Caffrey Xin' );// 目标方法没有参数时,可省略后面的参数$result = $client->call( 'GetName', $paras );// 检查错误,获取返回值if (!$err = $client->getError()) {    echo " 返回结果: ", $result;} else {    echo " 调用出错: ", $err;}

4.返回结果: Hello, { Caffrey Xin } !

WSDL
WSDL是一种用于描述Web Service的XML语言。它是一种机读格式,把所有的访问服务所必须的信息提供给Web Service客户端。NuSOAP专门提供一个类进行WDSL文件的解析,并且从中提取信息。soapclient对象使用wsdl类来减轻开发者调用服务的难度。通过WSDL信息的帮助来创建报文,程序员仅仅需要知道操作的名字和参数就能调用它。

通过NuSOAP使用WSDL提供以下几点优点:
所有的服务元文件,如命名空间(namespaces),endpoint URLs,参数名(parameter names)等等都可以直接从WSDL文件获得,这样就允许客户端动态的适应服务器端的变化。因为从服务器随时可以获得,所以这些数据不再需要在用户脚本中使用硬性编码。

NuSoap调用WebService出现乱码的解决方法:

$client->soap_defencoding = 'utf-8';    $client->decode_utf8 = false;    $client->xml_encoding = 'utf-8';  

文件代码不能有任何输出 , 否则调用时会报类似如下错误:
XML error parsing SOAP payload on line x( 行号 ): Reserved XML Name

参考:http://blog.csdn.net/haiqiao_2010/article/details/8813126

0 0
原创粉丝点击