Skip to main content

NuSOAP webService接口使用例子详解

PHP SOAP服务器

用PHP和NuSoap来建立SOAP服务器非常容易。基本上,你只要写出你想要暴露给你的Web services的函数,然后用NuSoap去注册它们就可以了。OK,另外还需要两步才能完成PHP SOAP服务器的建立。

首先你还要在你的PHP代码中创建NuSoap对象的一个实例,然后用HTTP POST方法将原始数据传给NuSoap进行处理

NuSOAP的使用比较简单,其中最常用到的类是soap_serversoapclient, 其中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.zip 。
  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 ('test'); // 打开 wsdl 支持
/*
注册需要被客户端访问的程序
类型对应值: bool->"xsd:boolean" string->"xsd:string"
int->"xsd:int" float->"xsd:float"
*/
$server->register ( 'GetTestStr', // 方法名
array ("name" => "xsd:string" ), // 参数,默认为 "xsd:string"
array ("return" => "xsd:string" ) ); // 返回值,默认为 "xsd:string"

$server->register ( 'GetTestStr2', // 方法名
array ("name" => "xsd:string" ), // 参数,默认为 "xsd:string"
array ("return" => "xsd:array" ) ); // 返回值,默认为 "xsd:array"

//isset 检测变量是否设置
$HTTP_RAW_POST_DATA = isset ( $HTTP_RAW_POST_DATA ) ? $HTTP_RAW_POST_DATA : '';
//service 处理客户端输入的数据
$server->service ( $HTTP_RAW_POST_DATA );
/**
* 供调用的方法
* @param $name
*/
function GetTestStr($name) {
return "Hello, { $name } !";
}
function GetTestStr2($name) {
return array('name'=>$name);
}

?>
  1. 客户端:建立 nusoapClient.php 文件。
<?php

require_once ("lib/nusoap.php");
/*
通过 WSDL 调用 WebService
参数 1 WSDL 文件的地址 ( 问号后的 wsdl 不能为大写 )
参数 2 指定是否使用 WSDL
$client = new soapclient('http://localhost/nusoap-0.9.5/nusoapService.php',true);
*/
//$client = new soapclient ('http://localhost/nusoap-0.9.5/nusoapService.php',true);


// $proxyhost = isset($_POST['proxyhost']) ? $_POST['proxyhost'] : '';
// $proxyport = isset($_POST['proxyport']) ? $_POST['proxyport'] : '';
// $proxyusername = isset($_POST['proxyusername']) ? $_POST['proxyusername'] : '';
// $proxypassword = isset($_POST['proxypassword']) ? $_POST['proxypassword'] : '';