发送和请求SOAP

时间:2017-12-11 21:02:29

标签: php soap request send

我正在尝试使用我在互联网上发现的一个示例来从xml发送和接收SOAP URL,但我无法理解SOAP的工作原理。

任何人都可以帮助我吗?这是我传递的代码:

$xml = <<<XML
<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><fil:CPF><cpf:numeroCPF>66105234368</cpf:numeroCPF></fil:CPF><fil:tipoPesquisa>IDENTICA</fil:tipoPesquisa></fil:FiltroPesquisa><cad:higienizar>0</cad:higienizar></cad:requestPesquisar></soap:Body></soap:Envelope>
XML;

$wsdl = 'https://servicoshm.saude.gov.br/cadsus/CadsusService/v5r0?wsdl';
$client = new SoapClient($wsdl, array(
    'cache_wsdl'    => WSDL_CACHE_NONE, 
    'cache_ttl'     => 86400, 
    'login'=> "CADSUS.CNS.PDQ.PUBLICO",
    'password'=> "kUXNmiiii#RDdlOELdoe00966",
    'trace'         => true,
    'exceptions'    => true,
));

$xmlVar = new SoapVar($xml, XSD_ANYXML);
$client->getCustomerInfo($xml);

错误:

  

致命错误:未捕获的SoapFault异常:[客户端]函数(“getCustomerInfo”)不是/home/itconect/www/sisam/testeJ.php:18中此服务的有效方法。堆栈跟踪:#0 / home / itconect / www / sisam / testeJ.php(18):SoapClient-&gt; __ call('getCustomerInfo',Array)#1 /home/itconect/www/sisam/testeJ.php(18):SoapClient-&gt; getCustomerInfo('

我对此代码有另一个疑问。我会收到结果还是我必须补充一些东西呢?

1 个答案:

答案 0 :(得分:1)

如果您正在使用代码的WSDL,那么此SOAP服务没有名为“getCustomerInfo”的方法。根据WSDL的方法是pesquisar,consultar,incluir,atualizar,alterarSituacao和calcularGrauDeQualidade。

我还建议使用php助手而不是自己编写xml(例如:How to make a PHP SOAP call using the SoapClient class)。

编辑:一个非常基本的例子

<?php

$wsdl = 'http://www.webservicex.net/BibleWebservice.asmx?WSDL';
$client = new SoapClient($wsdl, array(
    'cache_wsdl'    => WSDL_CACHE_NONE,
    'trace'         => true,
    'exceptions'    => true,
 ));

$keyword = new StdClass();
$keyword->BibleWords = "god";

$result = $client->GetBibleWordsbyKeyWord($keyword);

var_dump($result);