Consumindo um web service com xml

Enviada por Renan Mota 
Renan Mota
Consumindo um web service com xml
18 de January de 2012 às 06:16AM
Olá, estou com um problema que não consigo resolver, preciso fazer uma integração com um webservice.

Fiz de varias formas, uma das formas está abaixo:

<?

$post_string = '<?xml version="1.0" encoding="utf-8"?>
<requisicao in_schema="F">
<loginws cd_loginws="underyoutrn" cd_senhaws="123456" />
<pessoa acao="con" cd_pessoa="123" />
</requisicao>
';

$url ='https://www5.bhan.com.br/wbsStoreage/VirtualWsServer.exe/wsdl/IdmDados';


$user ='underyoutrn';

$password ='123456';

$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, $url );
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($soap_do, CURLOPT_TIMEOUT, 10);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST, true );
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen($post_string) ));
curl_setopt($soap_do, CURLOPT_USERPWD, $user . ":" . $password);

$result = curl_exec($soap_do);
$err = curl_error($soap_do);

echo $result;
?>



No manual do webservice, eles me pedem para passar o xml dessa forma como parametro:

<?xml version="1.0" encoding="utf-8"?>
<requisicao in_schema="F">
<loginws cd_loginws="underyoutrn" cd_senhaws="123456" />
<pessoa acao="con" cd_pessoa="123" />
</requisicao>


O problema é que não funciona, o retorno que tenho é um wsdl bem extenso que não sei como interpretar:
segue parte do retorno:


<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xs="http://www.w3.org/2001/XMLSchema" name="IdmDadosservice" targetNamespace="http://tempuri.org/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:ns1="http://www.borland.com/namespaces/Types">
<types>
<xs:schema targetNamespace="http://www.borland.com/namespaces/Types" xmlns="http://www.borland.com/namespaces/Types">
<xs:complexType name="TWideStringDynArray">
<xs:complexContent>
<xs:restriction base="soapenc:Array">
<xs:sequence/>
<xs:attribute ref="soapenc:arrayType" n1:arrayType="xs:string[]" xmlns:n1="http://schemas.xmlsoap.org/wsdl/"/>
</xs:restriction>
</xs:complexContent>
</xs:complexType>
</xs:schema>
</types>
<message name="SAS_ApplyUpdates0Request">
<part name="ProviderName" type="xs:string"/>
<part name="Delta" type="xs:anyType"/>
<part name="MaxErrors" type="xs:int"/>
........



Tentei de tudo e não consigo, se alguem puder me dar uma luz, obrigado.
Renan Mota
Re: Consumindo um web service com xml
18 de January de 2012 às 06:42AM
Tentei com nusoap também e não consegui:

<?php

ini_set( 'display_errors', true );
error_reporting( E_ALL );
require_once('lib/nusoap.php');

$endpoint = "https://www5.bhan.com.br/wbsStoreage/VirtualWsServer.exe/wsdl/IdmDados";

$client = new nusoap_client($endpoint, false);

$msg = $client->serializeEnvelope("
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<requisicao in_schema=\"F\">
<loginws cd_loginws=\"underyoutrn\" cd_senhaws=\"123456\" />
<pessoa acao=\"con\" cd_pessoa=\"123\" />
</requisicao>
");




$result=$client->send($msg, $endpoint);

$soapError = $client->getError();
if (! empty($soapError)) {
$errorMessage = 'SOAPClient failed: ' . $soapError;
throw new Exception($errorMessage);
}

print_r($result);



?>



Me retorna o seguinte erro:

Notice: Undefined property: nusoap_client::$operation in /www/lib/nusoap.php on line 7674

Notice: Undefined index: in /www/lib/nusoap.php on line 6636
Marcos Regis
Re: Consumindo um web service com xml
19 de January de 2012 às 07:05AM
Qual método está tentando executar?

Por que está usando curl?

Veja o resultado deste método e verifique qual o método que quer executar, crie os elementos a serem enviados e chame o método passando esses elementos.


$wsdl = 'https://www5.bhan.com.br/wbsStoreage/VirtualWsServer.exe/wsdl/IdmDados';

$client = new SoapClient($wsdl);
var_dump($client->__getFunctions());
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.