WebService  with NuSOAP
Autor: Ademir Braga | Publicado: 2011-01-12T06:16:00-08:00

 É  um conjunto de classes PHP que  permite aos desenvolvedores criar e consumir serviços Web baseados em  SOAP 1.1, 1.1 e WSDL HTTP 1.0/1.1. Pode ser feito download a partir da página:&nbsp;
http://sourceforge.net/projects/nusoap/

Instalação:
Depois de ter baixado uma cópia do nusoap.php, basta colocá-lo em sua árvore de código para que você possa incluí-lo em seu código PHP. Alguns usuários colocaram nele um diretório separado lib. Para o meu exemplo, eu coloquei-o no mesmo diretório como o código de exemplo em si.

Exemplos:
Vamos começar com o exemplo simples "Hello world". Isso vai demonstrar a base de clientes de codificação NuSOAP e servidores.
Vamos começar com o código do servidor, já que sem um servidor, não há necessidade de ter qualquer cliente. O servidor SOAP expõe um método único chamado Hello, o que leva um parâmetro de seqüência única de entrada e retorna um string. Felizmente, os comentários dentro do código fornecer uma explicação suficiente! Para os serviços mais simples, tudo o que vai mudar são as funções a ser definido e registrado.&nbsp;

Nomeie um arquivo como server.php. Seu conteúdo segue abaixo.&nbsp;&nbsp;
&nbsp;require_once('nusoap.php');
// Cria uma instancia do servidor$server = new soap_server;
// Registrando o metodo criado
$server-&gt;register('hello');// Define o metodo 
function hello($name) {
    return 'Hello, ' . $name;
}// Usar o request para invocar o servico
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server-&gt;service($HTTP_RAW_POST_DATA);&nbsp;O cliente para este serviço segue abaixo. Existem algumas coisas importantes a serem observadas. &nbsp;
Primeiro, quando a instância do soapclient é criado, o parâmetro especificado é o URL para o serviço. No meu caso, server.php é acessado a partir http://localhost/projeto/webservice. Os serviços que você consome, é claro, estarão localizados em URLs diferentes.&nbsp;
Em segundo lugar, ao chamar o serviço, o primeiro parâmetro é o nome do serviço. Este deve corresponder ao nome case-sensítive de um método disponível no servidor. Neste exemplo, ele deve corresponder ao método registrados no server.php. &nbsp;
Finalmente, o segundo parâmetro na chamada é um array de parâmetros que serão passados para o método de serviço SOAP. Como o método de server.php Hello requer um único parâmetro, esse array tem um elemento.

require_once('nusoap.php');
// Criar uma instancia do client
$client = new soapclient('http://localhost/projeto/webservice/server.php');
//Chama o metodo call do SOAP
$result = $client-&gt;call('hello', array('name' =&gt; 'Scott'));
// exibe o resultado
print_r($result);
// checando faults
if ($client-&gt;fault) {
    echo '&lt;p&gt;&lt;b&gt;Fault: ';
    print_r($result);
    echo '&lt;/b&gt;&lt;/p&gt;';
} else {
    // Checando erros
    $err = $client-&gt;getError();
    if ($err) {
        echo '&lt;p&gt;&lt;b&gt;Error: ' . $err . '&lt;/b&gt;&lt;/p&gt;';
    } else {
        print_r($result);
    }
}
//Debugando 
echo '&lt;h2&gt;Request&lt;/h2&gt;';
echo '&lt;pre&gt;' . htmlspecialchars($client-&gt;request, ENT_QUOTES) . '&lt;/pre&gt;';
echo '&lt;h2&gt;Response&lt;/h2&gt;';
echo '&lt;pre&gt;' . htmlspecialchars($client-&gt;response, ENT_QUOTES) . '&lt;/pre&gt;';
echo '&lt;h2&gt;Debug&lt;/h2&gt;';
echo '&lt;pre&gt;' . htmlspecialchars($client-&gt;getDebug(), ENT_QUOTES) . '&lt;/pre&gt;';Outro exemplo mais completo, que envolve o cadastro de dados de&nbsp;clientes no banco de dados. O arquivo server.php segue abaixo:&nbsp;$server = new soap_server();
$server-&gt;debug_flag = true;
$server-&gt;configureWSDL('MeuNameSpace', 'WSDL');
$server-&gt;wsdl-&gt;schemaTargetNameSpace='urn:MeuNameSpace';

