Jump to content
Fabrizio.Quadro

Problemas ao Acessar webservice cadsus atraves do php

Recommended Posts

Boa noite galera, será que tem alguem que possa me dar uma força com webservices, eu preciso acessar este webservice https://servicoshm.saude.gov.br/cnes/ProfissionalSaudeService/v1r0?wsdl

é somente a 2º vez que estou trabalhando com webservice, da outra vez que trabalhei era para acessar o webservice dos correios para calcular o frete, então peguei o codigo e meio que tentei utiliza-lo, mas nao deu certo, o codigo é esse ai

<?php
include "lib/nusoap.php";

$cliente = new nusoap_client('https://servicoshm.saude.gov.br/cnes/ProfissionalSaudeService/v1r0?wsdl', true);

$headers = '
<soap:Header>
      <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <wsse:UsernameToken wsu:Id="UsernameToken-5FCA58BED9F27C406E14576381084652">
            <wsse:Username>CNES.PUBLICO</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">cnes#2015public</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
</soap:Header>
';

$cliente->setHeaders($headers);

$parametros = array('numeroCNS' => '980016280595043');

$resultado = $cliente->call('ConsultarProfissionalSaude', $parametros);

print_r($resultado); 




?>

nao sei se ajuda, mas o xml que o webservice recebe é esse aqui

  

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:prof="http://servicos.saude.gov.br/cnes/v1r0/profissionalsaudeservice" xmlns:fil="http://servicos.saude.gov.br/wsdl/mensageria/v1r0/filtropesquisaprofissionalsaude" xmlns:cns="http://servicos.saude.gov.br/schema/cadsus/v5r0/cns" xmlns:cpf="http://servicos.saude.gov.br/schema/corporativo/documento/v1r2/cpf">
<soap:Header>
      <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <wsse:UsernameToken wsu:Id="UsernameToken-5FCA58BED9F27C406E14576381084652">
            <wsse:Username>CNES.PUBLICO</wsse:Username>
            <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">cnes#2015public</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
</soap:Header>

   <soap:Body>
      <prof:requestConsultarProfissionalSaude>
         <fil:FiltroPesquisaProfissionalSaude>
            <cns:CNS>
               <cns:numeroCNS>980016280595043</cns:numeroCNS>
            </cns:CNS>
         </fil:FiltroPesquisaProfissionalSaude>
      </prof:requestConsultarProfissionalSaude>
   </soap:Body>
</soap:Envelope>

Alguem sabe como acessar esse webservice?????

Share this post


Link to post
Share on other sites

Já testou consumir o WS via SoapUI?

 

Utilize a biblioteca SOAP do PHP e não nusoap.

Share this post


Link to post
Share on other sites

Eu já tentei utilizar o Soap nativo do php, esta instalado e aparece no phpinfo, mas quando chamo a função __call, da um fatal error,

no webservice que eu tenho do correios, eu troco o nusoap_cliente pelo soap_client e o call pelo __call e da fatal error.

Tu sabe algum jeito no php de eu enviar para o webservice o xml que postei e receber o xml de response???

Share this post


Link to post
Share on other sites
Em 11/04/2019 at 15:24, Fabrizio.Quadro disse:

Eu já tentei utilizar o Soap nativo do php, esta instalado e aparece no phpinfo, mas quando chamo a função __call, da um fatal error,

Qual o erro que ocorre?

 

Em 11/04/2019 at 15:24, Fabrizio.Quadro disse:

Tu sabe algum jeito no php de eu enviar para o webservice o xml que postei e receber o xml de response???

Poderia fazer usando cURL, mas ai já é reinventar a roda.

 

Vamos resolver o erro para que você possa usar a biblioteca recomendada.

Share this post


Link to post
Share on other sites
<?php
include "lib/nusoap.php";

$cliente = new nusoap_client('http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?WSDL', true);
$parametros = array (
	'nCdEmpresa' => ' ',
	'sDsSenha' => ' ',
	'nCdServico' => '41106',
	'sCepOrigem' => '99010150',
	'sCepDestino' => '78896000',
	'nVlPeso' => '1',
	'nCdFormato' => '1',
	'nVlComprimento' => '16',
	'nVlAltura' => '10',
	'nVlLargura' => '20',
	'nVlDiametro' => '0',
	'sCdMaoPropria' => 'S',
	'nVlValorDeclarado' => '200',
	'sCdAvisoRecebimento' => 'S'
); 

$resultado = $cliente->call('CalcPrecoPrazo', $parametros);
print_r($resultado);

?>

Esse ai en cima é o codigo que funciona com o nusoap segue o codigo com a classe soap nativa do php

<?php


