0

0

WebService最常用的两种方法

php中文网

php中文网

发布时间:2016-06-21 08:57:16

|

1068人浏览过

|

来源于php中文网

原创

企业级应用,主要是讲PHP5对webservice的一些实现(以下的程序可以被JAVA,NET,C等正常调用) 国内用PHP写WebService的真的很少,网上资料也没多少,公司的项目开发过程中,经历了不少这方面的东西,写出来以供大家参考

客户端

代码:
01. 02.header ( "Content-Type: text/html; charset=utf-8" );
03./*
04.* 指定WebService路径并初始化一个WebService客户端
05.*/
06.$ws = "http://soap/soapCspMessage.php?wsdl";
07.$client = new SoapClient ( $ws, array ('trace' => 1, 'uri' => 'http://www.zxsv.com/SoapDiscovery/' ) );
08./*
09.* 获取SoapClient对象引用的服务所提供的所有方法
10.*/
11.echo ("SOAP服务器提供的开放函数:");
12.echo ('

'); 
13.var_dump ( $client->__getFunctions () );
14.echo ('
');
15.echo ("SOAP服务器提供的Type:");
16.echo ('
'); 
17.var_dump ( $client->__getTypes () );
18.echo ('
');
19.echo ("执行GetGUIDNode的结果:");
20.//$users = $client->GetUsers();
21.//var_dump($HelloWorld );
22.$parameters = array('uname'=>'zxsv',"upassword"=>'123');
23.$out = $client->HelloWorld($parameters);
24.$datadb = $out->HelloWorldResponse;
25.var_dump($out);
26.?>

服务端

代码:

01. 02.class Member
03.{
04.public $UserId;
05.public $Name;
06.public function __construct($parmas){
07.$this->UserId = $parmas[0];
08.$this->Name = $parmas[1];
09.}
10.}
11.$servidorSoap = new SoapServer('testphp.xml',array('uri' => 'http://www.TestPHP.com/','encoding'=>'utf-8','soap_version' => SOAP_1_2 ));
12.$servidorSoap->setClass(Testphp);
13.$servidorSoap->handle();
14.class Testphp {
15.public function HelloWorld($uid){
16.return array('HelloWorldResult'=>"mystring".$uid->{'uname'}.' and '.$uid->{'upassword'});
17.}
18.public function GetMember($uid){
19.$s=array();
20.for($i=0;$i{'uid'};$i++){
21.$s[] =&new Member(array($i, $uid->{'uname'}.'我测试'.$i));
22.}
23.return   array('GetMemberResult'=>$s);
24.}
25.}
26.?>

到这里应该都看的懂吧
下面是WSDL文件

代码:

001.
002.http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.TestPHP.com/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://www.TestPHP.com/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
003.
004.http://www.TestPHP.com/">
005.
006.
007.
008.
009.
010.

011.

012.

013.
014.
015.
016.
017.

018.

019.

020.
021.
022.
023.
024.
025.

026.

027.

028.
029.
030.
031.
032.

033.

034.

035.
036.
037.
038.

039.

040.
041.
042.
043.
044.

045.

046.

047.

048.
049.
050.

051.
052.
053.

054.
055.
056.

057.
058.
059.

060.
061.
062.
063.
064.

065.
066.
067.
068.

069.

070.
071.http://schemas.xmlsoap.org/soap/http" />
072.
073.http://www.TestPHP.com/HelloWorld"   />
074.
077.
078.
079.

080.

081.
082.http://www.TestPHP.com/GetMember"  />
083.
086.
087.
088.

089.

090.

091.
092.http://schemas.xmlsoap.org/soap/http" />
093.
094.http://www.TestPHP.com/HelloWorld"  />
095.
098.
099.
100.

101.

102.
103.http://www.TestPHP.com/GetMember"  />
104.
107.
108.
109.

110.

111.

112.
113.
114.

http://soap/goodwsdl/testphp.php" />
115.

116.
117.
http://soap/goodwsdl/testphp.php" />
118.

119.
120.

这里有返回的两个字段,一个是返回字符串,这个很好理解

01.
02.
03.
04.
05.
06.

07.

08.

09.
10.
11.
12.
13.

14.

15.

这一段就字符串的
那返回数组的就比较麻烦了,我和老农搞了一两周才发现是WSDL文件写错了,看下面的一段

01.
02.
03.
04.
05.
06.

07.

08.

09.
10.
11.
12.
13.

14.

15.

16.
17.
18.
19.

20.

21.
22.
23.
24.
25.

26.

第一段GetMember是输入,最重要的是GetMemberResponse这段,看type=”tns:ArrayOfMember”这里,返回一 个数组,WSDL中定义了ArrayOf这个,后面的就简单了,ArrayOfMember的类型是type=”tns:Member” ,从name=”Member”得到要返回的数组,完工。

非常淘 淘宝客源码
非常淘 淘宝客源码

本源码是我用过最好的淘客站源码。对于新站长很用帮助。重要!!注意上传完程序后要先登陆后台修改域名,否则会跳转到后台已设置的域名。 使用方法1:将文件夹里面的文件上传至您的空间根目录(不要在本地测试,本地测试期间功能将被限制,首页模板显示不正常!)2:访问网址http://您的网址/admin 账号:admin 密码:admin3:填写您基本网站信息,以及重要的淘客相关信息 声明:本程序使用权是本人

下载

Ping Service,博客程序提供一种通知机制,以便在第一时间将博客的更新信息发布到提供Ping Service服务的网站,写聚合的时候研究了一下
先看标准吧
这是一个标准的Ping Service,用XMLRPC来传数据的,注释写的这么详细,代码说明就不需要了吧,PHP5开启XMLRPC方法
client.php


代码:
01. 02.$host  = 'zxsv';
03.$port  = 80;
04.$rpc_server = '/test/xmlrpc_server.php';
05.$title = 'zxsv';
06.$server = 'http://zxsv/test/';
07.$rss = 'http://zxsv/test/rss.php';
08.//weblogUpdates.Ping方法
09.$Ping = xmlrpc_encode_request('weblogUpdates.Ping', array($title, $server ));
10.//weblogUpdates.extendedPing方法
11.$extendedPing = xmlrpc_encode_request('weblogUpdates.extendedPing', array($title, $server, $rss ));
12.//调用rpc_client_call函数把所有请求发送给XML-RPC服务器端后获取信息
13.$response = rpc_client_call($host, $port, $rpc_server, $Ping);
14.$split = '';
15.$xml =  explode($split, $response);
16.$xml = $split . array_pop($xml);
17.$response = xmlrpc_decode($xml);
18.//输出从RPC服务器端获取的信息
19.print_r($response);
20./**
21.* 函数:提供给客户端进行连接XML-RPC服务器端的函数
22.* 参数:
23.* $host  需要连接的主机
24.* $port  连接主机的端口
25.* $rpc_server XML-RPC服务器端文件
26.* $request  封装的XML请求信息
27.* 返回:连接成功成功返回由服务器端返回的XML信息,失败返回false
28.*/
29.function rpc_client_call($host, $port, $rpc_server, $request) {
30.  
$fp = fsockopen($host, $port);
31.  
$query = "POST $rpc_server HTTP/1.0\nUser_Agent: XML-RPC Client\nHost: ".$host."\nContent-Type: text/xml\nContent-Length: ".strlen($request)."\n\n".$request."\n";
32.  
if (!fputs($fp, $query, strlen($query))) {
33.      
$errstr = "Write error";
34.      
return false;
35.  
}
36.  
$contents = '';
37.  
while (!feof($fp)){
38.      
$contents .= fgets($fp);
39.  
}
40.  
fclose($fp);
41.  
return $contents;
42.}
43.?>

server.php


代码:
01. 02./**
03.* 函数:提供给RPC客户端调用的函数
04.* 参数:
05.* $method 客户端需要调用的函数
06.* $params 客户端需要调用的函数的参数数组
07.* 返回:返回指定调用结果
08.*/
09.function rpc_server_extendedping($method, $params) {
10.   
$title = $params[0];
11.   
$server = $params[1];
12.   
$rss = $params[2];
13.       
//中间的判断,成功返回$XML_RPC_String
14.   
$XML_RPC_String = array('flerror'=>false,'message'=>'Thanks for the ping.');
15. 
return $XML_RPC_String;
16.}
17.function rpc_server_ping($method, $params) {
18.   
$title = $params[0];
19.   
$server = $params[1];
20.       
//中间的判断,成功返回$XML_RPC_String
21.   
$XML_RPC_String = array('flerror'=>false,'message'=>'Thanks for the ping.');
22. 
return $XML_RPC_String;
23.}
24.//产生一个XML-RPC的服务器端
25.$xmlrpc_server = xmlrpc_server_create();
26.//注册一个服务器端调用的方法rpc_server,实际指向的是rpc_server_extendedping函数
27.xmlrpc_server_register_method($xmlrpc_server, "weblogUpdates.extendedPing", "rpc_server_extendedping");
28.xmlrpc_server_register_method($xmlrpc_server, "weblogUpdates.Ping", "rpc_server_ping");
29.//接受客户端POST过来的XML数据
30.$request = $HTTP_RAW_POST_DATA;
31.//print_r($request);
32.//执行调用客户端的XML请求后获取执行结果
33.$xmlrpc_response = xmlrpc_server_call_method($xmlrpc_server, $request, null);
34.//把函数处理后的结果XML进行输出
35.header('Content-Type: text/xml');
36.echo $xmlrpc_response;
37.//销毁XML-RPC服务器端资源
38.xmlrpc_server_destroy($xmlrpc_server);
39.?>

类写的,有BUG


代码:

01. 02.class Pings {
03.   
public $xmlrpc_server;
04.   
public $xmlrpc_response;
05.   
public $methodName;
06.   
public function __construct() {
07.       
//产生一个XML-RPC的服务器端
08.       
$this->xmlrpc_server = xmlrpc_server_create ();
09.       
$this->run ();
10.   
}
11.
12.   
//注册一个服务器端调用的方法rpc_server,实际指向的是ping函数
13.   
public function rpc_server() {
14.       
$this->methodName = !$this->methodName ? 'weblogUpdates.extendedPing':'weblogUpdates.Ping';
15.       
xmlrpc_server_register_method ( $this->xmlrpc_server, $this->methodName, array (__CLASS__, "ping"));
16.   
}
17.       
/**
18.    
* 函数:提供给RPC客户端调用的函数
19.    
* 参数:
20.    
* $method 客户端需要调用的函数
21.    
* $params 客户端需要调用的函数的参数数组
22.    
* 返回:返回指定调用结果
23.    
*/
24.   
public function ping($method, $params) {
25.       
$this->title = $params [0];
26.       
$this->server = $params [1];
27.       
$this->rss = $params [2];
28.       
$this->tag = $params [3];
29.       
//$a  = $this->title ? $this->update():'';
30.       
$string = array ('flerror' => false, 'message' => 'Thanks for the ping.', 'legal' => "You agree that use of the blueidea.com ping service is governed by the Terms of Use found at www.blueidea.com." );
31.       
return $string;
32.   
}
33.
34.   
public function update(){
35.       
echo '这里放更新的一些条件';
36.   
}
37.
38.   
public function run() {
39.       
$this->rpc_server ();
40.       
$request = isset ( $GLOBALS ["HTTP_RAW_POST_DATA"] ) ? file_get_contents ( "php://input" ) : $GLOBALS ["HTTP_RAW_POST_DATA"];
41.       
$this->xmlrpc_response = xmlrpc_server_call_method ( $this->xmlrpc_server, $request, null );
42.       
//把函数处理后的结果XML进行输出
43.       
header ( 'Content-Type: text/xml' );
44.       
echo $this->xmlrpc_response;
45.   
}
46.
47.   
//销毁XML-RPC服务器端资源
48.   
public function __destruct() {
49.       
xmlrpc_server_destroy ( $this->xmlrpc_server );
50.   
}
51.}
52.$Obj = new Pings ( );
53.?>

WebService的最常用的两种方法算是写齐了



本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号