如何打印响应肥皂请求的单个xml值?

时间:2019-01-16 08:07:21

标签: php soap

这是我的SOAP客户端请求代码:

<?php

    $cf = "DTRMRA48P55D539C";
    $chiave = "700400125745081";
    $numdoc = "AV1871102";
    $tipodoc = 1;
        //$numid = $_POST['numid'];
    $codoper = "PCCPLA66T11L719L";
    $idag = "35852";

    $wsdl = "https://portalws.inps.it/ws/wsCessioneQuintoWebTest/WsInpsCessioneQuinto.asmx?WSDL";
    $local_cert = "C:\\Apache24\htdocs\sirio2.pem";

         $soapClient = new SoapClient($wsdl, array('local_cert' => $local_cert, 'trace' => 1, 'soap_version' => SOAP_1_1));
    try {
        $result = $soapClient->RichiestaCedibilita(array('CodFiscale' => $cf, 'ChiavePensione' =>  $chiave, 'NumDocumento' => $numdoc, 'TipoDocumento' => 1, 'CodiceOperatore' => $codoper, 'IdentificativoAgenzia' => $idag));

    print_r($soapClient->__getlastResponse());

        $soap = print_r($soapClient->__getlastResponse());

        print_r($soap);

}

catch (SoapFault $exception) {
   echo $exception;      
}  

?>

这是我的回复:

<?xml version="1.0" encoding="utf-8" ?><DatiCedibilita><Cedibilita><Id>20190000277</Id><CodiceFiscale>DTRMRA48P55D539C</CodiceFiscale><ChiavePensione>700400125745081</ChiavePensione><Cognome>DTR</Cognome><Nome>MRA</Nome><DataNascita>1948-09-15</DataNascita><CodiceSede>0100</CodiceSede><DenominazioneSede>AGRIGENTO</DenominazioneSede><IndirizzoSede>VIA PICONE 20/30 - 92100 - AGRIGENTO - AG</IndirizzoSede><Importo>250.0000</Importo><DataUltimaRichiestaCedibilita>2019-01-15</DataUltimaRichiestaCedibilita><RichiedenteUltimaCedibilita>Istituto di Credito</RichiedenteUltimaCedibilita><DataScadenzaAOI>202002</DataScadenzaAOI><DataRilascio>2019-01-16</DataRilascio><Note></Note><ProtocolloINPS>INPS.TESTC1.16/01/2019.0000287</ProtocolloINPS><CodiceErrore>0</CodiceErrore><DescrizioneErrore></DescrizioneErrore></Cedibilita></DatiCedibilita><?xml version="1.0" encoding="utf-8" ?><DatiCedibilita><Cedibilita><Id>20190000277</Id><CodiceFiscale>DTRMRA48P55D539C</CodiceFiscale><ChiavePensione>700400125745081</ChiavePensione><Cognome>DTR</Cognome><Nome>MRA</Nome><DataNascita>1948-09-15</DataNascita><CodiceSede>0100</CodiceSede><DenominazioneSede>AGRIGENTO</DenominazioneSede><IndirizzoSede>VIA PICONE 20/30 - 92100 - AGRIGENTO - AG</IndirizzoSede><Importo>250.0000</Importo><DataUltimaRichiestaCedibilita>2019-01-15</DataUltimaRichiestaCedibilita><RichiedenteUltimaCedibilita>Istituto di Credito</RichiedenteUltimaCedibilita><DataScadenzaAOI>202002</DataScadenzaAOI><DataRilascio>2019-01-16</DataRilascio><Note></Note><ProtocolloINPS>INPS.TESTC1.16/01/2019.0000287</ProtocolloINPS><CodiceErrore>0</CodiceErrore><DescrizioneErrore></DescrizioneErrore></Cedibilita></DatiCedibilita>1 ?> 

如何打印单个标签值? 例如:

Id = 20190000277

4 个答案:

答案 0 :(得分:1)

所有这些行仅回显值以输出

print_r($soapClient->__getlastResponse());
$soap = print_r($soapClient->__getlastResponse());
print_r($soap);

删除上方的行,并在下方替换。要设置$ soap并获取值,请使用xml解析器,例如simplexml库

$soap = $soapClient->__getlastResponse();
$xml = simplexml_load_string($soap);
echo $xml->Cedibilita->Id; // 20190000277

demo

答案 1 :(得分:0)

如果我是您,我会打给var_dump($soap)。这将向您显示您必须使用的数组/对象的结构。然后,您可以对此进行深入分析,以输出所需的确切值。

例如(如果是对象):

$id = $soap->id;

print("Id=" . $id);

如果是数组:

$id = $soap['id'];

print("Id=" . $id);

如果您提供var_dump($soap),我应该可以向您确切显示所需的代码。

希望对您有帮助!

答案 2 :(得分:0)

您需要获取有关SOAP服务的功能和类型的信息。

<?php
...
# SOAP Client
$soapClient = new SoapClient($wsdl, array('local_cert' => $local_cert, 'trace' => 1, 'soap_version' => SOAP_1_1));

# List functions
echo 'Functions: '.'</br>';
$functions = $soapClient->__getFunctions();
foreach($functions as $item) {
    echo $item.'</br>';
}
echo '</br>';

# List types
echo 'Types: '.'</br>';
$types = $soapClient->__getTypes();
foreach($types as $item) {
    echo $item.'</br>';
}
echo '</br>';
...

?>

之后,根据此信息,您可以尝试读取SOAP响应。

使用您的方法,$soapClient->__getlastResponse()将在上一次SOAP响应中收到的XML作为XML字符串返回。在这种情况下,您可以将此字符串转换为XML并读取数据:

<?php
$soap =     
    '<?xml version="1.0" encoding="utf-8" ?>
    <DatiCedibilita>
        <Cedibilita>
            <Id>20190000277</Id>
            <CodiceFiscale>DTRMRA48P55D539C</CodiceFiscale>
            <ChiavePensione>700400125745081</ChiavePensione>
            <Cognome>DTR</Cognome>
            <Nome>MRA</Nome>
            <DataNascita>1948-09-15</DataNascita>
            <CodiceSede>0100</CodiceSede>
            <DenominazioneSede>AGRIGENTO</DenominazioneSede>
            <IndirizzoSede>VIA PICONE 20/30 - 92100 - AGRIGENTO - AG</IndirizzoSede>
            <Importo>250.0000</Importo>
            <DataUltimaRichiestaCedibilita>2019-01-15</DataUltimaRichiestaCedibilita>
            <RichiedenteUltimaCedibilita>Istituto di Credito</RichiedenteUltimaCedibilita>
            <DataScadenzaAOI>202002</DataScadenzaAOI>
            <DataRilascio>2019-01-16</DataRilascio>
            <Note></Note><ProtocolloINPS>INPS.TESTC1.16/01/2019.0000287</ProtocolloINPS>
            <CodiceErrore>0</CodiceErrore>
            <DescrizioneErrore></DescrizioneErrore>
        </Cedibilita>
    </DatiCedibilita>';

# Use this in your script. I expect, that $soapClient->__getlastResponse() returns the above string.
$soap = $soapClient->__getlastResponse();
$xml = simplexml_load_string($soap);
echo $xml->Cedibilita->Id;
?>  

答案 3 :(得分:0)

嗨,我尝试这个并为我工作:

<?php

    $cf = "DTRMRA48P55D539C";
    $chiave = "700400125745081";
    $numdoc = "AV1871102";
    $tipodoc = 1;
        //$numid = $_POST['numid'];
    $codoper = "PCCPLA66T11L719L";
    $idag = "35852";

    $wsdl = "https://portalws.inps.it/ws/wsCessioneQuintoWebTest/WsInpsCessioneQuinto.asmx?WSDL";
    $local_cert = "C:\\Apache24\htdocs\sirio2.pem";

    $soapClient = new SoapClient($wsdl, array('local_cert' => $local_cert, 'trace' => 1, 'soap_version' => SOAP_1_1));


  $result = $soapClient->RichiestaCedibilita(array('CodFiscale' => $cf, 'ChiavePensione' =>  $chiave, 'NumDocumento' => $numdoc, 'TipoDocumento' => 1, 'CodiceOperatore' => $codoper, 'IdentificativoAgenzia' => $idag));




$xml = simplexml_load_string($result->RichiestaCedibilitaResult);
echo ($xml->Cedibilita->Id);

?>