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:
- NuSOAP (http://sourceforge.net/projects/nusoap/)
- PEAR::SOAP
- Ctrx_SOAP_AutoDiscover ( http://crtx.org/index.php?area=Main&page=CrtxSoapAutoDiscover)
- Webservice Helper tool (http://www.jool.nl/new/index.php?file_id=1)
- WSDL_Gen (http://www.schlossnagle.org/~george/php/WSDL_Gen.tgz)
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


















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.
[...] Modo Texto e PHP http://imasters.uol.com.br/artigo/4353/webservices_com_aplicacoes_m… http://crisdev.eti.br/webservice-com-wsdl-no-php.html http://www.linhadecodigo.com.br/Artigo.aspx?id=756 [...]
Olá Cristian! Minha grande dúvida com relação aos webservices é: como acessar o WSDL por outras linguagens! Por exemplo: meu WS foi criado em PHP. Tenho o WSDL funcionando direitinho! Como usar o ASP (por exemplo) para “conversar” com o wsdl? Obrigado.
A real é que PHP é um horror. Na época do ASP clássico e do Windows NT ele era novidade e talz, mas agora que as demais tecnologias amadureceram, ela se tornou totalmente primitiva, não tem identididade e seu suporte a OO é uma piada. Pior que ainda tem vários fan-boy perdidos por aí.
A real é que muita gente pode discordar de vc, inclusive o pessoal do facebook
ô… PHP é mesmo um horror!!
Acho que o pessoal do Facebook, Wikipedia, entre muitos outros “ninguéns” acham a mesma coisa!
Estou tentando acessar o seguinte WebService
http://personah.cmsw.com.br/Sale/services/Compra?wsdl
Utilizando o seguinte script em PHP
—
// Create the client instance
$client = new SoapClient(‘http://personah.cmsw.com.br/Sale/services/Compra?wsdl‘);
print_r($client);
// Call the SOAP method
$result = $client->requestCompra(”);
print_r($result);
—
Conforme imagem é retornado erro não o retorno do Webservice
http://dl.dropbox.com/u/4109497/Mesa%201_008.png
Já nesse exemplo abaixo sobre o programa .NET SOAP e postando um determinado XML ao WebService é feito o retorno do WebService
http://dl.dropbox.com/u/4109497/exemplo.JPG
Preciso de informação para acessar esse WebService via PHP
Meu deus Renato vulgo “PHP é mesmo um horror”, em que mundo vc vive cara?
Hahahaha é uma piada mesmo, falar que PHP é um horror, você deve ser algum programador que usa programação orientada à Click…. deve ser esse seu problema.
Amigos não sei como faço para enviar um xml de entrada e retorne um xml de saida utilianzando o web service
Me ajudem por favor
Renato, me desculpe, mas cite uma linguagem aqui que seja simples de usar, maleavel e que tenha uma comunidade maior do que o php. Eu acho o seguinte, se voce fecha os olhos e começa a programar em uma unica linguagem, como certamente é o que esta fazendo, ainda mais se for um java da vida, voce ficará pobre para sempre. Sai dessa meu filho. Abre os olhos antes que seja, pois a tecnologia muda muito rapido mas o php fica.
Senhores, como faço para autenticar utilizando certificado tipo A3? tem algum exemplo?
José,
Tem um projeto excelente que faz isso, acho que pode te dar uma boa orientação: http://www.nfephp.org/
abs