使用PHP如何获取WSDL中定义的方法列表




我应用的场景是,从WSDL中读取定义好的所有方法的方法名,再将这些方法名形成一个列表在前端供用户选择来调用,不知道PHP有没有什么库是可以做到的?



php有内置的函数__getFunctions ():



<?php 

 

$client  = new  SoapClient ( './myfile.wsdl' ); 

 

var_dump ( $client -> __getFunctions ()); 

 

?>





SoapClient::__getFunctions



评论 (3) •  链接



  • 0 0 => string 'UNKNOWN getOrderList()' (length=22)
    1 => string 'UNKNOWN addOrder(UNKNOWN $data, string $t)' (length=42)
    2 => string 'UNKNOWN delOrder(UNKNOWN $data)' (length=31)
    返回的结果节选如上,我觉得上面这些字符串还是挺难处理,因为目前我只需要那个方法名就OK了,是不是应该写个正则来匹配? –  黄远威  2012-08-27
  • 0 我也遇到过这情况,参数类型是UNKNOWN,不知道如何解决 –  eink  2012-10-19
  • 0 但是在PHP5.3不会出现这情况 –  eink  2012-10-19




通过PHP的反射机制应该也是可以的,我这里写了一个例子,不过由于没有wsdl文件,所以没有测试,思路应该就是这样,你拿去改改应该没有问题



<?php

 

$soap  = @new  SoapClient ('x.wsdl'); 

 

$reflector = new ReflectionObject($soap);

 

$functions = $reflector->getMethods(ReflectionMethod::IS_PUBLIC||ReflectionMethod::isProtected||ReflectionMethod::isProtected) as $method

 

var_dump($functions);





评论 (0) •  链接






以下为我们最近接口的一个例子,这个例子的特点是应用了WSDL中的Header安全参数:



<?php

 

$soapClient = new SoapClient("http://*****.wsdl",array('encoding' => 'UTF-8'));

 

        $sh_param = array(

 

                'Username'    =>    '***',

 

                'Password'    =>    '***');

 

        $headers = new SoapHeader('http://soapserver.example.com/webservices', 'UserCredentials', $sh_param);

 

        

 

        // Prepare Soap Client

 

        $soapClient->__setSoapHeaders(array($headers));

 

        $body_param = array(

 

                'ID'  =>    '***',

 

                'AAID'    =>    '0',

 

        );

 

        $result = $soapClient->FUNCTIONS($body_param);

 

    

 

        print_r($result);

 

        exit;

 

?>