|
||
|
|
|
Avaliação:
![]() ![]() ![]() ![]() | Publicado em: 29/04/2007Integração de Sistemas em PHP e Delphi usando WebServices
Todos nós sabemos que um WebService é disponibilizado na Web e por isso, qualquer pessoa pode usar um WSDL Importer da vida e sair fazendo chamadas do seu serviço. Como não é isso que queremos nesse caso, precisamos implementar algum tipo de autenticação. A primeira idéia era usar autenticação HTTP. Mas antes de implementar algo em PHP, resolvi testar os componentes em Delphi para ver se é possível fazer isso. Achei um artigo que pareceu funcionar, mas não fez diferença alguma. A segunda opção era implementar um método login que retorna um ticket usando uma idéia parecida com sistemas de Single Sing On. Na primeira chamada, o cliente chama um método login passando usuário e senha e recebe um ticket que será passado como parâmetro nas próximas chamadas. Desta forma, o método login deve ser definido e registrado conforme o código abaixo: <?php function login($usuario, $senha) { if ($usuario == "service" && $senha == "secret") { session_name($ticket); session_start(); $_SESSION["login"] = true; return $ticket; return "401: Usuário ou senha inválidos"; } // Registra o método login $server->register("login", array("usuario" => "xsd:string", "senha" => "xsd:string"), array("return" => "xsd:string"), "urn:SolicitacaoService", "login", "rpc", "encoded"); O ticket é gerado usando a função uniqid, que garante a geração de um identificador único, e aplicando um hash MD5 ao “id” gerado. Esse ticket é armazenado em uma variável da sessão. Um detalhe importante da implementação da função login é usar a função session_name($ticket) para nomear a sessão com o ticket gerado. Desta forma não existe risco de falhas de segurança, pois cada ticket gerado cria uma nova sessão. Para terminar, a função abaixo valida se o ticket passado por parâmetro é válido: <?php function checkLogin($ticket) { session_name($ticket); session_start(); return isset($_SESSION["login"]); A implementação da função gravar terá sua assinatura alterada para receber o ticket como parâmetro e validá-lo, conforme o código abaixo: <?php function gravar($arrAttr) { } return "ACK"; } // Registra o método gravar $server->register("gravar", array("ticket" => "xsd:string", "arrAttr" => "tns:ArrayOfstring"), array("return" => "xsd:string"), "urn:SolicitacaoService", "gravar", "rpc", "encoded"); ?> No cliente, novamente devemos usar o WSDL Importer para gerar a unit do serviço e alterar o código para chamar primeiro o método login, conforme o código abaixo: procedure TForm1.btnLoginClick(Sender: TObject); var arr : ArrayOfstring; begin solicitacaoService := GetSolicitacaoServicePortType(); // Definição do array com os parâmetros... ShowMessage(solicitacaoService.gravar(ticket, arr)); end; Carlos R. Laurindo <crlau@acervonet.com.br>
Muito interessante. Preciso trocar informações sobre um projeto de integração para uma futura licitação, se tiveres interesse me rersponda.
![]() ![]() ![]() ![]() ![]() Leonardo <leoquartieri@gmail.com>
Olá, gostaria de saber com fazer o webservice em Delphi e consumir um Dataset em php, se puder me ajudar t agradeço.
![]() ![]() ![]() ![]() ![]() Salgado <salg@selof.com.br>
olha Sr. Saulo, aqui é o Augusto Salgado, sou diretor e Superintendente sa empresa Selo, Softwares e laboratorio, o artigo que descreveu não está muito claro, acho que você deixou algo a desejar, o servidor de soap, não tá funcionando direito, apache é no linux e eu to no windows, porem achei que era algo de um indio. Você é indio? Ruby on Rails, rubi ligado com raio de sol, que coisa, vai estudar mais, e para de beber, voce está chapado ou está fumando maconha, bom isso eu sei que faz...
Salgado... ![]() ![]() ![]() ![]() ![]() leandro <leandroandrele@gmail.com>
foi muito bom esse te manual de procedimento para fazer o web
![]() ![]() ![]() ![]() ![]() Evandro.Net
Muito interessante! <a href="http://evandro.net/"></a>http://evandro.net/ : Não avaliado
![]() |
|
|