最近工作的内容使用到了接口!
对于系统接口:
现下接触的有两种!
1、URL类型的接口
URL路由带参数式的接口!这个很好做!只要有过Web开发经验的人都能完成!
这种接口数据不够隐蔽性,可以直接在浏览其中看到,
如支付宝的交易请求URL。需要加一个MD5签名,和服务器端的再次向支付宝服务器发送验证!
虽然soap方式传递的数据隐蔽性很好!但为了数据安全,难免也需要进行数据签名。
2、SOAP类型的接口
无关编程语言、无关平台、扩展性很好
要实现一个SOAP 型的接口,有两种方式:一种有WSDL文件方式、一中无WSDL文件方式!
对于热爱研究型的人来说,使用第一种方式可以让你清楚的了解PHP是怎么创建了一个Web Service!
但第一种对于新手来说,创建一个XML格式的WSDL文件,是比较难的,这你的先了解熟悉什么是XML!
学会XML语法!
但对于一个急于解决问题的人来说!没有这么多的时间去熟悉!所以这是件烦恼的事!
不过不急,上面说了,还有一种无需WSDL文件的方式!而且,本讲解还提供了一个自动生成WSDL文件的类!
讲解前,先配置下PHP的soap环境支持:
找到php.ini文件
;extension=php_soap.dll
删除掉";" ,重启apache服务器
一、有WSDL文件方式
在这里先介绍标准的webservice。
那么如何创建wsdl呢?对于PHP来说这确实是件很不容易的事情,有人说用zend studio创建很方便,这是一种方法。但对于那些不喜欢用zend studio的人来说,会觉得创建一个web service还要安装zend studio,太强人所难了。
在这里介绍一个简单的方法,到网上下载SoapDiscovery.class.php类,里面有个公用方法:getWSDL,这个方法末尾是用的return,那么,你修改一下这个方法:
//return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>');
//生成wsdl文件,将上面的return注释
$fso = fopen($this->class_name . ".wsdl" , "w");
fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</definitions>'));
现在生成wsdl的类有了,SoapDiscovery.class.php(源码在最末尾)。
再准备一个提供服务的Service.php类文件或者函数就可以创建wsdl了!
<?php class Service { public function HelloWorld() { return "Hello"; } public function Add($a, $b) { return $a + $b; } } ?>
创建wsdl文件的creat_wsdl.php
<?php include("Service.php"); include("SoapDiscovery.class.php"); $disco = new SoapDiscovery('Service', 'soap'); //第一个参数是类名(生成的wsdl文件就是以它来命名的),即Service类,第二个参数是服务的名字(这个可以随便写)。 $disco->getWSDL();
运行create_wsdl.php文件,此时会生成一个Service.wsdl的文件
再在Service.php文件中添加一些代码
<?php class Service { public function HelloWorld() { return "Hello"; } public function Add($a, $b) { return $a + $b; } } $server = new SoapServer('Service.wsdl', array('soap_version' => SOAP_1_2)); $server->setClass("Service"); //注册Service类的所有方法 $server->handle(); //处理请求 ?>