$server-&gt;register('cadastrar', array('entrada'=&gt;'tns:arrCadastro'), &nbsp;        array('return'=&gt;'xsd:string'),
 'urn:MeuNameSpace',
 'urn:MeuNameSpace#cadastrar',
 'rpc',
 'encoded',
 ''
); $server-&gt;wsdl-&gt;addComplexType('arrCadastro', 'complexType', 'struct', 'all','',
array(
  'full_name'=&gt;array('name'=&gt;'full_name','type'=&gt;'xsd:string')
  ,'email'=&gt;array('name'=&gt;'email','type'=&gt;'xsd:string')
  ,'dat_nascimento'=&gt;array('name'=&gt;'dat_nascimento','type'=&gt;'xsd:string')
  ,'cpf'=&gt;array('name'=&gt;'cpf','type'=&gt;'xsd:string')
 )
);function cadastrar($dados=array()){
 $objCliente = new Cliente();
 if($objCliente)
  $id = $objCliente-&gt;cadastroWebService($dados);
 return "$id";
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server-&gt;service($HTTP_RAW_POST_DATA);E o client para testes: client.php $client = new nusoap_client('http://localhost/projeto/webservice/server.php?wsdl&amp;debug=1', 'wsdl');
$err = $client-&gt;getError();
if ($err) {
 echo '&lt;h2&gt;Constructor error&lt;/h2&gt;&lt;pre&gt;' . $err . '&lt;/pre&gt;';
 echo '&lt;h2&gt;Debug&lt;/h2&gt;';
 echo '&lt;pre&gt;' . htmlspecialchars($client-&gt;getDebug(), ENT_QUOTES) . '&lt;/pre&gt;';
 exit();
}

$dados = array(
  'full_name' =&gt; 'Ademir Braga',
  'dat_nascimento' =&gt; '30/01/1984',
  'cpf' =&gt; '11111111222',
  'email' =&gt; 'ademirbraga100@yahoo.com.br',
  ); $result = $client-&gt;call('cadastrar', array('entrada' =&gt; $dados));

if ($client-&gt;fault) {
 echo '&lt;h2&gt;Fault&lt;/h2&gt;&lt;pre&gt;';
 print_r($result);
 echo '&lt;/pre&gt;';
} else {
 $err = $client-&gt;getError();
 if ($err) {
  echo '&lt;h2&gt;Error&lt;/h2&gt;&lt;pre&gt;' . $err . '&lt;/pre&gt;';
 } else {
  echo '&lt;h2&gt;Result&lt;/h2&gt;&lt;pre&gt;';
  // Decode the result: it so happens we sent Latin-1 characters
  if (isset($result['return'])) {
   $result1 = utf8_decode($result['return']);
  } elseif (!is_array($result)) {
   $result1 = utf8_decode($result);
  } else {
   $result1 = $result;
  }
  print_r($result1);
  echo '&lt;/pre&gt;';
 }
}
echo '&lt;h2&gt;Request&lt;/h2&gt;';
echo '&lt;pre&gt;' . htmlspecialchars($client-&gt;request, ENT_QUOTES) . '&lt;/pre&gt;';
echo '&lt;h2&gt;Response&lt;/h2&gt;';
echo '&lt;pre&gt;' . htmlspecialchars($client-&gt;response, ENT_QUOTES) . '&lt;/pre&gt;';
echo '&lt;h2&gt;Debug&lt;/h2&gt;';
echo '&lt;pre&gt;' . htmlspecialchars($client-&gt;getDebug(), ENT_QUOTES) . '&lt;/pre&gt;';
&nbsp;Este exemplo mostra o cadastro de um cliente no banco de dados, usando o metodo cadastroWebService&nbsp;
contido na classe Cliente via webservice.

Conclusão:
Usando webservices podemos integrar sistemas diferentes e independentes definindo apenas os campos necessários para utilização do lado do client.