当前位置: 首页 > 后端技术 > PHP

laravel中支持wsdl的soapServer示例

时间:2023-03-29 22:55:37 PHP

$server=new\SoapServer(null,['uri'=>'noganluonguri']);$server->setObject(newNganluongServer());ob_start();$server->handle();returnob_get_clean();上面的代码是wsdl-free模式,不过这次连接的是第三方服务。我们这里需要定义soapwebservice,第三方调用。第三方定义的是wsdl模式,所以今天研究了一下。Laravel代码示例(其他框架类似的思路):主要逻辑代码-SoapService.phpany('soapUrl','SoapCallbackController@soapFun');route的主要实现方法——如果wsdl不存在就创建,无需手动创建,url:https:xxx/soapurl?wsdlgetWSDL());fclose($文件);}$server=new\SoapServer($storagePath.'/wsdl/'.$className.'.wsdl',array('soap_version'=>SOAP_1_2));$server->setClass($procClass);$服务器->句柄();}catch(\Exception$e){Log::error('wsdl服务创建异常');}}}生成wsdl类-SoapDiscovery.phpclass_name=$class_name;$this->service_na我=$服务名称;}/***SoapDiscovery::getWSDL()如果类是可实例化的,则返回该类的WSDL。**@returnstring**/publicfunctiongetWSDL(){if(empty($this->service_name)){thrownewException('Noservicename.');}$headerWSDL="\n";$headerWSDL.="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";$headerWSDL.="\n";if(empty($this->class_name)){thrownewException('Noclassname.');}$class=newReflectionClass($this->class_name);if(!$class->isInstantiable()){thrownewException('Classisnotinstantiable.');}}$methods=$class->getMethods();$portTypeWSDL='service_name.'Port">';$bindingWSDL='service_name.'Binding"type="tns:'.$this->service_name."Port\">\n\n";$serviceWSDL='service_name."\">\n\nservice_name.'Port"binding="tns:'.$this->service_name."Binding\">\n\n\n";$messageWSDL='';foreach($methods作为$method){if($method->isPublic()&&!$method->isConstructor()){$portTypeWSDL.='getName()."\">\n".'getName()."Request\"/>\ngetName()."Response\"/>\n\n";$bindingWSDL.='getName()."\">\n".'service_name.'#'.$this->class_name.'#'.$method->getName()."\"/>\nservice_name\"encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"/>\n\n<输出>\nservice_name\"encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"/>\n\n\n";$messageWSDL.='getName()."请求\">\n";$parameters=$method->getParameters();foreach($parametersas$parameter){$messageWSDL.='getName()."\"type=\"xsd:string\"/>\n";}$messageWSDL.="\n";$messageWSDL.='getName()."Response\">\n";$messageWSDL.='getName()."\"type=\"xsd:string\"/>\n";$messageWSDL.="\n";}}$portTypeWSDL.="\n";$bindingWSDL.="\n";//返回sprintf('%s%s%s%s%s%s',$headerWSDL,$portTypeWSDL,$bindingWSDL,$serviceWSDL,$messageWSDL,'');//生成wsdl文件,将上面的return注解$fso=fopen($this->class_name.".wsdl","w");fwrite($fso,sprintf('%s%s%s%s%s%s',$headerWSDL,$portTypeWSDL,$bindingWSDL,$serviceWSDL,$messageWSDL,''));}/***SoapDiscovery::getDiscovery()返回WSDL的发现。**@returnstring**/publicfunctiongetDiscovery(){return"\n\n\n";}}?>webservicetestgetSum(10,24);echo$soap->__soapCall('getSum',array(10,24));有问题请追问,感谢支持QQ273086429