Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
usando WebServices
Saulo Arruda
(http://sauloarruda.eti.br)
Arquitetura
Usando WebServices e SOAP possvel que o prprio servidor que o site est
hospedado, geralmente Apache + PHP, fornea o servio pela porta 443
eliminando a necessidade de abertura de portas em firewalls tanto do cliente
quanto do servidor.
SOAP Server
<?php
class SolicitacaoService {
// Definio da classe...
}
Devo admitir que tive vrios problemas para escrever o arquivo WSDL da
forma correta, j que nunca tinha feito isso manualmente.
Depois, criei uma aplicao em Delphi usei o "WSDL Importer" para criar uma
unit a partir do arquivo WSDL. Esse um recurso bastante prtico, pois as
interfaces dos mtodos e definio dos tipos j so criados automaticamente.
Neste momento resolvi usar uma implementao do protocolo SOAP para PHP
bastante simples chamada NuSOAP. Agora consegui a compatibilidade com o
PHP4 e melhor, sem necessidade de instalao de nenhuma extenso do PHP
no servidor de produo.
<?php
function gravar($arrAttr) {
return "ACK";
}
// Definio do servio
$server = new soap_server();
$server->configureWSDL("SolicitacaoService",
"urn:UsuarioService");
// Executa a requisio
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA)
? $HTTP_RAW_POST_DATA : "";
$server->service($HTTP_RAW_POST_DATA);
?>
Por outro lado, no foi possvel utilizar classes, pois o registro do mtodo
gravar usando SolicitacaoService.gravar gerava um WSDL com nomes
de mtodos no muito agradveis, ento preferi usar funes mesmo.
Esse cliente em Delphi tambm dever ser incorporado no ERP sendo que cada
vez que uma solicitao for gravada, uma chamada WebService ser feita para
sincroniz-la. Alm disso, ser necessrio tratar erros implementando uma fila
de chamadas do servio que falharam para que seja feita uma nova tentativa.
Autenticao
<?php
function login($usuario, $senha) {
if ($usuario == "service" && $senha == "secret") {
$ticket = md5(uniqid());
session_name($ticket);
session_start();
$_SESSION["login"] = true;
return $ticket;
} else {
return "401: Usurio ou senha invlidos";
}
}
<?php
function checkLogin($ticket) {
session_name($ticket);
session_start();
return isset($_SESSION["login"]);
}
?>
<?php
function gravar($arrAttr) {
if (!checkLogin($ticket)) {
return "401: Autenticao no encontrada";
}
return "ACK";
}
Concluses
Qualquer dvida, crtica ou sugesto sobre o tema deste artigo pode ser
enviada para o e-mail contato@sauloarruda.eti.br ou via comentrios deste
artigo publicado no endereo http://sauloarruda.eti.br/.
Licena