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

php nusoap client,PHP的soap 之 nusoap 的使用

郭志
2023-12-01

今天不知道为什么想起了soap 这个东西,然后就弄了下,在php上使用的是nusoap。 一些基本的使用,高深的麻烦您自己看手册去

这个软件的下载在http://sourceforge.net/projects/nusoap/files/nusoap/0.9.5/nusoap-0.9.5.zip/download 下面我会加上附件。

说说这个东西,我曾经以为能用这个东西完成跨域名登陆,但是今天发现好象实现不了,

到底在什么地方可以应用上,也很茫然,希望知道在那里应用的朋友指点下,谢谢了!

关于soap的具体的原理,什么的我就不多说,想知道的你网上自己找下,基本上就是http协议与xml的应用。

先说下个这个东西的实现原理,基本上就向服务器发送请求实现一个服务器上的函数运行,然后得到返回值。

值,我感觉应该是string或者数组,或者int值,应该不能用对象的。

先看一个基本的使用很简单的

这是 soap_server.php 文件  这个在网络上能找的到

include_once("lib/nusoap.php"); //插入文件

$server=new soap_server(); //生成对象

$server->configureWSDL("test_wsdl", "");$server->wsdl->schemaTargetNamespace="urn:test_wsdl";$server->register("hello", //方法名

array("name"=>"xsd:string",

"call"=>"xsd:string",

"tele"=>"xsd:string",),//输入参数

array("return"=>"xsd:string",),//输出参数

"urn:test_wsdl",//名字空间

"urn:test_wsdl#hello",//名字空间#要操作的函数名

"rpc",//style

"encoded",//use

"This is test."//说明

);//test方法实现

function hello($name,$call,$tele) {if($name==""){return new soap_fault("Client","","Must supply a valid name.");

}return "Hello, " . $name." ".$call." ".$tele;

}//Use the request to (try to) invoke the service

$HTTP_RAW_POST_DATA=isset($HTTP_RAW_POST_DATA)?$HTTP_RAW_POST_DATA:"";$server->service($HTTP_RAW_POST_DATA);

在你写完了以后,在浏览器里输入url,应该会看到一个页面,根据那个页面分析下,会有很大的收获,

client端要根据上面的使用

这个是soap _client.php

include_once("lib/nusoap.php"); //插入文件

//设置参数数组

$para=array("name"=>"sera1ph.Liu",

"call"=>"123456",

"phone"=>"12345678",);//生成客户端对象,注意下面的url ?wsdl是必须加的前面为服务端的文件

$client=new soapclient("http://localhost/nusoap/soap_server.php?WSDL");//呼叫/使用 那个函数,注意名字空间的区分

$return=$client->call(‘hello‘,$para,"http://localhost/soap/test_wsdl","test_wsdl#hello");print_r($return);

上面是一个很基本的使用,我想不过多的说了

下面看一个比较复杂的使用

require_once(‘../../lib/nusoap.php‘);//取得值返回 返回的是一个数组

function validate($userName,$randomNum)

{$temp[‘userName‘] = $userName;$temp[‘randomNum‘] =$randomNum;return $temp;

}//本想做个set一个get方法,但是这个时候发现了一个问题,以后再说

function refresh($refresh_userName,$refresh_randomNum)

{$temp[‘userName‘] = $userName;$temp[‘randomNum‘] =$randomNum;return $temp;

}function logout($logout_userName)//注销用户名(退出登录)

{$flag=$logout_userName;if($logout_userName=="" || $logout_userName!="叁石")

{$flag = -1;

}return $flag;

}$soap = newsoap_server();//参数一,服务名字,也就是server文件

//参数二,名字空间

$soap->configureWSDL(‘AuthorityServicewsdl‘, ‘urn:AuthorityServicewsdl‘);//参数设置空间

$soap->wsdl->schemaTargetNamespace = ‘urn:AuthorityServicewsdl‘;//上面跟原来的基本一样,但是大家注意声明的时候发生了变化

//下面是设置一个返回的数组类型

//参数一,为你自己命名的数据类型

//参数二,混合类型,不用管

//参数三。为结构体,或者数组(array)

//参数四,按照什么排序,有三个选择all(全部)|sequence(次序)|choice(选择)

//参数五,基本约束

//注意:上面5个我们不用改变

//参数6,最重要的参数,也就是我们返回的类型想对应

//返回数组下标 =>array(‘name‘=>"数组下标",‘type‘=>"xsd:对应的类型")

//类型基本包括 string,int, date,boolean 这几种形式

