Ir para conteúdo

Arquivado

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

RAFAEL HENRIQUE DE SOUZA

[Resolvido] Comunicação soap wsdl

Recommended Posts

Boa tarde pessoal, sou novo aqui, então desculpe se minha dúvida não for explanada conforme orientação do fórum.

 

Estou precisando consumir uma solução de segurança via SOAP, estou utilizando a biblioteca nusoap.php, fiz as chamadas conforme exemplos que achei.

 

Me parece que ele comunica e trás o modelo xml, porem exibe a seguinte mensagem:

wsdl error: XML error parsing WSDL from https://homologacao....scAdminWS?wsdl on line 1: Not well-formed (invalid token)

Não achei mais nada sobre este erro. Para ajudar a entender o que fiz segue abaixo o código:

_____________________________________________________________________________________

include ('lib/nusoap.php');
$username = 'user';
$password = 'pass';
$useCURL = isset($_POST['usecurl']) ? $_POST['usecurl'] : '0';
$proxyhost = isset($_POST['proxyhost']) ? $_POST['proxyhost'] : 'proxy';
$proxyport = isset($_POST['proxyport']) ? $_POST['proxyport'] : '8080';
$client = new nusoap_client("https://homologacao.../SscAdminWS?wsdl", 'wsdl', $proxyhost, $proxyport);
$err = $client->getError();
if ($err) {
echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
}
//$client->setUseCurl($useCURL);;
//$client->loadWSDL();
$client->setCredentials($username, $password);
$result = $client->call('retornaUsuario', array('cpf'=>'123.456.789-10'));
if ($client->fault) {
echo '<h2>Fault</h2><pre>';
print_r($result);
echo '</pre>';
} else {
// Check for errors
$err = $client->getError();
if ($err) {
// Display the error
echo '<h2>Error</h2><pre>' . $err . '</pre>';
} else {
// Display the result
echo '<h2>Result</h2><pre>';
print_r($result);
echo '</pre>';
}
}
print_r($result);
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';
Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro apenas indica que o WSDL é inválido. Utiliza SOAP do PHP e não nusoap.

 

nusoap foi desenvolvido para o PHP 4, é uma biblioteca terceira. SOAP foi desenvolvido para o PHP 5 e é nativa.

 

Valide seu WSDL com o software SoapUI. Provavelmente, se você abrir ele no navegador já encontrará que está mal formatado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel, obrigado pela ajuda.

 

Já não utilizo mais o NuSoap, o código ficou da seguinte forma:

 

Código:_____________________________________________________________________________

$login = 'login';

$password = 'pass';
$conexao = new SoapClient(
$soapServer, array(
'login' => $login,
'password' => $password,
'proxy_host' => 'proxy',
'proxy_port' => 8080
));
$response = $conexao->__soapCall('retornaUsuario' , array('cpf' => '000.000.000-00'));
Retorno:___________________________________________________________________________
Fatal error:  Uncaught SoapFault exception: [soap:Server] Campo de preenchimento obrigatório não fornecido: login in /var/www/html/iomg/lab/teste.php:20Stack trace:#0 /var/www/html/iomg/lab/teste.php(20): SoapClient->__soapCall('retornaUsuario', Array)#1 {main}  thrown in /var/www/html/iomg/lab/teste.php on line 20

Compartilhar este post


Link para o post
Compartilhar em outros sites

A mensagem está bem clara, um campo não foi preenchido.

 

De todo o modo, um SoapFault deve ser tratado, pois é uma exception.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel bom dia!

Não estava faltando um campo, apesar da mensagem. A chamada estava errada, segue a correta:

 

