-->

Webservice com WSDL no PHP

6

Category : PHP

 

Criar Webservices no PHP é uma tarefa realtivamente simples, a grande dificuldade esta em gerar WSDL´s. Isso acontece porque apesar do PHP5 trazer grandes funcionalidades nesse campo, ele não gera o WSDL. Para ajudar, criar WSDL´s é extremamente complexo, com todas as suas variações e opções.

Quando disposnibilizamos um webservice para a plataforma PHP é facil e muito rápido de ser feito, apenas algumas linhas de código para o server e para o client são suficientes para realizar a transação.

Exemplo1:

server.php:

<?php

 
      /*
       * Função utilizada para autenticar o usuário na rede.
      */
    function Auth($login, $senha){
   
      if(trim($login) == NULL){
          return 0;
      }
   
      $dbconn = pg_connect("host=10.0.0.1 port=5432 dbname=database user=master password=master");
      $query = "select count(*) from usuarios where login=’".$login."’ and pass=’".$senha."’";
   
      $result =  pg_query($dbconn, $query);
   
      return $row[0]; // retorna 1 se validar, retorna 0 se não validar
   
   
    } 
 
  $server = new SoapServer(null, array(’uri’ => ‘http://auth.localhost.com.br/ws_auth/’)); // cria o ambiente para servir o webservice

  $server->addFunction("Auth"); // adiciona a função de autenticação ao escopo

  $server->handle();

 
?>
 

cliente.php:

<?php

    /**
     * Cria uma instancia do webservice
     */

    $client = new SoapClient(null,array(
    ‘location’ => ‘http://auth.localhost.com.br/ws_auth/server.php’,
    ‘uri’ => ‘http://auth.localhost.com.br/ws_auth/’,
    ‘trace’ => 1));

    /**
     * Para charmar a autenticação deve-se passar o login e a senha que ser quer validar como segue
     *
     * $result = $client->Auth(’login’,’senha’);
     *
     */
   
       $result = $client->Auth(’usuario’,’senha’);
    
      
       /**
        * resultado da autenticação
     *
     */
    print_r($result);
 
?>
 

E pronto, muito simples não? O problema é que esse tipo de webservice não é processado por outras plataformas por não gerar WSDL. Plataformas como .NET, JAVA e RUBY precisa de um WSDL para seguir o modelo do objeto que será gerado. Para resolver isso, você pode criar um WSDL seguindo as especificações do W3C (http://www.w3.org/TR/wsdl) ou usar alguma classe de terceiro.

Temos:

Eu já trabalhei com NuSOAP mas deixei de lado, pois ela possui um nome que entra em conflito com uma função nativa do PHP, e para evitar dores de cabeça na distribuição eu resolvi optar por outra classe. Eu escolhi a Webservice Helper tool, por sua facilidade de uso. Todas as classes acima são utilizadas em ambiente de produção, basta escolher a que se adeque melhor ao seu uso.

A Webservice Helper tool consegue criar WSDL com PHP de uma maneira muito fácil e direta. Basicamente se escreve uma classe, adiciona essa classe ao escopo e pronto, o WSDL está pronto para usar, não vou por um exemplo completo aqui para não ficar com o post muito longo, caso tenha alguma dúvida me mande um e-mail. A classe é bem explicada e possui um exemplo muito bom. Você pode baixa-la aqui.

 

Tags BlogBlogs: php, wsdl no php, wsdl, webservice, webservice com php

Comments (6)

Blza Cristian,
ótimo post, eu estou criando um webservices em php utilizando o nusoap.
Já está tudo OK, mas tenho uma dúvida, criarei diversas funções, preciso em cada função ter um parametro de autenticação (login/senha) ou consigo com que o client primeiro faça a autenticação, depois comece a executar as outra funções?

vlw…Inácio

Eu acho melhor criar um método que autentique, ai você autentica o usuário e nos métodos que precisar autenticar, você valida a sessão.

Voce tem como colocar um exemplo conectando ao banco do webservice helper

Jackson, não tenho nenhum codigo pronto, me fale sua dúvida que eu tento ajudar.

Bom dia, eu tentei executar o script do link “http://crisdev.eti.br/arqs/wshelper1_5.zip” e me retornou os seguintes erros:

Warning: SoapClient::SoapClient(http://localhost/soap/wshelper/service.php?class=contactManager&wsdl) [soapclient.soapclient]: failed to open stream

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘http://localhost/soap/wshelper/service.php?class=contactManager&wsdl’ : failed to load external entity “http://localhost/soap/wshelper/service.php?class=contactManager&wsdl”

Você poderia me ajudar?
Grato.

Post a comment