$cliente = new SoapClient('http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?WSDL');
$parametros = array (
	'nCdEmpresa' => ' ',
	'sDsSenha' => ' ',
	'nCdServico' => '41106',
	'sCepOrigem' => '99010150',
	'sCepDestino' => '78896000',
	'nVlPeso' => '1',
	'nCdFormato' => '1',
	'nVlComprimento' => '16',
	'nVlAltura' => '10',
	'nVlLargura' => '20',
	'nVlDiametro' => '0',
	'sCdMaoPropria' => 'S',
	'nVlValorDeclarado' => '200',
	'sCdAvisoRecebimento' => 'S'
); 

$resultado = $cliente->__Soapcall('CalcPrecoPrazo', $parametros);
print_r($resultado);

?>

Segue o erro que da

Erro fatal : exceção SoapFault não capturada: [WSDL] ERRO SOAP: análise de WSDL: não foi possível carregar de 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?WSDL': falha ao carregar a entidade externa " http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx?WSDL "em /home/u660391699/public_html/teste/teste.php:4 Rastreamento de pilha: # 0 / home / u660391699 / public_html / teste / teste .php (4): SoapClient-> SoapClient ('http: //ws.corre ...') # 1 {main} lançado em /home/u660391699/public_html/teste/teste.php na linha 4

link para o phpinfo do meu servidor

