Desenvolvimento - PHP

Requisições SOAP_WSDL no PHP (webservices)

Neste artigo construiremos uma requisição SOAP_WSDL para consultarmos informações de livros dado o seu ISBN via webservice.

por Marcelo Santos Araujo



Primeiramente, instale o pacote SOAP da PEAR (repositório de extensões e aplicações para o PHP). Utilize o gerenciador de pacotes da pear ou faça download do pacote no seguinte site: http://pear.php.net. Não se esqueça de verificar as dependências com outros pacotes.

Logo abaixo, construiremos uma requisição SOAP_WSDL para consultarmos informações de livros dado o seu ISBN. Este webservice está disponível em http://www.webservicex.net/WS/default.aspx.

Um WSDL (webservice definition language) segue o seguinte padrão (apenas uma amostra de uma definição WSDL):

<wsdl:definitions targetNamespace="http://www.webserviceX.NET">

	<wsdl:types>
	<s:schema elementFormDefault="qualified" targetNamespace="http://www.webserviceX.NET">
	<s:element name="GetISBNInformation">
	<s:complexType>
	<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="Code" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>

Abaixo, um formulário construído para capturar um isbn dado pelo usuário:

<?php

// construção do formulário para consulta de ISBN
// formulário construído com a HTML_QuickForm
// construtor HTML_QuickForm("nome_formulario","metodo","acao");

require_once("HTML/QuickForm.php");
echo "<center>";
$form = new HTML_QuickForm("form_isbn","POST","ver_isbn.php");
$form->setRequiredNote("<font face=verdana size=2>* campo obrigatório</font>");
$form->setJsWarnings("Erro(s):","Preencha corretamente os campos acima");
$form->addElement("header", null, "<center><font face=verdana size=2> Consulta de livro</font></center>");
$form->addElement("text", "isbn", "<font face=verdana size=2> ISBN:</font>", array("size"
=> 21, "maxlength" => 30));
$form->addElement("submit","botao_enviar","Ok");
$form->display();

?>

Neste exemplo, o webservice ISBN já disponibiliza um arquivo WSDL. Existem casos que é necessário a requisição SOAP sem a definição WSDL, o que pode ser um pouco mais trabalhoso. Vamos lá!

<?php
$isbn = $_POST["isbn"];

// utilização da classe SOAP_WSDL("url no formato WSDL");
// método GetISBNInformation(isbn);

require_once("SOAP/Client.php");
$wsdl =new SOAP_WSDL("http://www.webservicex.net/isbn.asmx?WSDL");
$client = $wsdl->getProxy();
$ret = $client->GetISBNInformation($isbn);
echo $ret;

?>

Como dito anteriormente, existem vários webservices disponíveis no formato WSDL. Procure nos seguintes links:

- http://www.webservicex.net/
- http://www.xmethods.com/

Especificação do WSDL:
- http://www.w3.org/TR/wsdl

Espero ter colaborado!

Marcelo Santos Araujo

Marcelo Santos Araujo