|
||
|
|
Conheça também: Onmasters . Ofertas . Divulgue! . Vai.la . Geraboleto . Baixa.la . Assista.la . Joga.la
» Início » Programação » Delphi » Integração de Sistemas em PHP e Delphi usando WebServices
--> |
|
Avaliação:
![]() ![]() ![]() ![]() | Publicado em: 29/04/2007Integração de Sistemas em PHP e Delphi usando WebServices
Desenvolvi a primeira versão do serviço usando a extensão PHP_SOAP que é nativa para o PHP 5 e me pareceu bastante confiável e simples de usar. Criei uma classe chamada SolicitacaoService, o arquivo WSDL e sem nenhuma dificuldade registrei o serviço usando o código abaixo: <?php Devo admitir que tive vários problemas para escrever o arquivo WSDL da forma correta, já que nunca tinha feito isso “manualmente”. Depois, criei uma aplicação em Delphi usei o "WSDL Importer" para criar uma unit a partir do arquivo WSDL. Esse é um recurso bastante prático, pois as interfaces dos métodos e definição dos tipos já são criados automaticamente. Após isto, basta criar um form e um botão e escrever 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(arr)); end; Em ambiente de desenvolvimento, o problema da integração já está resolvido. Porém, o servidor de produção usava a versão 4.2.2 do PHP que não suporta a extensão PHP_SOAP. Além disso, essa versão do PHP também não suporta todos os recursos de Orientação a Objetos que eu havia utilizado. Neste momento resolvi usar uma implementação do protocolo SOAP para PHP bastante simples chamada NuSOAP. Agora consegui a compatibilidade com o PHP4 e melhor, sem necessidade de instalação de nenhuma extensão do PHP no servidor de produção. Usando o NuSOAP, o código sofreu várias modificações e ficou assim: <?php function gravar($arrAttr) { } // Definição do serviço $server = new soap_server(); $server->configureWSDL("SolicitacaoService", "urn:UsuarioService"); // Registra o tipo ArrayOfstring $server->wsdl->addComplexType("ArrayOfstring", "complexType","array", "", "SOAP-ENC:Array", array(), array( array("ref"=>"SOAP-ENC:arrayType", "wsdl:arrayType"=>"string[]") ), "xsd:string");
$server->register("gravar", array("arrAttr" => "tns:ArrayOfstring"), array("return" => "xsd:string"), "urn:SolicitacaoService", "gravar", "rpc", "encoded"); // Executa a requisição $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ""; $server->service($HTTP_RAW_POST_DATA); Neste caso, é necessário registrar cada método que será acessado remotamente, porém o NuSOAP gera automaticamente o arquivo WSDL, o que em minha opinião, é mais vantagem do que escrever somente: $server = new SoapServer("solicitacaoService.wsdl");
Por outro lado, não foi possível utilizar classes, pois o registro do método gravar usando SolicitacaoService.gravar gerava um WSDL com nomes de métodos não muito agradáveis, então preferi usar funções mesmo. Perceba também que a declaração do tipo complexo ArrayOfstring é bastante confusa, mas nada que não se possa achar pronto na Internet. No cliente em Delphi, bastou gerar novamente a unit correspondente ao serviço usando o WSDL Importer, usando o nome do script PHP com o parâmetro wsdl (Ex.: http://sauloarruda.eti.br/service/solicitacao.php?wsdl). Naturalmente a implementação da função gravar deve abrir uma conexão com o banco de dados MySQL e gravar um registro na tabela de solicitação. Para maior simplicidade do nosso exemplo esse código foi omitido e a função retorna simplesmente o texto ACK que, por convenção, significa que a chamada foi processada com sucesso. Esse cliente em Delphi também deverá ser incorporado no ERP sendo que cada vez que uma solicitação for gravada, uma chamada WebService será feita para sincronizá-la. Além disso, será necessário tratar erros implementando uma fila de chamadas do serviço que falharam para que seja feita uma nova tentativa. 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
![]() |
|
|