PHP的soap 之 nusoap 的使用
今天不知道为什么想起了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 = new soap_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 "注册值<br>";
print_r ($reversed);
echo "<br>";
$refresh_username = "叁石";
$refresh_randomnum = "d8A9";
$params1 = array('refresh_userName'=>$refresh_username,'refresh_randomNum'=>$refresh_randomnum);
$reversed = $client->call('refresh',$params1);
//echo "取得值<br>";
print_r ($reversed);
echo "<br>";
$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的代码做分析
PHP的soap 之 nusoap 的使用的更多相关文章
- 如何在symfony 控制器里面创建soap web service
通过一些工具将一个控制器设置成一个soap服务将会非常简单.首先,你必须安装了php soap扩展.由于php soap扩展现在不能生成wsdl,你要么自己从头开始创建要模使用第三方生成器. php中 ...
- 利用NuSoap开发WebService(PHP)
利用NuSoap开发WebService(PHP) 分类: php 2010-09-08 12:00 5005人阅读 评论(1) 收藏 举报 webservicephpsoapstringencodi ...
- NuSOAP与PHPRPC比较(转)
因为看到有人问 Nusoap 和 PHPRPC 的比较,为了让大家能够更清楚地了解 Nusoap 和 PHPRPC 的关系,所以在这里做一个简要的说明性介绍,所写的内容也不是面面俱到的,只写了一些主要 ...
- PHP基于SOAP实现webservice
简单对象访问协议(SOAP)是一种轻量的.简单的.基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息. SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( H ...
- nusoap
PHP SOAP服务器 用PHP和NuSoap来建立SOAP服务器非常容易.基本上,你只要写出你想要暴露给你的Web services的函数,然后用NuSoap去注册它们就可以了.OK,另外还需要两步 ...
- SOAP: java+xfire(web service) + php客户端
作者: 吴俊杰 web service这项技术暂不说它有多落伍,但是项目中用到了,没法逃避! xml和json各有各的好处,但是JSON无疑是当今数据交互的主流了.客户soap服务器端用的是 j ...
- 终于解决了PHP调用SOAP过程中的种种问题。(转)
最近在做公司和第三方的一个合作项目,需要调用统一验证接口和统一支付接口.由于牵涉公司机密,所以我要单独写一层PHP的接口给第三方用.前面那个验证接口主要卡在了des加密的方式上,这个有时间再说.这篇主 ...
- 利用PHP SOAP实现WEB SERVICE
php有两个扩展可以实现web service,一个是NuSoap,一个是php 官方的soap扩展,由于soap是官方的,所以我们这里以soap来实现web service.由于默认是没有打开soa ...
- Nginx、SSL双向认证、PHP、SOAP、Webservice、https
本文是1:1模式,N:1模式请参见新的一篇博客<SSL双向认证(高清版)> ----------------------------------------------------- 我是 ...
随机推荐
- C语言基础 (11) 结构体 ,共用体 枚举 typedef
1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...
- 【JavaScript框架封装】使用Prototype给Array,String,Function对象的方法扩充
/* * @Author: 我爱科技论坛* @Time: 20180705 * @Desc: 实现一个类似于JQuery功能的框架* V 1.0: 实现了基础框架.事件框架.CSS框架.属性框架.内容 ...
- [JoyOI] 1035 棋盘覆盖 (二分图匹配)
题目描述 给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少12的多米诺骨牌进行掩盖. 输入格式 第一行为n,m(表示有m个删除的格子) 第二行到m+1行为x,y,分 ...
- Rmq Problem mex
求区间mex.莫队可做. 但如果强制在线,就可以用主席树做. 建立权值线段树,找每个数最后一次出现的位置.查询的时候找第r棵线段树最近出现位置在l之前的最小数即可.update的时候可以update这 ...
- Oracle数据库性能优化基础
1.数据处理分类OLTP,OLAP 2.Oracle特性 3.数据库优化方法论/原则 方法论:自顶向下优化和自底向上优化 3.1 自顶向下优化 3.2 自底向上优化 对于多年的老系统出现性能问题时,就 ...
- 【XSY2384】【GDOI2017】微信
致去年的我:这是道广义SAM模板题啊…… 题意: Description Input Output HINT $1\leq N\leq 20$,$1\leq Q\leq 10^5$,字符串总长$\le ...
- Springboot分布式锁实践(redis)
springboot2本地锁实践一文中提到用Guava Cache实现锁机制,但在集群中就行不通了,所以我们还一般要借助类似Redis.ZooKeeper 之类的中间件实现分布式锁,下面我们将利用自定 ...
- 洛谷 U6850 手机密码
U6850 手机密码 题目背景 小明的手机上设了一个由四个数字组成的密码,但是小明自己的记性不好,但又不想把密码直接记在纸上,于是便想了一个方法. 题目描述 小明有四行数字,每行数字都有n[i](&l ...
- thrift java示例
thrift java示例 使用IntelliJ IDEA作为开发工具: 增加proto文件夹,里面写上sayHello.proto syntax = "proto3"; opti ...
- UI_UISlider控件
#pragma mark - 创建控件 UISlider - (void)createSlider { // 也是继承与 UIControl UISlider *slider = [[UISlider ...