简体   繁体   English

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

[英]Cannot create object xml for client soap request

I am trying to make a client request for a soap web service, and when I try to create the xml with simplexml_load_string it says this: 我正在尝试向客户请求肥皂网络服务,当我尝试使用simplexml_load_string创建xml时,它说:

Error: Cannot create object

With no any other errors, so I can't figure it out what am I doing wrong, my code is bellow, I hope you can help me to solve this issue 没有其他错误,因此我无法弄清楚我在做什么错,我的代码在下面,希望您能帮助我解决此问题

<?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);

?>

I can't get an answer but 我没有答案,但是

=> "ERROR. ACCESO NO PERMITIDO" =>“错误。无法获得许可”

But with the right credentials and data you should be able to get the information you need with below class. 但是使用正确的凭据和数据,您应该能够在下面的课程中获取所需的信息。

Simply set your data in the setData() function / call it first and then call AltoSolicitud() with Clave as parameter 只需在setData()函数中设置数据/先调用它,然后使用Clave作为参数调用AltoSolicitud()

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 @Ricardo

I was able to make your code work by adding "wsdl" to the url. 通过在网址中添加“ wsdl”,我可以使您的代码正常工作。 After this change I did not see the error "Cannot create object". 进行此更改后,我没有看到错误“无法创建对象”。

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

I made some other minor changes, but I don't think they are important: 我做了一些其他小的更改,但我认为它们并不重要:

$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";

And the result was the same "ERROR. ACCESO NO PERMITIDO" already noted. 结果是已经注意到相同的“ ERROR。ACCESO NO PERMITIDO”。 To me it appears that the soap parameter <Clave>123ClubMilaMREST5</Clave> is incorrect or expired. 对我来说,soap参数<Clave>123ClubMilaMREST5</Clave>似乎不正确或已过期。 I noticed this because the word is almost the same in Italian (chiave = clave = key). 我注意到了这一点,因为意大利语中的单词几乎相同(chiave = clave = key)。 I assume this is an API key like many web services require? 我假设这是许多网络服务都需要的API密钥?

SOAP Response 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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM