Destaque

Globo.com achou em quem por a culpa!

Copa do Mundo (África do Sul vs México) + Maior Emissora do Brasil + Streaming Ao Vivo = GLOBO.COM! Bom, ao menos foi o que eu imaginei .. vou assistir ao vivo pelo site da Globo,...  Continue lendo

PHP: WebService com WSDL

Postado por Ricardo Falasca em PHP | Data: 18/06/2010

Tags:, , ,

0

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:

  1. <?php
  2. require_once(‘lib/nusoap.php’);
  3. // instanciando um servidor SOAP
  4. $servidorSoap = new soap_server();
  5. // inicializando suporte ao WSDL
  6. $servidorSoap->configureWSDL(‘autenticacaowsdl’,
  7.   ‘urn:autenticacaowsdl’);
  8. // nome do método a ser chamado
  9. $servidorSoap->register(‘autenticacao’,
  10.   // parâmetros de entrada do método ‘autenticacao’
  11.   array(‘usuario’ => ‘xsd:string’, ‘senha’ => xsd:string),
  12.   // parâmetros de saída (retorno do método)
  13.   array(‘return’, ‘xsd:integer’),
  14.   ‘urn:identificacaowsdl’, // nome de ambiente do webservice (<em>tns</em>)
  15.   ‘urn:identificacaowsdl#identificacao’, // URL do serviço
  16.   ‘rpc’, // estilo do WSDL, <em>rpc</em> ou <em>document
  17. </em>  ‘encoded’, // option SOAP transport
  18.   ‘retorna 0 ou 1.’ // documentação
  19. );
  20. // definição do método como função PHP
  21. function autenticacao($login, $senha){
  22.   return (($login == "ricardo") &amp;&amp; ($senha == "falasca"))?0:1;
  23. }
  24. // invocando o serviço
  25. $servidorSoap->service($HTTP_RAW_POST_DATA);
  26. ?>

Agora, crie um arquivo “cliente.php” e use o conteúdo abaixo:

  1.  
  2. <?php
  3. require_once(‘lib/nusoap.php’);
  4. // instanciando um cliente SOAP
  5. $clienteSoap = new soap_client(‘http://localhost/servidor.php?wsdl’,
  6.   true);
  7. // verificação de erro
  8. $erro = $clienteSoap->getError();
  9. if ($erro){   
  10.   printf("<pre>%s</pre>", $erro);     
  11.   exit;
  12. }
  13. $retorno = $clienteSoap->call(‘identificacao’,
  14.   array(‘usuario’ => ‘ricardo’,
  15.            ‘senha’ => ‘falasca’));
  16. print_r($resultadoIdentificacao);
  17. ?>

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:

NuSOAP – SOAP Toolkit for PHP

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

Deixe seu comentário...