Проблемы с использованием PHP Soap Client - PullRequest
0 голосов
/ 14 декабря 2011

У меня есть этот веб-сервис для доступа с такой конфигурацией:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
    <Executar xmlns="http://localhost/I9ProWebService">
      <Servico>string</Servico>
      <conteudoXML>string</conteudoXML>
    </Executar>
  </soap:Body>
</soap:Envelope>

Итак, я попробовал это:

$client = new soapclient('https://domain/webservice/I9ProWebService.asmx?WSDL');
printf($client->Executar("ListarTomador","<i9proerp><listar_tomador id_pessoa_corretor     =\"205\" /></i9proerp>"));

показывает эту ошибку:

System.Web.Services.Protocols.SoapException: серверу не удалось обработать запрос. ---> System.NullReferenceException: ссылка на объект не установлена ​​для экземпляра объекта. в I9ProWebService.Executar (String Servico, String conteudoXML) --- Конец внутренней трассировки стека исключений ---

Ответы [ 2 ]

0 голосов
/ 15 декабря 2011

Я нашел решение своей проблемы.

$client = new SoapClient("http://domain/webservice/I9ProWebService.asmx?WSDL", array("features" => SOAP_SINGLE_ELEMENT_ARRAYS, "encoding" => "utf-8","trace"=> TRUE));
$strVariavel = "<ns1:conteudoXML><i9proerp><listar_tomador id_pessoa =\"999\"/></i9proerp></ns1:conteudoXML>";
$soapvar = new SoapVar($strVariavel, 147);
$xml = $client->ExecutarXML(array('Servico'=>'ListarTomador','conteudoXML'=>$soapvar));
print_r($xml);

и вуаля

Проблема в том, что он возвращает и объект, а не XML, как я ожидал ...

Возвращает:

 stdClass Object
 (
     [ExecutarXMLResult] => stdClass Object
         (
                 [any] => <i9proerp xmlns=""><listatomador id_pessoa="5251" nm_pessoa="nome1"  nr_cnpj_cpf="132132121332"/><listatomador id_pessoa="939" nm_pessoa="nome2" nr_cnpj_cpf="3213213123213"/></i4proerp>
            )
       )

Итак, я должен выяснить, как с этим бороться.Можно ли открыть еще один вопрос ?

0 голосов
/ 15 декабря 2011

Вы пытались использовать htmlentities или подобное для кодирования XML, который вы отправляете в качестве второго параметра?Это может вызывать проблемы с XML, отправляемым клиентом SOAP.

EDIT : чтобы узнать, какой XML отправляет клиент PHP SOAP и что он возвращает, вы можете использовать $client->__getLastRequest() и $client->__getLastResponse() и сравните результаты с вашим вызовом soapUI.

...