GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Erro ao capturar resposta XML no PHP

Estou fazendo uma leitura XML dentro de um servidor local, nessa envio dados e recebo o retorno SOAP, a resposta vem corretamente da maneira que eu preciso

    //Recebe o numero do documento
    $documento = $_POST['documento'];
    
    //xml para consulta do documento
    $post_string = '<?xml version="1.0"?><soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:DWLibrary-CSLogService"><soapenv:Header/><soapenv:Body><urn:buscaContratoPorCPFCNPJ soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><login xsi:type="xsd:string">user</login><senha xsi:type="xsd:string">password</senha><cpfcnpj xsi:type="xsd:string">'.$documento.'</cpfcnpj></urn:buscaContratoPorCPFCNPJ></soapenv:Body></soapenv:Envelope>';
    
    //url servidor para trazer os dados do serviço
    $url = 'http://192.168.0.84:8103/SOAP?service=CSLogService';

    //trazendo os dados via soap
    $soap_do = curl_init(); 
    curl_setopt($soap_do, CURLOPT_URL,            $url);   
    curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10); 
    curl_setopt($soap_do, CURLOPT_TIMEOUT,        60); 
    curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
    curl_setopt($soap_do, CURLOPT_POSTFIELDS,    $post_string); 
    
    //resultado da consulta
    $result = curl_exec($soap_do);
    $err = curl_error($soap_do);  

O resultado vem como outro XML onde traz os dados da API onde estou consumindo. Mais quando eu tento ler a variável $Result que traz o XML não retorna nenhum dado.

    //tratando o resultado de outro xml para ler os dados
    $xml=simplexml_load_string($result);
    print_r($xml);

A váriavel $result vem com os dados que eu preciso e consigo imprimir com echo mais não funciona quando tento ler o XML e capturar um valor de tag, porém quando eu copio o valor da várivel $result crio uma variavel apartada e colo o valor lá (ex: $dadosXML = “MEU_XML”), o PHP faz a leitura do XML e me retorna o valor das Tags, porém a váriavel contendo o mesmo valor vindo da leitura SOAP, o PHP não consegue fazer a leitura. (OBS: eu já converti a váriavel $result em string e mesmo assim não foi). Alguém poderia me ajudar por favor?

Se você está consumindo um WebService Soap, o ideal não é manipular o XML na mão. Utilize a extensão de SOAP:

https://php.net/soap

A classe Soap Client é a que você precisa para consumir um webservice. :wink:

//