Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lusigmas

consumindo SOAP com php - erro no retorno

Recommended Posts

Olá pessoal.

Passei o dia todo tentando resolver uma questão e não consegui nenhum resultado, espero que possam me dar uma ajuda.

Tenho um aplicativo em php que precisa receber dados de um webservice, que é de outra empresa.

Eles não tem documentação e tudo que me enviaram foi:

 

WSDL: https://urlparceiro/wsparceiro/services/ExpData?wsdl

Exemplo de utilização:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.urlparceiro/">
   <soapenv:Header/>
   <soapenv:Body>
      <ser:ExpData>
         <!--Optional:-->
         <item0>
            <erro>true</erro>
            <mensagemErro>true</mensagemErro>
            <parametros>{'empresa':'1','codigo':'2','chave':'12abc','tipoSaida':'xml'}</parametros>
            <retorno>xml</retorno>
            <tipoArquivoRetorno>xml</tipoArquivoRetorno>
         </item0>
      </ser:ExpData>
   </soapenv:Body>
</soapenv:Envelope>

Utilizei a classe nuSoap, mas o campo <parametros> sempre dá erro. Meu script:

require_once('../lib/nusoap.php');
$client = new nusoap_client('https://urlparceiro/wsparceiro/services/ExpData?wsdl');
$params = array(
	'arg0' => array(
	'erro' => true, 
	'mensagemErro' => true,
	'parametros' => "{'empresa':'1','codigo':'2','chave':'12abc', 'tipoSaida':'xml')",
	'retorno' => 'xml',
	'tipoArquivoRetorno' => 'xml'	
));

$result = $client->call('ExpData', $params, 'http://services.urlparceiro.com/', 'http://services.urlparceiro.com/');

if ($client->fault) {
	echo '<h2>Fault (Expect - The request contains an invalid SOAP body)</h2><pre>'; print_r($result); echo '</pre>';
} else {
	$err = $client->getError();
	
	
	if ($err) {
		echo '<h2>Error</h2><pre>' . $err . '</pre>';
	} else {
		echo '<h2>Result</h2><pre>'; print_r($result); echo '</pre>';
	}
}

O resultado:

Array
(    [erro] => true    [mensagemErro] => Erro no formato Json dos parametros    [parametros] => {'empresa':'1','codigo':'2','chave':'12abc', 'tipoSaida':'xml')    [retorno] => xml    [tipoArquivoRetorno] => xml)

Já alterei a string, usei json_decode, trim, mas nada resolve, só muda a mensagem de erro.

Usando jason_decode o erro é: 'XML error parsing SOAP payload on line 1: Invalid character'

Usando trim:

Fault (Expect - The request contains an invalid SOAP body)
Array(    [faultcode] => soap:Server    [faultstring] => java.lang.NullPointerException)

Alguma ideia de como resolver? Agradeço muito quem puder ajudar.

 

Abraços.

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Luis Paullo,

 

não, irei tentar agora e postarei o resultado.

Valeu o apoio.

Abs.


Ja fez assim?

 

 
'parametros' => json_encode(['empresa'=>1,/*....*/])

 

Não funcionou, continua dando: Erro no formato Json dos parametros.

Alguma outra ideia?

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tirei, ainda não funcionou. A mensagem de erro:

 

Array ( [faultcode] => soap:Server [faultstring] => java.lang.NullPointerException )

Fault (Expect - The request contains an invalid SOAP body)
Array(    [faultcode] => soap:Server    [faultstring] => java.lang.NullPointerException)

Como não consegui resolver com o nuSoap, fiz com o Soap e finalmente funcionou:

$parametros = "{'empresa':'".$empresa."','codigo':'".$codigo."','chave':'".$chave."', 'tipoSaida':'".$tipoSaida."'}";
$client = new SoapClient('https://urlparceiro/wsparceiro/services/ExpData?wsdl');
$params = array('ExpData' =>array(
	'arg0' => array(
	'erro' => true, 
	'mensagemErro' => true,
	'parametros' => $parametros,
	'retorno' => 'xml',
	'tipoArquivoRetorno' => 'xml'	
)));
 
$result = $client->__soapCall('ExpData', $params);
echo 'Response: ';
print_r($result);

Obrigada pelo apoio Luis Paullo!

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.