PHP SOAPでWebServiceを実現
7853 ワード
1つ目:WSDLモードClient.phpクライアントリクエストファイルhttp://localhost/soap/Wsdl/wsdl.php?wsdl自分のディレクトリの対応するパスに変更しますか?wsdlは持っていなければなりません.そうしないと、エラーが発生します.
SoapDiscovery.class.phpコアクラス
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で行ないます.
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.= '
".'
"; $bindingWSDL.= '
".'
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で行ないます.