$response = $conexao->__soapCall('servico' , array('servico'=>array (parametros));

 

As 'fault' foram tratadas e tudo esta como o esperado.

 

Agradeço a ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por marcelo.ourico
      Boa noite. Pessoal, mais uma vez aqui pedindo uma ajuda.

      Estou tentando enviar uma NFSe via SOAP.

      Estou recebendo o seguinte erro:

      Fatal error: Uncaught SoapFault exception: [SOAP-ENV:Client] ERRO : cvc-complex-type.4: Attribute 'Algorithm' must appear on element 'ns2:CanonicalizationMethod'. in

      O meu Array está da seguinte forma:
      Array
      (
      [CanonicalizationMethod] => Array
      (
      [@attributes] => Array
      (
      [Algorithm] => http://www.w3.org/TR/2001/REC-xml-c14n-20010315
      )
      )

      Não entendi o porque desse erro, alguém sabe ajudar?
    • Por vmmh
      Alguma alma caridosa que me possa ajudar ?
      há dias que ando com este problema e não consigo resolver. Ficaria eternamente grato se alguém pudesse ajudar
       
      o codigo abaixo em localhost funciona na perfeição , mas em produção , no lado do servidor , nada... HTTP error 500.
      o pedido que estou a fazer está noutro dominio com porta 81 e no meu dominio uso certificado de segurança. Será por aí?
      de qualquer forma o wsdl está   aqui:
       
       
      $client = new SoapClient('https://dekrainspecoes.pt/acp/PROD_CustomUI_ACP_Member_Validation_WS.WSDL');
      $result = $client->QueryByNumCartao(array('N_Cartao' => "705684011673122085"));
      if (!empty($result->QueryByNumCartao_Output->Cartao_Ativo)) {
       
          echo 'The userId : '.$result->QueryByNumCartao_Output ->Pessoa_ID;
      }
       
      $JSON = json_encode($result);
    • Por wolfphw
      Bom dia caros amigos,
       
      estou precisando fazer uma consulta em um WS da Receita Federal mas estou me batendo com algumas dúvidas.
       
      Instalei o certificado que eles me passaram na minha máquina e pelo navegador quando colo a URL do WS ele mostra tudo correto os tipos de consultas e tal, meu problema está no desenvolvimento do client para fazer essa consulta, eu preciso instalar algum Certificado localmente?
       
      E como devo fazer a conexão da minha aplicação com esse WS?
       
      Estou tentando assim:
      <?php require("biblioteca/nusoap.php"); $wsdl = "https://acesso.infoconv.receita.fazenda.gov.br/ws/cpf/ConsultarCPF.asmx?wsdl"; $formaBusca = "listarEmpPorCPF"; $ListaDeCPF = "12345678910"; $CPFUsuario = "12345678910"; $sslcertfile = 'certificado.pem'; $sslkeyfile = 'key.pem'; $passphrase = 'senha'; $param = array('CPFUsuario' => $CPFUsuario, 'ListaDeCPF' => $ListaDeCPF); $soap = new nusoap_client($wsdl, 'wsdl'); $soap->setCredentials("", "", 'certificate', array( 'sslcertfile' => $sslcertfile, 'sslkeyfile' => $sslkeyfile, 'passphrase' => $passphrase, 'verifypeer' => 0, 'verifyhost' => 0 ) ); if($err = $soap->getError()) { die('Error: '.$err); } $result = $soap->call($formaBusca, array('parameters' => $param), '', '', false, true); if($soap->fault) { echo 'Fault! <pre>'; var_dump($result); echo '</pre>'; } else { if($err = $soap->getError()) { die('Error: '.$err); } else { echo '<pre>'; var_dump($result); die('</pre>'); } } ?> E está me dando o seguinte erro:
       
      Error: wsdl error: Getting https://acesso.infoconv.receita.fazenda.gov.br/ws/cpf/ConsultarCPF.asmx?wsdl - HTTP ERROR: cURL ERROR: 58: could not load PEM client certificate, OpenSSL error error:02001003:system library:fopen:No such process, (no key found, wrong pass phrase, or wrong file format?)
    • Por jotapems
      Bom dia,
      estou tentando criar uma integração a um webservice utilizando o seguinte link do serviço:
      https://wwwh.cnj.jus.br/pjemni-2x/intercomunicacao?wsdl
       
      Para tanto, fiz o seguinte código-teste:
       
      <?php $client = new SoapClient("https://wwwh.cnj.jus.br/pjemni-2x/intercomunicacao?wsdl"); $function = "consultarProcesso"; $arguments = array ( "idConsultante" => "xxx", "senhaConsultante" => "xxx", "numeroProcesso" => "50243604120198130702", "movimentos" => true ); $result = $client->__soapCall($function, $arguments); print $result; ?>  
      Contudo, ao executar o código, recebo o seguinte erro:
      Fatal error: Uncaught SoapFault exception: [soap:Client] Message part param1 was not recognized. (Does it exist in service WSDL?) in C:\xampp\htdocs\wstest\test.php:13 Stack trace: #0 C:\xampp\htdocs\wstest\test.php(13): SoapClient->__soapCall('consultarProces...', Array) #1 {main} thrown in C:\xampp\htdocs\wstest\test.php on line 13  
      Se alguém puder me ajudar, agradeço muito!!
×

Informação importante

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