PHP SOAPでWebServiceを実現

7853 ワード

1つ目:WSDLモードClient.phpクライアントリクエストファイルhttp://localhost/soap/Wsdl/wsdl.php?wsdl自分のディレクトリの対応するパスに変更しますか?wsdlは持っていなければなりません.そうしないと、エラーが発生します.
 SOAP_1_2));
    try{
        $result = $client->test();
        echo $result; 
    }catch (SoapFault $f){
        echo "Error Message: {$f->getMessage()}";
    }
?>

SoapDiscovery.class.phpコアクラス
class_name = $class_name;
        $this->service_name = $service_name;
    }

    /**
     *   WSDL
     * 
     * @return string
     **/
    public function getWSDL() {
        if (empty($this->service_name)) {
            throw new Exception('No service name.');
        }
        $headerWSDL = "
"; $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/\">
"; $headerWSDL.= "
"; 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 = ''; $bindingWSDL = '

"; $serviceWSDL = '

service_name.'Port" binding="tns:'.$this->service_name."Binding\">



"; $messageWSDL = ''; foreach ($methods as $method) { if ($method->isPublic() && !$method->isConstructor()) { $portTypeWSDL.= '
".'
getName()."Response\" />

"; $bindingWSDL.= '
".'
service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />


service_name\" encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\" />


"; $messageWSDL.= '
"; $parameters = $method->getParameters(); foreach ($parameters as $parameter) { $messageWSDL.= '
"; } $messageWSDL.= "

"; $messageWSDL.= '
"; $messageWSDL.= '
"; $messageWSDL.= "

"; } } $portTypeWSDL.= "
"; $bindingWSDL.= "
"; // return sprintf('%s%s%s%s%s%s', $headerWSDL, $portTypeWSDL, $bindingWSDL, $serviceWSDL, $messageWSDL, ''); } /** * WSDL * * @return string **/ public function returnWSDL() { return "


"; } } ?>

wsdl.php 处理文件

setClass('YourCode');
    $servidorSoap->handle();
}else{
    require_once './SoapDiscovery.class.php';
    //   WSDL
    $disco = new SoapDiscovery('YourCode','Solsoft_YourCode');
        header("Content-type: text/xml");
    if (isset($_SERVER['QUERY_STRING']) && strcasecmp($_SERVER['QUERY_STRING'],'wsdl')==0) {
        echo $disco->getWSDL();
    }else {
        echo $disco->returnWSDL();
    }
}

?>

yourCode.phpカスタムコードは、wsdlにクラス名を付ける必要があります.phpで使用し、修正に注意します.

説明:
client.phpクライアントリクエストファイルhttp://localhost/soap/Wsdl/wsdl.php?wsdl自分のディレクトリの対応するパスに変更しますか?Wsdl/SoapDiscovery.class.phpコアクラスwsdl.ファイルを処理するphpカスタムコードは、wsdlにクラス名を付ける必要があります.phpで使用し、修正に注意します.
プロジェクトで他の会社のjavaプログラマーとインタフェースをします.彼らのところにはWebサービスしかインタフェースをしません.その後、この拡張を整理して、共有します.
アクセスhttp://localhost/soap/Wsdl/wsdl.php?wsdlで行ないます. 
PHP SOAP实现WebService_第1张图片
 
  PHP SOAP实现WebService_第2张图片