php怎么生成wsdl文件?

办法有两种:

1.zend studio生成

对于zend studio 9之前的版本貌似直接生成:

File ->New -> Other-> Webservice-> WSDL

怎么生成wsdl文件?

对于zend studio 9需要安装wsdl插件:

1、打开zendstudio9,选择help(帮助)->welcome

2、在右边的列表中找到WSDL Support,勾选

3、点击Apply changes(应用修改)

4、zde会自动安装,然后提示要重启,点击restart now(现在重新启动)

怎么生成wsdl文件?

wsdl支持安装完毕,下面我们来生成一个wsdl文件,步骤如下:

1、选择保存wsdl的项目文件夹

2、右键-new(新建)->other(其他)

3、在弹出的对话框中选择web services,在下级菜单中选择WSDL file,点击next进入下一步

4、命名你的wsdl文件,点击next进入下一步

5、修改target namespace(目标名称空间),其他不变,点击finish。

2.利用SoapDiscovery.class.php生成

这个文件源码:

 

  1. <?php
  2. class SoapDiscovery {
  3. private $class_name = ”;
  4. private $service_name = ”;
  5. /**
  6. * SoapDiscovery::__construct() SoapDiscovery class Constructor.
  7. *
  8. * @param string $class_name
  9. * @param string $service_name
  10. **/
  11. public function __construct($class_name = ”, $service_name = ”) {
  12. $this->class_name = $class_name;
  13. $this->service_name = $service_name;
  14. }
  15. /**
  16. * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable.
  17. *
  18. * @return string
  19. **/
  20. public function getWSDL() {
  21. if (empty($this->service_name)) {
  22. throw new Exception(‘No service name.’);
  23. }
  24. $headerWSDL = “<?xml version=\”1.0\” ?>\n”;
  25. $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”;
  26. $headerWSDL.= “<types xmlns=\”http://schemas.xmlsoap.org/wsdl/\” />\n”;
  27. if (empty($this->class_name)) {
  28. throw new Exception(‘No class name.’);
  29. }
  30. $class = new ReflectionClass($this->class_name);
  31. if (!$class->isInstantiable()) {
  32. throw new Exception(‘Class is not instantiable.’);
  33. }
  34. $methods = $class->getMethods();
  35. $portTypeWSDL = ‘<portType name=”‘.$this->service_name.’Port”>’;
  36. $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”;
  37. $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</port>\n</service>\n”;
  38. $messageWSDL = ”;
  39. foreach ($methods as $method) {
  40. if ($method->isPublic() && !$method->isConstructor()) {
  41. $portTypeWSDL.= ‘<operation name=”‘.$method->getName().”\”>\n”.'<input message=”tns:’.$method->getName().”Request\” />\n<output message=\”tns:”.$method->getName().”Response\” />\n</operation>\n”;
  42. $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</input>\n<output>\n<soap:body use=\”encoded\” namespace=\”urn:$this->service_name\” encodingStyle=\”http://schemas.xmlsoap.org/soap/encoding/\” />\n</output>\n</operation>\n”;
  43. $messageWSDL.= ‘<message name=”‘.$method->getName().”Request\”>\n”;
  44. $parameters = $method->getParameters();
  45. foreach ($parameters as $parameter) {
  46. $messageWSDL.= ‘<part name=”‘.$parameter->getName().”\” type=\”xsd:string\” />\n”;
  47. }
  48. $messageWSDL.= “</message>\n”;
  49. $messageWSDL.= ‘<message name=”‘.$method->getName().”Response\”>\n”;
  50. $messageWSDL.= ‘<part name=”‘.$method->getName().”\” type=\”xsd:string\” />\n”;
  51. $messageWSDL.= “</message>\n”;
  52. }
  53. }
  54. $portTypeWSDL.= “</portType>\n”;
  55. $bindingWSDL.= “</binding>\n”;
  56. return sprintf(‘%s%s%s%s%s%s’, $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, ‘</definitions>’);
  57. }
  58. /**
  59. * SoapDiscovery::getDiscovery() Returns discovery of WSDL.
  60. *
  61. * @return string
  62. **/
  63. public function getDiscovery() {
  64. 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</disco:discovery>”;
  65. }
  66. }
  67. ?>

 

使用案例:

 

  1. <?php
  2. /**
  3. * by www.phpddt.com
  4. */
  5. include(“Compute.php”); //你要生成的文件
  6. include(“SoapDiscovery.class.php”);
  7. $disco = new SoapDiscovery(‘Compute’,’Compute’);//第一个参数是类名(生成的wsdl文件就是以它来命名的),即person类,第二个参数是服务的名字(这个可以随便写)。
  8. $wsdl = $disco->getWSDL();
  9. //$disco->getDiscovery();
  10. $fp = fopen(“Compute.wsdl”, “w”);
  11. fwrite($fp, $wsdl);
  12. ?>

 


发表评论 0

Your email address will not be published. Required fields are marked *