phpinfo 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By makinh0
      algoritmo "CalculoIMC"
      var
         M, A, IMC: Real
      iniciO
          Escreva ("Massa (Kg): ")
          Leia(M)
          Escreva("Altura (m): ")
          Leia (A)
          IMC <- M / (A ^ 2) //massa dividido pela altura ao quadrado;;//
          Escreval("IMC: ", IMC :5:2) //5Casas e 2 decimais //
          Se (IMC >= 18.5) E (IMC < 25) entao
          Escreva ("Parabens! Voce esta no seu peso ideal")
          senao
          Escreva("Voce nao esta na faixa de peso ideal")
          FimSe
          
      fimalgoritmo
       
    • By tarsio
      Boa noite pessoa so novo na programação e gostaria de saber, porque meu tempo limite de consulta está no limite, esse e um pedaço do código fora esse tenho mais 14 query então só 8 funcionam e gostaria de saber alguma maneira para que todas a consultas funcionem. Colocando botoes de alguma maneira resolver esse problema.    <div class="panel-group" id="accordion"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title"> <a data-toggle="collapse" data-parent="#accordion" href="#collapse9"><h2>cliente<h2></a>
      </h3> </div> <div id="collapse9" class="panel-collapse collapse"> <div> <?php try{   $query7= $Conexao->query( " SELECT C.FTP_CLIENTE,dbo.MinutesToDuration2021(SUM(DATEDIFF(MINUTE,E.DT_ENVIADO,E.DT_RECEBIDO)),COUNT(E.ID_EXAME)) as TEMPO FROM WR_CLIENTE C INNER JOIN E ON  =  WHERE  = 2 AND (convert(datetime,'$datai',110)) AND (convert(datetime,'$dataf',110)) GROUP BY E ORDER BYE ASC;");   $exs7 = $query7->fetchAll();   }catch(Exception $e){ echo $e->getMessage(); exit; }   ?> <br> <br> <table id="table11" data-toggle="table" class="table table-hover" data-sort-name="FTP_CLIENTE" data-sort-name="TEMPO"> <thead> <tr> <th data-field="FTP_CLIENTE" data-sortable="true" scope="row">CLIENTE</th> <th data-field="TEMPO" data-sortable="true" scope="row">TEMPO</th> </tr> </thead> <tbody> <!---carregar os refistro --> <?php foreach($exs7 as $ex) { ?> <tr>   <td><?php echo $ex['FTP_CLIENTE'];?></td> <td><?php echo $ex['TEMPO'];?></td> </tr> <button class="mais">Carregar mais</button> <?php } ?> </tbody> </table> </div> </div> </div> </div>   </div>
    • By Adriana de Luca
      Estou tentando pegar o id do livro para depois fazer um update para controlar o estoque, consegui pegar o id, porem não consigo coloca-lo no mysql
      Se coloco um id valido, ele traz as informações, porem se chamo  {'$livro_id'} da erro.
       
      Alguém pode por favor me ajudar? agradeço muito.
       
      <?php

      $query = mysql_query("SELECT * FROM produtos 
      inner join estoque ON produtos.livro_id = estoque.livro_id");

      ?>
      <div class="central">
                     <form action="#" method="GET">
                         <fieldset>
                             <legend class="titulo">Consultar Livraria</legend>
                             <select type="text" name="produtos">
                                 <option value="">Selecionar..</option>
                              <?php
                                     $sql =  mysql_query("SELECT livro_id, nome as titulo FROM produtos");
                                      while ($result = mysql_fetch_array($sql) )
                                      {
                                         echo "<option value='".$result['livro_id']."'>".$result['titulo']."</option>";
                                     }
                                 ?>                            
                             </select>
                             <input class="botao" type="submit" name="ajustar" value="Ok" />
                         </fieldset>
                      </form>
                     
       <?php
      //aqui ele mostrara o código do livro    
      echo $_GET['produtos'];
      $livro_id='produtos';

      $sql1="SELECT * FROM produtos 
      inner join estoque ON produtos.livro_id = estoque.livro_id WHERE produtos.livro_id= {'$livro_id'}";
            
      $res=mysql_query($sql1); 
                    while($registro=mysql_fetch_row($res))                
      {    
                                            
        $nome=$registro[1];                             
        $autor=$registro[2]; 
        $editora=$registro[3]; 
        $colecao=$registro[4];                             
        $preco=$registro[5];                                   
        $data=$registro[6];   
        $quantidade=$registro[0];                      
                                           
        ?>
        <?php 
            echo "Título: $nome<br>";                                    
            echo "Autor: $autor<br>"; 
            echo "Editora: $editora<br>";  
            echo "Coleção: $colecao<br>";                             
            echo "Preço: $preco<br>";                                    
            echo "Quantidade: $quantidade<br>"; 
            echo "Data: ".date('d-m-Y', strtotime($data))."<br><p>";   

        mysql_close($connect);               
              
      ?>
    • By vinihhylian0103
      Boa noite, eu tenho um campo no meu cadastro para o usuário selecionar seu curso, que seria esse:
       
      <select name="curso" type="text" required=".$this->fields["cursos"]."> <option value="Informática">Informática</option> <option value="ADM">Administração</option> <option value="Edificações">Edificações</option> /> e eu gostaria de saber como gravar essa escolha no banco de dados, segue o código de inserrir
       
      <?php if(!$conect=mysqli_connect('localhost','root','','cadastros')) die ('erro ao conectar'); #Recolhendo os dados do formulário $nome=mysqli_real_escape_string($conect, $_POST['nome']); $sobrenome=mysqli_real_escape_string($conect, $_POST['sobrenome']); $data=mysqli_real_escape_string($conect, $_POST['data_nasc']); $rm=mysqli_real_escape_string($conect, $_POST['rm']); $curso=mysqli_real_escape_string($conect, $_POST['curso']); $email=mysqli_real_escape_string($conect, $_POST['email']); $senha=mysqli_real_escape_string($conect, $_POST['senha']); # Verificando apenas um campo, no caso dado1. $sql = $conect->query("SELECT * FROM usuarios WHERE email='$email'"); if(mysqli_num_rows($sql) > 0){ echo "Este email já foi cadastrado!"; exit(); } else { if(!$conect->query("INSERT INTO usuarios(nome, sobrenome, data_nasc, rm, curso, email, senha) VALUES('$nome','$sobrenome','$data','$rm','$curso','$email','$senha')")) die ('Os dados não foram inseridos'); echo "<script type='text/javascript'>alert('Cadastro Concluído!');</script>"; header('Location: index.html'); } Muito obrigado desde já!
    • By andrelimaverde
      Pessoal preciso de uma ajuda, desde já agradeço à todos.
      "Site teste, estudos..."
      Tenho um formulário com 3 etapas, ele está trabalhando em php normalmente e salvando os dados preenchidos em .txt (para testes apenas).
      Vamos lá, nas 3 etapas o form está com action="1.php" (2.php,  3.php) e method="post". [Não vou colocar muito código para simplificar, pois é um formulário básico fácil de entender]
      Exemplo:  Pagina 1 - envia para action '1.php'
      Nome: 
      Telefone:
      <input type="submit" value="Continuar">
      (
       O arquivo 1.php armazena os dados e redireciona => header( 'Location:Pagina2.php' ) ;   
       Assim como os outros php's
      )
      Pagina 2 - action 2.php armazena os dados e redireciona => header( 'Location:Pagina3.php' ) ; 
      Cidade:
      Endereço:
      <input type="submit" value="Continuar">
       
      A questão está na 3ª página
      Página 3 -
      Email:
      (Preciso que após preencher o campo da página 3 no caso "Email:",  ao clicar no botão, neste caso não sei se seria um submit ou button. O formulário não redirecionar para pagina 4, ao clicar ele enviar e salvar normalmente, mas aparecer um novo input na mesma pagina por Exemplo:"Twitter:"  ) 
      No caso preciso que ele não redirecione , gostaria de colocar um gif de carregando por 15 segundos por exemplo como se estivesse processando as informações... e em seguida ele apresentar o novo input do "Twitter:" , onde ai sim enviaria normalmente...
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.