Ir para conteúdo

POWERED BY:

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 peterhall
      Preciso consumir um web service soap (wsdl) com certificado digital mas não estou a conseguir.
      Testei através do SoapUI e resultou sem erros, mas na hora de aplicar num script de php, não estou a conseguir que funcione.
      O que fiz até ao momento: converti o certificado digital de .pfx para .pem com chave privada incluída e procurei executar o script com os parâmetros de conexão e xsd de saída.
      Na documentação consta este xsd de saída:
       
      A resposta, se com erro, deverá ser:
       
      Resposta sem erro:
       
      O meu script:
      <?php date_default_timezone_set("America/Fortaleza"); $time = new DateTime; $data = $time->format(DateTime::ATOM); $wsdl = 'https://selodigital.tjce.jus.br/wsselodigital-homologacao/SolicitacaoSelo?wsdl'; $endpoint = 'https://selodigital.tjce.jus.br/wsselodigital-homologacao/SolicitacaoSelo'; $certificate = "certificado.pem"; $password = 'senha'; $options = array( 'location' => $endpoint, 'keep_alive' => true, 'trace' => true, 'local_cert' => $certificate, 'passphrase' => $password, 'cache_wsdl' => WSDL_CACHE_NONE, array('versao' => '1.12', 'dataHora' => $data, 'ambiente' => '2', 'codigoServentia' => '000123', 'nomePessoa' => 'Nome de Teste', 'tipoDocumento' => '1', 'idSolicitacaoSelo' => '1', 'sequencial' => '1', 'codigo' => '6', 'quantidade' => '10' ) ); try { $soapClient = new SoapClient($wsdl, $options); } catch(Exception $e) { var_dump($e); }  
      O erro que tenho recebido:
       
      Onde estarei errando?
×

Informação importante

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