$soap->wsdl->addComplexType(‘userInfo‘,‘complexType‘,‘struct‘,‘all‘,‘‘,

array(‘userName‘ => array(‘name‘=>‘userName‘, ‘type‘=>‘xsd:string‘),

‘randomNum‘ => array(‘name‘=>‘randomNum‘, ‘type‘=>‘xsd:string‘)

)

);//这里是注册函数

//参数一,函数名

//参数二,是这个函数接受的参数,注意指定类型

//参数三,为返回的值,不一定名字非叫return,叫其他的也可以,注意返回的类型,

//我这里是返回我自己定义的类型 tns:userInfo 如果为基本的类型为 xsd:string 这个样子

//其他的参数,只要统一就可以了,尤其是名字空间跟 soapaction

$soap->register(‘validate‘, //method name

array(‘userName‘ => ‘xsd:string‘,‘randomNum‘ => ‘xsd:string‘), //input parameters

//array(‘return‘ => ‘xsd:string‘), // output parameters

array(‘return‘ => ‘tns:userInfo‘),

‘urn:AuthorityServicewsdl‘, //namespace

‘urn:AuthorityServicewsdl#validate‘, //soapaction

‘rpc‘, //style

‘encoded‘, //use

‘验证用户名及随机数‘ //documentation

);$soap->register(‘refresh‘, //method name

array(‘refresh_userName‘ => ‘xsd:string‘,‘refresh_randomNum‘ => ‘xsd:string‘), //input parameters

//array(‘return‘ => ‘xsd:string‘),// output parameters

array(‘return‘ => ‘tns:userInfo‘),

‘urn:AuthorityServicewsdl‘, //namespace

‘urn:AuthorityServicewsdl#refresh‘, //soapaction

‘rpc‘, //style

‘encoded‘, //use

‘按时地方‘ //documentation

);$soap->register(‘logout‘, //method name

array(‘logout_userName‘ => ‘xsd:string‘), //input parameters

array(‘return‘ => ‘xsd:int‘), //output parameters

‘urn:AuthorityServicewsdl‘, //namespace

‘urn:AuthorityServicewsdl#logout‘, //soapaction

‘rpc‘, //style

‘encoded‘, //use

‘退出登录‘ //documentation

);//大家可能对 $HTTP_RAW_POST_DATA 这个变量比较疑惑,我们没有定义,怎么出来的呢

//我也有这样的想法,不过我看了下手册解释是 usually is the value of $HTTP_RAW_POST_DATA

//所以大家就别管它了,就这样使用吧

$soap->service($HTTP_RAW_POST_DATA);

我们现在看下 客户端的使用

require_once(‘../../lib/nusoap.php‘);$client=new soapclient(‘http://localhost/nusoap/samples/server/AuthorityService.php?wsdl‘,true);$err = $client->getError();$username = "叁石";$randomnum = "d8A9";$params1 = array(‘userName‘=>$username,‘randomNum‘=>$randomnum);$reversed = $client->call(‘validate‘,$params1);//此为返回值

//echo "注册值
";

print_r ($reversed);echo "
";$refresh_username = "叁石";$refresh_randomnum = "d8A9";$params1 = array(‘refresh_userName‘=>$refresh_username,‘refresh_randomNum‘=>$refresh_randomnum);$reversed = $client->call(‘refresh‘,$params1);//echo "取得值
";

print_r ($reversed);echo "
";$logout_username = "叁石";$params1 = array(‘logout_userName‘=>$logout_username);$reversed = $client->call(‘logout‘,$params1);echo $reversed;

这个就不用多说了,一看应该就明白了 是数组返回的我使用print_r输出了

关于这个功能,我说下我做的实验

首先我用set方法设置了下一个公共变量的值,当用get取得的时候,值为空

说明,每次是建立一个新的访问所以值没有保留

测试2,我使用cookie 设置的值,在get方法的时候,没有取得

说明:没闹明白原因

测试3,使用session  在get方法的时候,也没有取得值

说明,没闹明白

但是取得文件或者数据库连接取得值是没有问题的,也就是可以取得固定介质中的值,文件或者数据库

这个东西到底能干什么还真不清楚,我想是可以完成,2种不同语言的交接,比如 php与asp与jsp的交互

也许有人茫然了,我这里丢了一个感念,soap返回的是一个流,所有可以当作文本流来对待,

使用socket取得。

关于nusoap的使用就到这里了,我不大去弄它的具体原理了,能够使用就够了!所以没有对nusoap的代码做分析

原文:http://www.cnblogs.com/syphper/p/3818696.html

 类似资料: