使用PHP Soap客户端的问题


Problems in using PHP Soap Client

我用这种配置来访问这个web服务:

<?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:服务器无法处理请求。——>系统。NullReferenceException:对象引用没有设置为对象的实例。在I9ProWebService。Executar(String Servico, String conteudoXML)——内部异常堆栈跟踪结束——

您是否尝试过使用htmlentities或类似的编码您正在发送的XML作为第二个参数?这可能会导致SOAP客户机发送的XML出现问题。

EDIT:为了查看PHP SOAP客户端正在发送和返回的XML,您可以使用$client->__getLastRequest()$client->__getLastResponse()并将结果与soapUI调用进行比较。

我找到了解决问题的办法。

$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>
            )
       )

所以,我必须发现如何处理它。是不是可以再提一个问题?