无法为客户端soap请求创建对象xml


Cannot create object xml for client soap request

我试图让客户端请求soap web服务,当我尝试使用simplexml_load_string创建xml时,它说:

Error: Cannot create object

没有任何其他错误,所以我不知道我做错了什么,我的代码如下,我希望你能帮助我解决这个问题

<?php
        $produccion = false; //Cambiar a verdadero por producction
        $url = "http://ws.maxirest.com/wsclientes/wscli06896.php";
        //print_r($_POST);
        $posts = $_POST;
        if ($produccion == false) {
            $posts['nombre'] =
                $posts['apellido'] =
                    $posts['direccion'] =
                            $posts['pisodto'] =
                                $posts['localidad'] =
                                    $posts['partido'] =
                                        $posts['provincia'] =
                                            $posts['telefono'] =
                                                $posts['celular'] =
                                                        "PRUEBA";
        }
        $Datos = "<cliente>
        <nombre>".$posts['nombre']."</nombre>
        <apellido>".$posts['apellido']."</apellido>
        <calle>".$posts['direccion']."</calle>
        <altura>".$posts['altura']."</altura>
        <pisodto>".$posts['pisodto']."</pisodto>
        <localidad>".$posts['localidad']."</localidad>
        <partido>".$posts['partido']."</partido>
        <provincia>".$posts['provincia']."</provincia>
        <telefono>".$posts['telefono']."</telefono>
        <celular>".$posts['celular']."</celular>
        <num_tarjeta>".$posts['num_tarjeta']."</num_tarjeta>
        </cliente>";
        $myXMLData = '<?xml version="1.0" encoding="utf-8"?>
        <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:ws="http://ws.maxisistemas.com.ar">
        <soapenv:Header/>
        <soapenv:Body>
        <ws:AltaSolicitud soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
        <cXml>'.$Datos.'</cXml>
        <Clave>123ClubMilaMREST5</Clave>
        </ws:AltaSolicitud>
        </soapenv:Body>
        </soapenv:Envelope>';
        $xml=simplexml_load_string($myXMLData) or die("Error: Cannot create object"); //<-Here is the error
        $client = new SoapClient($url);
        $result1 = $client->AltaSolicitud($xml);
        $result2 = $client->ConsultaPuntos($xml);
?>

我无法得到答案,但是

=> "错误。

但是有了正确的凭证和数据,你应该能够从下面的类中获得你需要的信息。

只需在setData()函数中设置数据/先调用它,然后调用AltoSolicitud(), Clave作为参数

class Request extends 'SoapClient
{
      public $Datos;

    public function __construct(array $options = [], $wsdl = 'http://ws.maxirest.com/wsclientes/wscli06896.php?wsdl')
    {
        $options = [
            'features' => 1,
            ];
        parent::__construct($wsdl, $options);
    }
    /**
     * @param string $Clave
     * @return string
     */
    public function AltaSolicitud()
    {
        $Data = $this->getData();
        try {
            return $this->__soapCall('AltaSolicitud', [
                $Data
            ]);
        } catch ('SoapFault $e) {
            return ($e->getMessage());
        }
    }
        public function setData($posts,$produccion = false)
    {
        if ( ! $produccion) {
            $posts['nombre'] =
            $posts['apellido'] =
            $posts['direccion'] =
            $posts['pisodto'] =
            $posts['localidad'] =
            $posts['partido'] =
            $posts['provincia'] =
            $posts['telefono'] =
            $posts['celular'] =
                "PRUEBA";
        }
        $Datos = "<cliente><nombre>".$posts['nombre']."</nombre>
        <apellido>".$posts['apellido']."</apellido>
        <calle>".$posts['direccion']."</calle>
        <altura>".$posts['altura']."</altura>
        <pisodto>".$posts['pisodto']."</pisodto>
        <localidad>".$posts['localidad']."</localidad>
        <partido>".$posts['partido']."</partido>
        <provincia>".$posts['provincia']."</provincia>
        <telefono>".$posts['telefono']."</telefono>
        <celular>".$posts['celular']."</celular>
        <num_tarjeta>".$posts['num_tarjeta']."</num_tarjeta></cliente>";
        $Clave = '123ClubMilaMREST5';

    $myXMLData = <<<XML
<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:ws="http://ws.maxisistemas.com.ar">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:AltaSolicitud soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
         <cXml xsi:type="xsd:string">' . str_replace(PHP_EOL,'',$Datos) . '</cXml>
         <Clave xsi:type="xsd:string">' . $Clave . '</Clave>
      </ws:AltaSolicitud>
   </soapenv:Body>
</soapenv:Envelope>
XML;
        $this->Datos = $myXMLData;
        return $this;
    }
    /**
     * @param string $Cod_Tarj
     * @param string $Clave
     * @return string
     */
    public function ConsultaPuntos($Cod_Tarj, $Clave)
    {
        return $this->__soapCall('ConsultaPuntos', [$Cod_Tarj, $Clave]);
    }
    public function getData(){
         return $this->Datos;

}

 $request = (new Request)->setData($_POST,false)->AltaSolicitud();
 var_dump($request);

@Ricardo

我能够使你的代码工作通过添加"wsdl"到url。修改后我没有看到错误"Cannot create object"

 $url = "http://ws.maxirest.com/wsclientes/wscli06896.php?wsdl";

我做了一些其他的小改动,但我认为它们并不重要:

$xml = simplexml_load_string( $myXMLData ); //or die("Error: Cannot create object"); //<-Here is the error
$client = new SoapClient( $url , array('trace' => 1 ));
$result1 = $client->AltaSolicitud($xml);
echo "Response:'n" . $client->__getLastResponse() . "'n";

结果是相同的"ERROR "。accesso NO PERMITIDO"已经注意到。在我看来,肥皂参数<Clave>123ClubMilaMREST5</Clave>不正确或过期。我注意到这一点是因为这个词在意大利语中几乎是一样的(chiave = clave = key)。我想这是一个像许多web服务需要的API密钥?

SOAP响应

<?xml version="1.0" encoding="ISO-8859-1"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <ns1:AltaSolicitudResponse xmlns:ns1="http://ws.maxisistemas.com.ar">
            <return xsi:type="xsd:string">ERROR. ACCESO NO PERMITIDO</return>
        </ns1:AltaSolicitudResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>