当前位置:首页 > PHP教程 > php类库 > 列表

php中SOAP WebService的wsdl文件生成类

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-10 13:58:38 浏览: 评论:0 

php中SOAP WebService的wsdl文件生成类是一段老外写的代码非常的简单好用了并且我用了很久没碰到过什么问题,希望对各位有帮助.

代码如下:

  1. class SoapDiscovery { 
  2.     private $class_name = ''; 
  3.     private $service_name = ''; 
  4.     /** 
  5.      * SoapDiscovery::__construct() SoapDiscovery class Constructor. 
  6.      *  
  7.      * @param string $class_name 
  8.      * @param string $service_name 
  9.      * */ 
  10.     public function __construct($class_name = '', $service_name = '') { 
  11.         $this->class_name = $class_name; 
  12.         $this->service_name = $service_name; 
  13.     } 
  14.     /** 
  15.      * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable. 
  16.      *  
  17.      * @return string 
  18.      * */ 
  19.     public function getWSDL() { 
  20.         if (emptyempty($this->service_name)) { 
  21.             throw new Exception('No service name.'); 
  22.         } 
  23.         $headerWSDL = "<!--?xml version=\"1.0\" ?-->\n"; 
  24.         $headerWSDL.= "<definitions name="\"$this-">service_name\" targetNamespace=\"urn:$this->service_name\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\" xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:tns=\"urn:$this->service_name\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns=\"http://schemas.xmlsoap.org/wsdl/\">\n"; 
  25.         $headerWSDL.= "<types xmlns="\"http://schemas.xmlsoap.org/wsdl/\"">\n"; 
  26.         if (emptyempty($this->class_name)) { 
  27.             throw new Exception('No class name.'); 
  28.         } 
  29.         $class = new ReflectionClass($this->class_name); 
  30.         if (!$class->isInstantiable()) { 
  31.             throw new Exception('Class is not instantiable.'); 
  32.         } 
  33.         $methods = $class->getMethods(); 
  34.         $portTypeWSDL = '<porttype name="' . $this->service_name . 'Port">'; 
  35.         $bindingWSDL = '<binding name="' . $this->service_name . 'Binding" type="tns:' . $this->service_name . " port\"="">\n<soap:binding style="\"rpc\"" transport="\"http://schemas.xmlsoap.org/soap/http\"">\n"; 
  36.         $serviceWSDL = '<service name="' . $this->service_name . " \"="">\n<documentation>\n<port name="\""" .="" $this-="">service_name . 'Port" binding="tns:' . $this->service_name . "Binding\"><soap:address location="\"http://"" .="" $_server['server_name']="" ':'="" $_server['server_port']="" $_server['php_self']="" "\"="">\n</soap:address></port>\n</documentation></service>\n"; 
  37.         $messageWSDL = ''; 
  38.         foreach ($methods as $method) { 
  39.             if ($method->isPublic() && !$method->isConstructor()) { 
  40.                 $portTypeWSDL.= '<operation name="' . $method->getName() . " \"="">\n" . '<input message="tns:' . $method->getName() . " request\"="">\n<output message="\"tns:"" .="" $method-="">getName() . "Response\" />\n</output></operation>\n"; 
  41.                 $bindingWSDL.= '<operation name="' . $method->getName() . " \"="">\n" . '<soap:operation soapaction="urn:' . $this->service_name . '#' . $this->class_name . '#' . $method->getName() . " \"="">\n<input><soap:body use="\"encoded\"" namespace="\"urn:$this-">service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n\n<output>\n<soap:body use="\"encoded\"" namespace="\"urn:$this-">service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />\n</soap:body></output>\n</soap:body></soap:operation></operation>\n"; 
  42.                 $messageWSDL.= '<message name="' . $method->getName() . " request\"="">\n"; 
  43.                 $parameters = $method->getParameters(); 
  44.                 foreach ($parameters as $parameter) { 
  45.                     $messageWSDL.= '<part name="' . $parameter->getName() . " \"="" type="\"xsd:string\"">\n"; 
  46.                 } 
  47.                 $messageWSDL.= "</part></message>\n"; 
  48.                 $messageWSDL.= '<message name="' . $method->getName() . " response\"="">\n"; 
  49.                 $messageWSDL.= '<part name="' . $method->getName() . " \"="" type="\"xsd:string\"">\n"; 
  50.                 $messageWSDL.= "</part></message>\n"; 
  51.             }  //开源软件:phpfensi.com 
  52.         } 
  53.         $portTypeWSDL.= "</soap:binding></binding></porttype>\n"; 
  54.         $bindingWSDL.= "\n"; 
  55.         return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '</types></definitions>'); 
  56.     } 
  57.     /** 
  58.      * SoapDiscovery::getDiscovery() Returns discovery of WSDL. 
  59.      *  
  60.      * @return string 
  61.      * */ 
  62.     public function getDiscovery() { 
  63.         return "<!--?xml version=\"1.0\" ?-->\n<disco:discovery xmlns:disco="\"http://schemas.xmlsoap.org/disco/\"" xmlns:scl="\"http://schemas.xmlsoap.org/disco/scl/\"">\n<scl:contractref ref="\"http://"" .="" $_server['server_name']="" ':'="" $_server['server_port']="" $_server['php_self']="" "?wsdl\"="">\n</scl:contractref></disco:discovery>"; 
  64.     } 
  65. } 

使用方法如下:

$a = new SoapDiscovery();

然后里面的方法与类就可以直接调用了.

Tags: SOAP WebService wsdl

分享到: