【问题标题】:Sending and requesting SOAP发送和请求 SOAP
【发布时间】:2018-05-25 11:21:18
【问题描述】:

我正在尝试使用我在互联网上找到的一个示例从 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 异常:[Client] 函数(“getCustomerInfo”)不是 /home/itconect/www/sisam/testeJ.php:18 中此服务的有效方法堆栈跟踪:#0 /home/ itconect/www/sisam/testeJ.php(18): SoapClient->__call('getCustomerInfo', Array) #1 /home/itconect/www/sisam/testeJ.php(18): SoapClient->getCustomerInfo('

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

【问题讨论】:

    标签: php soap request send


    【解决方案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);
    

    【讨论】:

    • 所以这个 XML 已经来自安装的客户端,我想要的就是你所说的,传递这个 XML 以便它以另一个 XML 将结果返回给我,你知道如何帮助我吗在这种情况下?
    • 我不知道你到底想达到什么目的。出于学习目的,我建议您尝试一些教程并使用一些公共可用的服务。我在答案中添加了一个基本示例,您可以使用该 WSDL 进行试验。
    • @Felix 您不需要使用 XML。您将一个 PHP 对象传递给客户端,它会返回一个 PHP 对象。您可以将classmap 选项传递给客户端,以便它将响应从XML 映射到PHP。除非你出于某种原因想使用 XML。
    猜你喜欢
    • 2013-08-13
    • 2012-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多