当前位置: 首页 > 工具软件 > NuSOAP > 使用案例 >

WebService接口之nusoap

屠浩
2023-12-01

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

 类似资料: