Home >Backend Development >PHP Tutorial >PHP soap Web Service uses SoapDiscovery.class.php to generate wsdl files, _PHP tutorial
PHP soap web service uses wsdl files demo:
================================================== ===============
Server:
Before using the soap webservice demo of wsdl, first use the cw.php file to generate the wsdl file. The code is as follows:
cw.php:
<?<span>php </span><span>include</span>("service.php"<span>); </span><span>include</span>("SoapDiscovery.class.php"<span>); </span><span>$disco</span> = <span>new</span> SoapDiscovery('soapHandle', 'myService'); <span>//</span><span>第一个参数是类名(生成的wsdl文件就是以它来命名的),即Service类,第二个参数是服务的名字(这个可以随便写)。</span> <span>$disco</span>->getWSDL();<br /><br />?>
service.php:
<?<span>php </span><span>include_once</span>("soapHandle.class.php"<span>); </span><span>$server</span> = <span>new</span> SoapServer('soapHandle.wsdl', <span>array</span>('soap_version' => SOAP_1_2)); <span>#</span><span>#此处的Service.wsdl文件是上面生成的</span> <span>$server</span>->setClass("soapHandle"); <span>//</span><span>注册Service类的所有方法 </span> <span>$server</span>->handle(); <span>//</span><span>处理请求</span> ?>
soapHandle.class.php :
<?<span>php </span><span>class</span><span> soapHandle{ </span><span>public</span> <span>function</span> strtolink(<span>$url</span>=''<span>){ </span><span>return</span> <span>sprintf</span>('<a href="%s">%s</a>', <span>$url</span>, <span>$url</span><span>); } </span><span>public</span> <span>function</span> add(<span>$a</span>=1, <span>$b</span>=2<span>) { </span><span>return</span> <span>$a</span>+<span>$b</span><span>; } } </span>?>
SoapDiscovery.class.php code is as follows:
================================================== ============
92eb45140643a481564f5b16bd980a49class_name = $class_name; $this->service_name = $service_name; } /** * SoapDiscovery::getWSDL() Returns the WSDL of a class if the class is instantiable. * * @return string **/ public function getWSDL() { if (empty($this->service_name)) { throw new Exception('No service name.'); } $headerWSDL = "0fceb78a3d7fd36b54d62f54d08f5d68n"; $headerWSDL.= "fd5936aa290c47c7469d2d2a0e6d8d24service_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"; $headerWSDL.= "3616e775a87de808d245184907eb6a7fn"; if (empty($this->class_name)) { throw new Exception('No class name.'); } $class = new ReflectionClass($this->class_name); if (!$class->isInstantiable()) { throw new Exception('Class is not instantiable.'); }$methods = $class->getMethods(); $portTypeWSDL = '02efcd21d425f2cbeee316dfae276254service_name.'Port">'; $bindingWSDL = '5e6ff54368dc13dc87599154a5be208dservice_name.'Binding" type="tns:'.$this->service_name."Port">nbd31bd2fce261d239084bb55a9469069n"; $serviceWSDL = '45beddf829ad393ddc707bb84dd607f1service_name."">ndf34d2b26116543ff930477ab75c1680n9588589b133ee15909dcee8c4b421e05service_name.'Port" binding="tns:'.$this->service_name."Binding">c3169ca96fb260f8383d83af4a68acb6nb99adf09bba1702852b32782733b87e1n07aad2482592b0629b89dc8fa8f9c2a7n"; $messageWSDL = ''; foreach ($methods as $method) { if ($method->isPublic() && !$method->isConstructor()) { $portTypeWSDL.= '71d757a30493f0169e5e15d0825905ebgetName()."">n".'5b07250d1c6544b55de15d983c3b128egetName()."Request" />n5c7d130b74de118d2b0c8573155e3604getName()."Response" />n1ad87f86f8fa8a96626cc7ccfa3a84c1n"; $bindingWSDL.= '71d757a30493f0169e5e15d0825905ebgetName()."">n".'770a48f79ca5186d7910d5a619b7deabservice_name.'#'.$this->class_name.'#'.$method->getName()."" />nd5fd7aea971a85678ba271703566ebfdbbaf80dc7c554b71402a04abb7936b4bservice_name" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />n96ac42c95369ad8c9dbbd274b6bcc83anbe6d67dae90cc1ad6469079e163d0939nbbaf80dc7c554b71402a04abb7936b4bservice_name" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" />nd76c8de0b204cd1b17c9571b0bbcceb6n1ad87f86f8fa8a96626cc7ccfa3a84c1n"; $messageWSDL.= 'd6364a72a6e1acd1bf9463aa3ccad55cgetName()."Request">n"; $parameters = $method->getParameters(); foreach ($parameters as $parameter) { $messageWSDL.= '450ec9ce891aa7ba89b4a18c9fdc56b5getName()."" type="xsd:string" />n"; } $messageWSDL.= "dc97c94abba54b3574a1f2a9fcb1679bn"; $messageWSDL.= 'd6364a72a6e1acd1bf9463aa3ccad55cgetName()."Response">n"; $messageWSDL.= 'c33bd57d944a491bb9e1bab73962e059getName()."" type="xsd:string" />n"; $messageWSDL.= "dc97c94abba54b3574a1f2a9fcb1679bn"; } } $portTypeWSDL.= "27dce114b4c1ba2dfb0528e105ceb3d8n"; $bindingWSDL.= "1e9f7c3e258ea1744ae938c0d94cef77n"; //return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '7f07ce786ddcd59b488e151585f6d792'); $fso = fopen($this->class_name . ".wsdl", "w"); fwrite($fso, sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, '7f07ce786ddcd59b488e151585f6d792')); } /** * SoapDiscovery::getDiscovery() Returns discovery of WSDL. * * @return string **/ public function getDiscovery() { return "0fceb78a3d7fd36b54d62f54d08f5d68nb41d29e33c868174e1c908f743454defn44a56b1a87335bff21091f2da3088745n6f4e04d14d894b590db95b28e2c72d22"; } } ?> View Code
客户端:
client.php 代码:
=============================================================
<?<span>php </span><span>ini_set</span>('soap.wsdl_cache_enabled', "0"); <span>//</span><span>关闭wsdl缓存</span> <span>$soap</span> = <span>new</span> SoapClient('http://localhost/soap/service.php?wsdl'<span>); </span><span>echo</span> <span>$soap</span>->strtolink('http://www.baidu.com')."<br/>"<span>; </span><span>echo</span> <span>$soap</span>->add(28, 100)."<br/>"<span>; </span><span>echo</span> <span>$soap</span>->__soapCall('add',<span>array</span>(28,200))."<br/>"<span>; </span><span>//</span><span>或这样调用</span> <span>echo</span> <span>$soap</span>->__Call('add',<span>array</span>(28,300))."<br/>"<span>; </span><span>echo</span> <span>date</span>('Y-m-d H:i:s', <span>time</span><span>()); </span>?>
================ END====================