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.