Jump to content
Juliano L Laverde Ranite

Enviar e Receber XML por SOAP PHP

Recommended Posts

Estou começando a entender o conceito do SOAP, estou fazendo uma implementação e preciso enviar um XML para o DATASUS e receber a resposta, porém os arquivos já estão preparados, ou seja, um XML pronto pra eu manipular posteriormente no ambiente de produção, para que eu receba como resposta outro XML, procurei muito na internet e consegui montar um código que consegue chegar até o SOAP mas retorna um erro de um atributo que fica dentro da WSDL e não sei como resolver, alguém poderia me ajudar? Por se tratar de uma chave pública vou postar o código literal aqui:

 

<?php
try {
 $client = new SoapClient('https://servicoshm.saude.gov.br/cadsus/CadsusService/v5r0?wsdl'); // "ligar" o debug
$parameters = array('<soap:Envelope 
xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
xmlns:cad="http://servicos.saude.gov.br/cadsus/v5r0/cadsusservice" 
xmlns:cnes="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/cnesusuario" 
xmlns:fil="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/filtropesquisa" 
xmlns:nom="http://servicos.saude.gov.br/schema/corporativo/pessoafisica/v1r2/nomecompleto" 
xmlns:nom1="http://servicos.saude.gov.br/schema/corporativo/pessoafisica/v1r0/nomefamilia" 
xmlns:cpf="http://servicos.saude.gov.br/schema/corporativo/documento/v1r2/cpf" 
xmlns:mun="http://servicos.saude.gov.br/schema/corporativo/v1r2/municipio" 
xmlns:uf="http://servicos.saude.gov.br/schema/corporativo/v1r1/uf" 
xmlns:tip="http://servicos.saude.gov.br/schema/corporativo/documento/v5r0/tipodocumento">
    <soap:Header>
      <wsse:Security soap:mustUnderstand="1" 
      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-F6C95C679D248B6E3F143032021465917">
      <wsse:Username>CADSUS.CNS.PDQ.PUBLICO</wsse:Username>
      <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">kUXNmiiii#RDdlOELdoe00966</wsse:Password>
      <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">KkB/ki6qUjcZpGNqL4monw==</wsse:Nonce>
      <wsu:Created>2015-04-29T15:10:14.659Z</wsu:Created>
      </wsse:UsernameToken>
      </wsse:Security>
   </soap:Header>
   <soap:Body>
      <cad:requestPesquisar>
         <cnes:CNESUsuario>
            <cnes:CNES>6963447</cnes:CNES>
            <cnes:Usuario>LEONARDO</cnes:Usuario>
            <!--Optional:-->
            <cnes:Senha>?</cnes:Senha>
         </cnes:CNESUsuario>
         <fil:FiltroPesquisa>           
            <!--Optional:-->
            <fil:nomeCompleto>
               <nom:Nome>SERGIO ARAUJO CORREIA LIMA</nom:Nome>
            </fil:nomeCompleto>       
            <fil:tipoPesquisa>IDENTICA</fil:tipoPesquisa>
         </fil:FiltroPesquisa>
         <cad:higienizar>0</cad:higienizar>
      </cad:requestPesquisar>
   </soap:Body>
</soap:Envelope>');  
 $wcf = $client->Pesquisar($parameters);
 // o resto do código
}catch(SoapFault $fault){ 
 echo 'Request: <br/><xmp>', 
 $client->__getLastRequest(),
 '</xmp><br/><br/> Error Message: <br/>', 
 $fault->getMessage(); 
}

 

Pelo soapUI eu passo esse XML para a WSDL acima e ele me responde:

 

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <S:Header xmlns:S="http://www.w3.org/2003/05/soap-envelope">
      <work:WorkContext xmlns:work="http://oracle.com/weblogic/soap/workarea/">rO0ABXdfABl3ZWJsb2dpYy5hcHAuY2Fkc3VzLWVhci01AAAA1gAAACN3ZWJsb2dpYy53b3JrYXJlYS5TdHJpbmdXb3JrQ29udGV4dAAVNS40LjE1LVNOQVBTSE9ULjEwNzM5AAA=</work:WorkContext>
   </S:Header>
   <S:Body xmlns:S="http://www.w3.org/2003/05/soap-envelope">
      <cad:responsePesquisar xmlns:cad="http://servicos.saude.gov.br/cadsus/v5r0/cadsusservice">
         <res:ResultadoPesquisa xmlns:res="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
            <ns18:CNS xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
               <ns4:numeroCNS xmlns:ns4="http://servicos.saude.gov.br/schema/cadsus/v5r0/cns">703404696479515</ns4:numeroCNS>
            </ns18:CNS>
            <ns18:NomeCompleto xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
               <ns11:Nome xmlns:ns11="http://servicos.saude.gov.br/schema/corporativo/pessoafisica/v1r2/nomecompleto">SERGIO ARAUJO CORREIA LIMA</ns11:Nome>
            </ns18:NomeCompleto>
            <ns18:dataNascimento xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">1981-11-10</ns18:dataNascimento>
            <ns18:Mae xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
               <ns11:Nome xmlns:ns11="http://servicos.saude.gov.br/schema/corporativo/pessoafisica/v1r2/nomecompleto">LINDYNALVA SOARES ARAUJO CORREIA LIMA</ns11:Nome>
            </ns18:Mae>
            <ns18:Pai xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
               <ns11:Nome xmlns:ns11="http://servicos.saude.gov.br/schema/corporativo/pessoafisica/v1r2/nomecompleto">DEJAIR CORREIA LIMA</ns11:Nome>
            </ns18:Pai>
            <ns18:Sexo xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
               <ns19:codigoSexo xmlns:ns19="http://servicos.saude.gov.br/schema/corporativo/pessoafisica/v1r1/sexo">M</ns19:codigoSexo>
            </ns18:Sexo>
            <ns18:MunicipioNascimento xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
               <ns15:codigoMunicipio xmlns:ns15="http://servicos.saude.gov.br/schema/corporativo/v1r2/municipio">211130</ns15:codigoMunicipio>
               <ns15:nomeMunicipio xmlns:ns15="http://servicos.saude.gov.br/schema/corporativo/v1r2/municipio">SAO LUIS</ns15:nomeMunicipio>
               <ns15:UF xmlns:ns15="http://servicos.saude.gov.br/schema/corporativo/v1r2/municipio">
                  <ns16:codigoUF xmlns:ns16="http://servicos.saude.gov.br/schema/corporativo/v1r1/uf"/>
                  <ns16:siglaUF xmlns:ns16="http://servicos.saude.gov.br/schema/corporativo/v1r1/uf">MA</ns16:siglaUF>
               </ns15:UF>
            </ns18:MunicipioNascimento>
            <ns18:PaisNascimento xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
               <ns20:codigoPais xmlns:ns20="http://servicos.saude.gov.br/schema/corporativo/v1r2/pais">010</ns20:codigoPais>
               <ns20:nomePais xmlns:ns20="http://servicos.saude.gov.br/schema/corporativo/v1r2/pais">BRASIL</ns20:nomePais>
            </ns18:PaisNascimento>
            <ns18:GrauQualidade xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
               <ns21:percentualQualidade xmlns:ns21="http://servicos.saude.gov.br/schema/cadsus/v5r0/grauqualidade">91</ns21:percentualQualidade>
            </ns18:GrauQualidade>
            <ns18:IdentificadorCorporativo xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">
               <ns2:numeroIdentificadorCorporativo xmlns:ns2="http://servicos.saude.gov.br/schema/cadsus/v5r0/identificadorcorporativo">0002189687</ns2:numeroIdentificadorCorporativo>
            </ns18:IdentificadorCorporativo>
            <ns18:Situacao xmlns:ns18="http://servicos.saude.gov.br/wsdl/mensageria/v5r0/resultadopesquisa">true</ns18:Situacao>
         </res:ResultadoPesquisa>
      </cad:responsePesquisar>
   </S:Body>
</soap:Envelope>

 

*** Porém quando eu rodo o código acima ele me retorna:

SOAP-ERROR: Encoding: object has no 'CNESUsuario' property 

 

Já li uma tonelada de conteúdo e não consigo encontrar uma solução para o problema.

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 Sapinn
      Fala galare, blz? Então, estou desenvolvendo um sistema de vendas e eu gostaria de saber como fazer para devolver o produto ao estoque no caso de cancelamento da venda ou na devolução.
      Por exemplo:
      Digamos que eu tenha um estoque com 10 fones de ouvido, 5 teclados e 20 pen drives.
      Então um cliente comprou 1 fone de ouvido, 1 teclado e 2 pendrive, eu já consigo ajustar o estoque para diminuir ficando:
      9 fones de ouvido, 4 teclados, 18 pen drives.
       
      Mas digamos que, por alguma razão, o cliente gostaria de devolver o pen drives e o fone de ouvido como eu faria para colocar ambos de volta ao seu respectivo estoque, ou seja ajustar os 9 fones e os 18 pen drive de volta para 10 fones e 20 pen drive??
    • By Giovanird
      Olá a todos!

      Tenho uma rotina no cron em um servidor que executa uma pagina onde é alterado o status de clientes.
      Preciso que após acessar e alterar o status do cliente, está pagina seja direcionada para uma outra pagina após uns 10 segundos.
      Executando diretamente pelo navegador a página é direcionada corretamente, quando executada pelo cron ela não direciona.
       
      No  cron estou usando o comando:
      curl -s https://www.dominio.com.br/alt.php
       
      No direcionamento coloquei um refresh javascript dentro de um header
      header( 'refresh:10; url=https://www.dominio.com.br/posalt.php?t=2');
       
      Obs.: Está pagina já roda a algum tempo no cron sem o direcionamento, agora que se fez necessário criar este direcionamento.
       

    • By danilo759
      Estou contratando um programador PHP para desenvolver um guia de programação, pago à vista.
    • By alysson122010
      Gostaria de saber como eu consigo recuperar dados do xml da seguinte forma. Tenho esse meu codigo php
       
      foreach($xml -> cadastros->exame as $item_3){  
                  $codigo = $item_3['codigo']; 
      }
       
      Que recuperar os exames desse xml:
      <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> <resultados versao="20101018" origem="aol" datahora="2021-07-22 08:25:45">     <cadastros>         <pacientes>             <paciente codigo="250058718" codigo_lis="" codigo_aol="250058718" datanasc="" nome=" " sexo="M"/>         </pacientes>         <materiais>             <material codigo="856" descricao="plasma citratado"/>             <material codigo="879" descricao="sangue total EDTA"/>             <material codigo="543" descricao="soro"/>         </materiais>         <exame codigo="TSH" descricao="TSH - HORMÔNIO TIREOESTIMULANTE - Ultrassensivel" dataalteracao="21/11/2019 17:37:15">             <linhasresultado>                 <linha codigo="1240" descricao="TSH - HORMÔNIO TIREOESTIMULANTE Ultrasensivel" unidade="µUI/mL"/>             </linhasresultado>             <valorreferencia><![CDATA[0 a 3 dias: 1,100 a 15,700 µUI/mL 3 dias a 2 meses e 14 dias: 0,600 a 9,200 µUI/mL 2meses 14dias a 1ano 3meses:0,400 a 6,000 µUI/mL 1 ano e 3 meses a 6 anos: 0,400 a 5,200 µUI/mL 6 a 15 anos: 0,300 a 4,200 µUI/mL 15 a 60 anos: 0,400 a 4,300 µUI/mL 60 a 80 anos: 0,400 a 5,800 µUI/mL Superior a 80 anos: 0,400 a 6,700 µUI/mL Gestantes: Primeiro Trimestre: 0,100 a 3,600 µUI/mL Segundo Trimestre: 0,400 a 4,300 µUI/mL Terceiro Trimestre: 0,400 a 4,300 µUI/mL ]]></valorreferencia>         </exame>         <exame codigo="LIPAS" descricao="LIPASE" dataalteracao="28/03/2019 09:23:47">             <linhasresultado>                 <linha codigo="883" descricao="LIPASE" unidade="U/L"/>             </linhasresultado>             <valorreferencia><![CDATA[Inferior a 60,0 U/L]]></valorreferencia>         </exame>         <exame codigo="T4L" descricao="T4 - TIROXINA LIVRE" dataalteracao="16/04/2019 14:43:34">             <linhasresultado>                 <linha codigo="1174" descricao="T4 - TIROXINA LIVRE" unidade="ng/dL"/>             </linhasresultado>             <valorreferencia><![CDATA[0,70 a 1,80  ng/dL]]></valorreferencia>         </exame>         <exame codigo="AMILA" descricao="AMILASE TOTAL" dataalteracao="16/04/2019 12:02:51">             <linhasresultado>                 <linha codigo="83" descricao="AMILASE TOTAL" unidade="U/L"/>             </linhasresultado>             <valorreferencia><![CDATA[Até  115,0 U/L]]></valorreferencia>         </exame>         <exame codigo="FA" descricao="FOSFATASE ALCALINA" dataalteracao="15/04/2019 11:51:01">             <linhasresultado>                 <linha codigo="542" descricao="FOSFATASE ALCALINA" unidade="U/L"/>             </linhasresultado>             <valorreferencia><![CDATA[0 a 14 dias: 82 a 249 U/L 15 dias a 1 ano: 122 a 473 U/L Sexo Feminino: Feminino 1 a 9 anos: 149 a 301 U/L Feminino 10 a 12 anos: 127 a 326 U/L Feminino 13 a 14 anos: 62 a 212 U/L Feminino 15 a 16 anos: 52 a 120 U/L Feminino 17 a 18 anos: 45 a 97 U/L Adultos: 25 a 100 U/L Sexo Masculino: Masculino 1 a 9 anos: 149 a 301 U/L Masculino 10 a 12 anos: 127 a 326 U/L Masculino 13 a 14 anos: 129 a 437 U/L Masculino 15 a 16 anos: 78 a 268 U/L Masculino 17 a 18 anos: 40 a 129 U/L Adultos: 25 a 100 U/L Referência: Fontes R, Cavalari E, Vieira Neto L, et al. Alkaline phosphatase: reference interval transference from CALIPER to a pediatric Brazilian population. J Bras Patol Med Lab. 2018; 54(4): 227-31.]]></valorreferencia>         </exame>         <exame codigo="HBGLI3" descricao="HEMOGLOBINA GLICADA" dataalteracao="28/06/2021 09:26:18">             <linhasresultado>                 <linha codigo="12976" descricao="Hb SA1c - Forma estável" unidade="%"/>                 <linha codigo="16572" descricao="Glicose Média Estimada (GME)" unidade="mg/dL"/>             </linhasresultado>             <valorreferencia><![CDATA[ Hemoglobina Glicada - Hb SA1c Normal: Inferior a 5.7% Risco aumentado para Diabetes Mellitus: 5,7 a 6,4% Diabete Mellitus: Igual ou superior a 6,5% Para o diagnóstico de Diabetes Mellitus a dosagem  de HbA1c deve ser confirmada com novo exame em dia diferente,exceto se houver hiperglicemia inequívo- ca com descompensação metabólica aguda ou sintomas clássicos da doença. A Associação Americana de Diabetes recomenda como  meta para o tratamento de pacientes diabéticos re- sultados de HbA1c iguais ou inferiores a 7%.  Conforme recomendado pela American Diabetes Asso- ciation(ADA) e European Association for the Study  of Diabetes (EASD), estamos liberando cálculo da  glicose média estimada(GME). Este cálculo é obtido a partir do valor de HbA1c através de uma fórmula  matemática baseada em uma relação linear entre os  níveis de HbA1c e a glicose média sanguínea.  Ref. Diabetes Care, 2014; 37 (suppl 1): 81-90/Diretri- zes da Sociedade Brasileira de Diabestes/2013-2014 :9-11.]]></valorreferencia>         </exame>         <exame codigo="COAG4" descricao="COAGULOGRAMA IV" dataalteracao="06/09/2019 14:27:19">             <linhasresultado>                 <linha codigo="14811" descricao="PLAQUETAS - Contagem" unidade="/uL"/>             </linhasresultado>             <valorreferencia><![CDATA[Atividade de Protrombina: 70 a 100% RNI: 0,80 a 1,20 Ratio: Inferior a 1,25 Plaquetas: 150.000 a 450.000/uL RNI - Intervalo de Refêrencias(Alvos Terapeuticos) Recomendações do American College of Physicians, National Heart Lung and Blood Institute for Haematology.]]></valorreferencia>         </exame>     </cadastros>     <solicitacao codigo="238228701" codigo_aol="238228701" paciente="250058718">         <amostras>             <amostra codigo="0" descricao="Basal" material="856"/>             <amostra codigo="1" descricao="Basal" material="879"/>             <amostra codigo="2" descricao="Basal" material="543"/>         </amostras>         <exame codigo="FA" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico" observacao="" normal="S">             <resultado amostra="2" linharesultado="542" resultado="51,0"/>         </exame>         <exame codigo="HBGLI3" dataresultado="20/07/2021 05:48:28" metodo="Imunoensaio Turbidimétrico de Inibição " observacao="" normal="S">             <resultado amostra="1" linharesultado="12976" resultado="5,1"/>             <resultado amostra="1" linharesultado="16572" resultado="100"/>         </exame>         <exame codigo="TSH" dataresultado="20/07/2021 04:27:20" metodo="Eletroquimioluminescência" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="1240" resultado="2,000"/>         </exame>         <exame codigo="AMILA" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico Enzimático" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="83" resultado="83,0"/>         </exame>         <exame codigo="COAG4" dataresultado="21/07/2021 13:29:20" metodo="Coagulométrico/Sistema Automatizado" observacao="" normal="S">             <resultado amostra="0" linharesultado="14811" resultado="305000"/>         </exame>         <exame codigo="LIPAS" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico Enzimático" observacao="" normal="S">             <resultado amostra="2" linharesultado="883" resultado="47,0"/>         </exame>         <exame codigo="T4L" dataresultado="20/07/2021 04:27:20" metodo="Eletroquimioluminescência" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="1174" resultado="1,16"/>         </exame>     </solicitacao> </resultados>  
      Até ai consegui e conseguir mostrar o valor de codigo="codigo do exame". Porém preciso fazer uma segunda consulta da parte :
       
       
      <solicitacao codigo="238228701" codigo_aol="238228701" paciente="250058718">         <amostras>             <amostra codigo="0" descricao="Basal" material="856"/>             <amostra codigo="1" descricao="Basal" material="879"/>             <amostra codigo="2" descricao="Basal" material="543"/>         </amostras>         <exame codigo="FA" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico" observacao="" normal="S">             <resultado amostra="2" linharesultado="542" resultado="51,0"/>         </exame>         <exame codigo="HBGLI3" dataresultado="20/07/2021 05:48:28" metodo="Imunoensaio Turbidimétrico de Inibição " observacao="" normal="S">             <resultado amostra="1" linharesultado="12976" resultado="5,1"/>             <resultado amostra="1" linharesultado="16572" resultado="100"/>         </exame>         <exame codigo="TSH" dataresultado="20/07/2021 04:27:20" metodo="Eletroquimioluminescência" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="1240" resultado="2,000"/>         </exame>         <exame codigo="AMILA" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico Enzimático" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="83" resultado="83,0"/>         </exame>         <exame codigo="COAG4" dataresultado="21/07/2021 13:29:20" metodo="Coagulométrico/Sistema Automatizado" observacao="" normal="S">             <resultado amostra="0" linharesultado="14811" resultado="305000"/>         </exame>         <exame codigo="LIPAS" dataresultado="20/07/2021 04:27:20" metodo="Colorimétrico Enzimático" observacao="" normal="S">             <resultado amostra="2" linharesultado="883" resultado="47,0"/>         </exame>         <exame codigo="T4L" dataresultado="20/07/2021 04:27:20" metodo="Eletroquimioluminescência" observacao="Considerar a metodologia Quimioluminescência para a análise deste teste." normal="S">             <resultado amostra="2" linharesultado="1174" resultado="1,16"/>         </exame>     </solicitacao>  
      Onde eu consiga pegar o codigo que recuperei acima e liste os resultados da parte de solicitacao referente ao codigo="codigo do exame que eu listei a cima" mas nao to conseguindo fazer. Como eu posso fazer isso?
×

Important Information

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