WebService Feito em Delphi para consumir em PHP

Enviada por Josimar de Souza Bezerra 
Josimar de Souza Bezerra
WebService Feito em Delphi para consumir em PHP
18 de August de 2010 às 05:42PM
Resumo:
Tenho um webservice feito em delphi e estou tentando consumir no php, primeiramente estou tentando utilizar o metodo de teste chamado "Somar", mas não estou conseguindo vou passar abaixo os detalhes:

<?php
require_once("../lib/nusoap.php");
$wsdl = "http://localhost/cgi-bin/project1.exe?wsdl";
$soap = new SoapClient($wsdl,'wsdl');

$erro = $soap->getError();
if ($erro) {
echo "<h2>Erro ao criar Cliente Soap: </h2>".$erro;
}
//a chamada do metodo estou tentando de 3 formas

// Forma 1
$param = array('val1'=>6,'val2'=>6);
$soap->call('Somar',$param);

// Forma 2
$proxy = $soap->getProxy();
$result = $proxy->Somar(6,6);

// Forma 3
$result = $soap->Somar(6,6);
?>

Para Forma 1 o metodo não retorna nada, mesmo por que se chamar digitar qualquer coisa como metodo não exibe erro.

Para Forma 2 em que chamo o metodo direto o seguinte erro é apresentado:
Fatal error: Call to a member function Somar() on a non-object in C:\xampp\htdocs\CitiPortal\webservice.php on line 21

Para Forma 3 em que chamo o metodo direto o seguinte erro é apresentado:
Fatal error: Call to undefined method soapclient::Somar() in C:\xampp\htdocs\CitiPortal\webservice.php on line 16


Se alguém souber resolver desde já agradeço.
Marcos Regis
Re: WebService Feito em Delphi para consumir em PHP
18 de August de 2010 às 05:53PM
Geralmente os webservices feitos em Delphi não seguem o padrão SOAP 1.1 que é o aceito por NuSoap.
Tente utilizar os métodos SOAP nativos do PHP.

Verifique também se esta url retorna alguma coisa abrindo-a no navegador.
http://localhost/cgi-bin/project1.exe?wsdl
Josimar de Souza Bezerra
Re: WebService Feito em Delphi para consumir em PHP
18 de August de 2010 às 07:03PM
Muito obrigado pela resposta.
Respondendo o seu questionamento quando ao retorno da url
o webservice lista todos os métodos declarados.

Quanto a utilização da dll php_soap.dll, fiz as devidas alterações
e deixei o código da seguinte forma:

$wsdl = "http://localhost/cgi-bin/project1.exe?wsdl";
$uri = "http://localhost/cgi-bin/";
$soap = new SoapClient(null,array('location'=>$wsdl,'uri'=>$uri,'trace'=>1));
// Forma 1 da chamada
$result = $soap->Somar(1,1);

Erro:

Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in C:\xampp\htdocs\CitiPortal\webservice.php:9 Stack trace: #0 [internal function]: SoapClient->__call('Somar', Array) #1 C:\xampp\htdocs\CitiPortal\webservice.php(9): SoapClient->Somar(1, 2) #2 {main} thrown in C:\xampp\htdocs\CitiPortal\webservice.php on line 9

// Forma 2 da chamada
$result = $soap->call("Somar",array('x1'=>1,'x2'=>1));

Erro:

Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in C:\xampp\htdocs\CitiPortal\webservice.php:10 Stack trace: #0 [internal function]: SoapClient->__call('call', Array) #1 C:\xampp\htdocs\CitiPortal\webservice.php(10): SoapClient->call('Somar', Array) #2 {main} thrown in C:\xampp\htdocs\CitiPortal\webservice.php on line 10
Reinaldo abdo
Re: WebService Feito em Delphi para consumir em PHP
18 de August de 2010 às 07:27PM
Segue um exemplo em NuSoap veja se ajuda.

No caso estou chamando o método logon com dois parametros login e senha.



//FAZ A CONEXÃO COM O WEBSERVICE
$wsdl = 'sua wsdl';
$cliente = new soapclient($wsdl,true);

//GERAR OS DADOS DO PROXY
$proxy = $cliente->getProxy();

//MOSTRA SE HOUVE ERRO COM A CONEXÃO
$err = $cliente->getError();

if ($err){
echo "Erro:<pre>".$err."</pre>";
}


/* XML para a requisição */
$logon = '
<Logon">

<logonRequest>
<login>exemplo de login</login>
<senha>exemplo de senha</senha>
</logonRequest>
</Logon>
';


$logar = $proxy->call("Logon", $logon);


/* ver o que aconteceu */
###### DEBUGAR
echo '<div style:background="#FFF">';
echo "<pre><h1>Resposta do Proxy</h1>", print_r( $proxy->response, true ), "</pre>";
echo '</div>';
###### DEBUGAR


/* Ver a resposta */
###### DEBUGAR
echo '<div style:background="#FFF">';
echo "<pre><h1>Resposta de Logon</h1>", print_r( $logar, true ), "</pre>";
echo '</div>';
###### DEBUGAR
Josimar de Souza Bezerra
Re: WebService Feito em Delphi para consumir em PHP
18 de August de 2010 às 07:59PM
Obrigado Marcos e obrigado Reinaldo suas informações foram muito úteis!

Como todo fórum é uma base de conhecimento.
Segue para futuras gerações:

//Forma correta de se declarar a url com a especificação da interface
$wsdl = "http://localhost/cgi-bin/Project1.exe/wsdl/ICalculadoraCGI";

Desta forma funcionou.

daí em diante é só seguir o fluxo normal.

$cliente = new soapclient($wsdl,true);

//GERAR OS DADOS DO PROXY
$proxy = $cliente->getProxy();

//MOSTRA SE HOUVE ERRO COM A CONEXÃO
$err = $cliente->getError();

if ($err){
echo "Erro:<pre>".$err."</pre>";
}

$result = $proxy->Somar(6,6);
Itamar
Re: WebService Feito em Delphi para consumir em PHP
26 de November de 2015 às 06:56PM
Olá Josimar de Souza Bezerra, você poderia me passar mais detalhes sobre, estou fazendo aqui mais não esta dando certo.
agradeço

<?php
include('lib/nusoap.php');
$servidor = new nusoap_server();

// declarar a url com a especificação da interface
$wsdl = "http://localhost/cgi-bin/ProjectTete.exe/wsdl/ICalculadoraCGI";
$cliente = new SoapClient($wsdl,true);
//dodos do proxy
$proxy = $cliente->getProxy();
//mostra se houve erro da conexão
$err = $cliente->getError();

if ($err){
echo "Erro:<pre>".$err."</pre>";
}
$result = $proxy->Teste0Response("teste");
?>
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.