php中soap 的使用实例无需手写WSDL文件,提供自动生成WSDL文件类

最近工作的内容使用到了接口!
对于系统接口:
现下接触的有两种!

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(); //处理请求 ?>

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/1f6c42cdeb600d163cff23da32db4d4f.html