PHP: WebService com WSDL
Postado por Ricardo Falasca em PHP | Data: 18/06/2010
Tags:php, soap, webservice, wsdl
1
Sinceramente não sei qual a demanda para uso de WebServices (SOAP) em PHP, mas sei da dificuldade da compatibilidade quando há a necessidade de consumir o WSDL gerado para a aplicação respectiva, afinal a extensão SOAP nativa do PHP não possui tal recurso, visto que o PHP é uma linguagem que não possui definição explícita de tipos. Sem muita enrolação, após algumas pesquisas encontrei um conjunto de classes PHP chamado NuSOAP que possui método para geração do WSDL seguindo as especificações do W3C, inclusive resolvendo uma preocupação que eu tinha, que era o retorno de um array (complexType) ao invés de um simples integer ou string.
Well… here we go! Abaixo um exemplo simples de geração de WSDL com o NuSOAP, a documentação é bem completa, apesar de pouco explicativa, então boa sorte caso queira se aventurar! :D
Obs.: estou considerando que vc tenha baixado o toolkit NuSOAP, com Apache e PHP devidamente configurados e esteja no diretório corrente publicado em “http://localhost/”.
Crie um arquivo “servidor.php” e coloque o conteúdo abaixo:
-
<?php
-
require_once(‘lib/nusoap.php’);
-
// instanciando um servidor SOAP
-
$servidorSoap = new soap_server();
-
// inicializando suporte ao WSDL
-
$servidorSoap->configureWSDL(‘autenticacaowsdl’,
-
‘urn:autenticacaowsdl’);
-
// nome do método a ser chamado
-
$servidorSoap->register(‘autenticacao’,
-
// parâmetros de entrada do método ‘autenticacao’
-
// parâmetros de saída (retorno do método)
-
‘urn:identificacaowsdl’, // nome de ambiente do webservice (<em>tns</em>)
-
‘urn:identificacaowsdl#identificacao’, // URL do serviço
-
‘rpc’, // estilo do WSDL, <em>rpc</em> ou <em>document
-
</em> ‘encoded’, // option SOAP transport
-
‘retorna 0 ou 1.’ // documentação
-
);
-
// definição do método como função PHP
-
function autenticacao($login, $senha){
-
return (($login == "ricardo") && ($senha == "falasca"))?0:1;
-
}
-
// invocando o serviço
-
$servidorSoap->service($HTTP_RAW_POST_DATA);
-
?>
Agora, crie um arquivo “cliente.php” e use o conteúdo abaixo:
-
-
<?php
-
require_once(‘lib/nusoap.php’);
-
// instanciando um cliente SOAP
-
$clienteSoap = new soap_client(‘http://localhost/servidor.php?wsdl’,
-
true);
-
// verificação de erro
-
$erro = $clienteSoap->getError();
-
if ($erro){
-
exit;
-
}
-
$retorno = $clienteSoap->call(‘identificacao’,
-
‘senha’ => ‘falasca’));
-
?>
Para maiores detalhes você pode acessar pelo navegador o módulo servidor (servidor.php), ele irá gerar informações legíveis para um melhor entendimento da implementação!
Referências:
PHP – WebService (SOAP) (sem suporte a geração de WSDL)
Automatic WSDL Generation (classe PHP para geração de WSDL baseado em documentação do código)
That’s all folks! :D




