Просто используйте nuSOAP. Я не люблю PHP родной SoapClient. NuSoap генерирует для вас wsdl, так что вам не нужно беспокоиться о том, как его создать. Вот nuSOAP и вот простой пример кода, или вы можете скачать весь рабочий код здесь :
Сервер :
<?php
// include the SOAP classes
require_once('nuSOAP/lib/nusoap.php');
function HelloWorld(){
return 'HelloWorld'; // Returns HelloWorld string
}
function Hello($name){
return 'Hello '.$name; // Returns Hello with name string parameter
}
// create the server object
$server = new nusoap_server();
// Initialize WSDL support
$server->configureWSDL('webservicenamespace', 'urn:webservicenamespace');
$server->register('HelloWorld', array(), array('result' => 'xsd:string')); //xsd:string; xsd:boolean; xsd:integer and so on..
$server->register('Hello', array('name' => 'xsd:string'), array('result' => 'xsd:string')); // array('parametername' => 'parametertype'),array('result' => 'returntype');
if (isset($error))
{
$fault =
$server->fault('soap:Server','',$error);
}
// send the result as a SOAP response over HTTP $HTTP_RAW_POST_DATA
$post = file_get_contents('php://input');
$server->service($post);
?>
Клиент :
<code><?php
// Pull in the NuSOAP code
require_once('nuSOAP/lib/nusoap.php');
// Create the client instance
$client = new nusoap_client('http://pathtourl/sample_webservice.php?wsdl', true);
// Check for an error
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Constructor error</h2><pre>' . $err . '
';
// На данный момент вы знаете, что следующий вызов не удастся
}
// Вызов метода SOAP
$ result = $ client-> call ('Hello', array ('name' => 'Scott')); // Вызов имени функции, параметров;
// Проверка на неисправность
if ($ client-> fault) {
echo '
Fault
';
print_r($result);
echo '
';
} еще {
// Проверка на ошибки
$ err = $ client-> getError ();
if ($ err) {
// Показать ошибку
echo '
Ошибка
' . $err . '
';
} еще {
// Показать результат
echo '
Результат
';
print_r($result);
echo '
';
}
}
// Показать запрос и ответ
echo '
Request
';
echo '
' . htmlspecialchars($client->request, ENT_QUOTES) . '
';
echo '
Response
';
echo '
' . htmlspecialchars($client->response, ENT_QUOTES) . '
';
// Показать сообщения отладки
echo '
Debug
';
echo '
' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '
';
?>
Теперь, когда вы хотите сделать клиента нужным вам wsdl, вы можете просто получить его, добавив ? Wsdl в ссылку, т.е.
Надеюсь, это поможет :) Удачи с вашим веб-сервисом.