Невозможно создать объект xml для клиентского запроса мыла

1

Я пытаюсь сделать запрос клиента для мыльного веб-сервиса, и когда я пытаюсь создать xml с помощью simplexml_load_string, он говорит следующее:

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

?>
  • 0
    Разве они не предоставляют данные WSDL?
  • 0
    @michael посмотрите на переменную $ url из кода, я думаю, вы это имеете в виду? -> ws.maxirest.com/wsclientes/wscli06896.php?wsdl
Показать ещё 2 комментария
Теги:
soap

2 ответа

1

@Ricardo

Я смог сделать ваш код, добавив "wsdl" к URL-адресу. После этого изменения я не увидел ошибку "Не могу создать объект".

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

И результат был такой же "ОШИБКА. ACCESO NO PERMITIDO" уже отмечался. Мне кажется, что параметр мыла <Clave>123ClubMilaMREST5</Clave> неверен или истек. Я заметил это, потому что слово почти то же самое на итальянском языке (chiave = clave = key). Я предполагаю, что это ключ 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>
1

Я не могу получить ответ, но

=> "ERROR. ACCESO NO PERMITIDO"

Но с правильными учетными данными и данными вы сможете получить необходимую информацию с помощью ниже класса.

Просто установите свои данные в функции 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);
  • 0
    Это кодигнитер? Если это то, что мне нужно сделать эту работу на чистом PHP, но хороший ответ
  • 0
    Это чистый php
Показать ещё 12 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню