Consumiendo webservices SOAP desde PHP

Recientemente nos han llegado un par de proyectos en los que debemos consumir webservices SOAP para obtener datos. La verdad es que hacía bastante tiempo que no los veía en mi trabajo habitual. Hace algunos años eran muy habituales para casi cualquier cosa que implicase comunicación con fuentes externas, sin embargo los últimos años habían caído un poco en desuso para cosas sencillas puesto que complicaban bastante un trabajo que con una simple petición HTTP y un XML básico se podría resolver. Precisamente ésta ha sido siempre una de las mayores críticas al protocolo SOAP, el elevado consumo de ancho de banda para una sencilla petición.

Hasta ahora siempre había utilizado nusoap para realizar llamadas SOAP desde PHP, sin embargo  me encontré con un problema al acceder a un servicio de un importante medio de comunicación internacional. La llamada con nusoap no devolvía resultados mientras que desde el sistema de pruebas html todo funcionaba correctamente.

Después de darle mil vueltas y no encontrar ningún error (otras peticiones al mismo servicio sí que funcionaban) me dí cuenta que PHP ya tiene un conjunto de funciones SOAP nativas, con lo que no necesitaría nusoap. La duda era saber si funcionaría bien, como así fue. Tras añadir la extensión adecuada surge una pequeña incompatibilidad. No puedes usar nusoap y las funcionas nativas en la misma instalación de PHP. Dicho de otro modo, si activas la extensión SOAP, nusoap dejará de funcionar y comenzará a lanzar mensajes de error ya que muchas de las funciones que utiliza tienen el mismo nombre que las nativas, que serían entonces nombres reservados. Si tienes alguna aplicación que utilice nusoap en la misma máquina tendrás que migrarla también para que utilice las funciones nativas.

El ejemplo de hoy será una sencilla llamada a un servicio que nos devuelve un listado de noticias.

El proceso es muy sencillo, necesitas la url del webservice, el método al que vas a llamar y los parámetros a pasarle y, como en cualquier servicio SOAP, te devolverá un XML.

$servicio="http://dominio.com/noticias?wsdl"; //url del servicio
$parametros=array(); //parametros de la llamada
$parametros['idioma']="es";
$parametros['usuario']="manolo";
$parametros['clave']="tuclave";$client = new SoapClient($servicio, $parametros);
$result = $client->getNoticias($parametros);//llamamos al métdo que nos interesa con los parámetros

Con estas sencillas instrucciones ya tenemos en $result el XML resultado de la llamada al servicio. Como trabajar con el XML es un poco engorroso, lo convertimos a un array asociativo de manera que nos sea más sencillo procesar los datos, para ello utilizamos la función obj2array que indico a continuación.

$result = obj2array($result);
$noticias=$result['resultado']['noticias'];
$n=count($noticias);

//procesamos el resultado como con cualquier otro array
for($i=0; $i<$n; $i++){
    $noticia=$noticias[$i];
    $id=$noticia['id'];
    //aquí iría el resto de tu código donde procesas los datos recibidos
}

function obj2array($obj) {
  $out = array();
  foreach ($obj as $key => $val) {
    switch(true) {
        case is_object($val):
         $out[$key] = obj2array($val);
         break;
      case is_array($val):
         $out[$key] = obj2array($val);
         break;
      default:
        $out[$key] = $val;
    }
  }
  return $out;
}

En la segunda línea nos quedamos con los elementos del array que nos interesa procesar. Si no sabes qué devuelve tu webservice puedes hacer un var_dump($result) y verás todo el resultado. En nuestro caso, como es una secuencia de noticias, nos quedamos con el elemento que tiene esas noticias.

Como os habréis dado cuenta, no me he preocupado del control de errores al llamar al webservice.  Eso os lo dejo como ejercicio a vosotros, que es agosto y no me apetece 😛 . En el manual de PHP está toda la información.

Y eso es todo amigos, hoy ha sido un ejemplo sencillo pero muy útil cuando necesitas utilizar SOAP.

88 comentarios en “Consumiendo webservices SOAP desde PHP

  1. Holap que tal bueno el tuto. Tengo un problema con el SOAP de php. El problema es:
    Al llamar un web service sin parametros la llamada me funciona perfectamente, pero al llamar un WS con parametros me sale el siguiente error :
    Fatal error: Uncaught SoapFault exception: [soap:Server] System.Web.Services.Protocols.SoapException: Server was unable to process request. —> System.Data.SqlClient.SqlException: Procedure or function ‘GetBibleWordsByChapterAndVerse’ expects parameter ‘@BookTitle’, which was not supplied. at WebServicex.BibleWebservice.GetBibleWordsByChapterAndVerse(String BookTitle, Int32 chapter, Int32 Verse) — End of inner exception stack trace — in /home/cbarcos/htdocs/pruebas/soapCliente.php:35

    Este es mi codigo:
    $client = new SoapClient(“http://www.webservicex.net/BibleWebservice.asmx?wsdl”,array(‘trace’ => 1));
    $params =array(
    new SoapParam(“Romans”,”BookTitle”),
    new SoapParam(1,”chapter”),
    new SoapParam(1,”Verse”)
    );
    $data = $client->__soapCall( ‘GetBibleWordsByChapterAndVerse’ , $params );

    Espero me puedas ayudar gracias !!

  2. Hola Fernando,

    Prueba con este código, me ha funcionado bien:

    “Romans”,
    “chapter”=>1,
    “Verse”=>1
    );
    $client = new SoapClient(“http://www.webservicex.net/BibleWebservice.asmx?wsdl”, $par);
    $result = $client->GetBibleWordsByChapterAndVerse($parametros);
    var_dump($result);
    ?>

    Saludos,
    Osus

  3. Hola,
    No entiendo mucho donde va el certificado. Por favor, explica más detalladamente cual es el problema, qué quieres hacer, qué requerimientos tienes…

  4. Buenas Tardes muy interesante el tutorial, quisiera saber de que manera debo proceder si debo consumir un servicio web que tengo diseñado en eclipse, por favor cualquier idea que puedan darme es bienvenida

  5. hola, buen dia, quisiera saber si alguien me puede ayudar. quiero consumir un servicio wb hacho en .net, que devuelve un dataset, desde php. he buscando informacion y la verdad es muy poco lo que pude encontrar. gracias

  6. hola, buen dia. me gustaria saber cuales son las extenciones que se debe agregar (“como tu dices alla arriba”), a demas como se debe configurar ya que el codigo que tu colocas no funciona por lo menos a mi no. Veo segun tu ejemplo que hay que desglosar el wsdl para consumirlo osea php o IDE de php no trae las opciones necesaria para genera los poxis o las clase para consumir un servicio web.? y otra pregunta como se crea un servicio web en php ? se puede crear? en los ejemplos que he visto no encuentro en que parte del servidor aloja el wsdl.

    Por favor enviar una copia a mi correo electronico te lo agradezco!!!

    Att Johnx
    http://j2ee-vs-net.blogspot.com
    [email protected]
    ANALISIS COMPARATIVO DE LAS PLATAFORMAS J2EE Y .NET APLICADO AL DESARROLLO DE SERVICIOS WEB

  7. Buenas jjjpropio,

    Para tener las funciones SOAP tendrás que compilar PHP con –enable-soap. Es probable que haya algún paquete ya compilado para tu sistema de paquetes. En mi caso hay un php-soap que instala la extensión correspondiente.
    Si tu servidor es windows tendrás sólo que habilitar la extensión en el php.ini.

    Claro que puedes crear un servicio SOAP.
    http://es.php.net/manual/es/function.soap-soapserver-construct.php

    Saludos,
    Osus

  8. hola, actualmente estoy creando clientes WS en PHP 5, cuando consumos WS hechos en php o utilizando nusoap no tengo ningun problema, pero cuando trato de consumir WS .net lo puedo hacer siempre y cuando el metodo que quiero consumir no recibe ningun parametro. si el metodo recibe un parametro(s) entonces tengo el siguiente problema el parametro que le envio por medio del cliente php al WS nunca llega o algo por el estilo, me explico; si el WS .net recibe un string para saludar el nombre digitado ( HOLA lunaris), entonces siempre me manda como resultado HOLA , es como si tuviera algun porblema en el parametro enviado desde PHP, me sucede lo mismo con enteros, si es una multiplicacion de dos numeros entonces siempre me devuelve el valor de 0. La otra duda que tengo sobre WS y clientes PHP es la siguiente: Existe algun tipo de incompatibilidad cuando el WS genera el esquema (Schema) en una url aparte del wsdl he construido WS en JEE 5 utilizando netbeans 6.5, y el genera el Schema aparte … y cuando trato de consumirlo genera error en el php….. Bueno a lo mejor tienes algun ejemplo de cliente PHP que accede a un servicio .net el cual tiene algunos parametros, si me lo puedes pasar seria bueno y si el WS .net esta en internet seria mucho mejor para problarlo

    Por favor enviar una copia a mi correo electronico te lo agradezco!!!
    Mi msn es [email protected], me gustaria que me agregaras a tu msn !! para poder platicar .. mucho mejor sobre el tema

    Gracias

    Att Johnx
    http://j2ee-vs-net.blogspot.com
    [email protected]
    ANALISIS COMPARATIVO DE LAS PLATAFORMAS J2EE Y .NET APLICADO AL DESARROLLO DE SERVICIOS WEB

  9. Hola, construi un servicio web en java y el cliente en php, me funciona muy bien, pero desde un tiempo para aca tengo un problema de que el cliente no se logra conectar con el servicio, y esto solo me pasa algunas ocaciones, pero cada vez es mas seguido y no se que hacer el error que lanza es el siguiente:

    Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in D:xampphtdocsProyFrancesclasesclienteService_class.php:136 Stack trace: #0 [internal function]: SoapClient->__doRequest(‘__call(‘datosEjercicio’, Array) #2 D:xampphtdocsProyFrancesclasesclienteService_class.php(136): SoapClient->datosEjercicio(Array) #3 D:xampphtdocsProyFrancesencejercicio.php(13): ClienteService->datosEjercicio(‘1’) #4 {main} thrown in D:xampphtdocsProyFrancesclasesclienteService_class.php on line 136

    ya he revisado todo y no se que pueda ser, lo curioso es que cuando apago el equipo y lo enciendo aveces funciona sin problemas.
    Agradezco la ayuda

  10. Hola Leonardo,

    Creo que el mensaje es completamente indicativo de tu error:

    Could not connect to host

    Según el mensaje y tu explicación, por momentos pierdes la conectividad con el servidor.

    Osus

  11. Que tal Osus, gracias por el aporte, te quiero molestar con una consulta, la duda esta mas relacionada con el tiempo de respuesta, te explico, tengo un cliente de webservice desarrollado en php con nusoap montado sobre un servidor con una arquitectura algo escasa, 256 RAM Pentium III procesador de 1 Ghz, bastante pequeño pero en su tiempo fue una maquinota, bueno la duda va porque en tu post haces mencion de que soap consume mucho ancho de banda y el cliente webservice que menciono esta tardando alrededor de 15 segundos para consumir un servicio de otro webservice tambien desarrollado en php con nusoap, la cuestion es que ya probe montar el cliente sobre otro servidor mas robusto, sin modificar absolutamente nada, y alli la respuesta se recibe casi que instantaneamente, y queria saber si sabes de algun parametro que se deba modificar sobre la configuracion de apache o el php que sirva para disminuir el tiempo de respuesta. Te agradecere cualquier sugerencia.

    Saludos.

  12. Que tal, he determinado que el problema esta relacionado con el parametro MaxKeepAliveRequests de la configuracion de apache (en mi caso esta en apache2.conf estoy usando ubuntu 7.04 feisty-fawn), el parametro se habia incrementado para permitir un numero mayor de conexiones y esto provoco que el consumo de webservices se hiciera demasiado lento (15 seg por servicio consumido). Le baje el valor y ahora tarda 2 seg, claro que queda el problema de que ahora se aceptara un numero menor de conexiones pero por el momento me es mas favorable reducir el tiempo de respuesta.

    Nos vemos.

  13. Hola, tengo un servicio web en java y el cliente en php, me funciona relativamente bien, ya que cuando lo que devuelve el servicio web es una array de varios registros el resultado que obtengo es un array con dos registros menos que lo que realmente devuelve el servicio web de java. Sabeis a que puede ser debido.

    Gracias

  14. Hola, tengo un servicio web en java y el cliente en php, me funciona relativamente bien, ya que cuando lo que devuelve el servicio web es una array de varios registros el resultado que obtengo es un array con dos registros menos que lo que realmente devuelve el servicio web de java. Sabeis a que puede ser debido.

    Gracias

  15. Hola buenos dias, necesito ayuda, alguien me podrá ayudar con un webservice para hacer una consulta sobre la informacion de un afilado
    l server es : http://200.26.159.122/webservicessystem/webservices.asmx?WSDL Y el script que estoy usando es el siguiente, si me pueden ayudar con algo mas sencillo se los agradecería mucho:

    _ws = new clienteWeb();
    }

    function getMembershipValue() {

    }

    function checkMembership($cedula) {

    $cedula = ($sCedula);

    $respuesta = $this->_ws->solicitud(‘cargaDatosAfiliado’, $cedula);

    foreach ($respuesta as $resActual) {
    if (is_array($resActual)) {
    return true;
    } else {
    return false;
    }
    }
    }
    }

    ?>

    Seleccione

     
     

    Cedula:

    $aElemento)
    echo “”.$resActual[“name”].””;
    ?>

     
     

     

  16. Saludos, necesito conectarme con un servicio web, y tengo que mandar como parametro un nodo de un file xml, trate con nusoap y me respondia xmlnode NULL, y estoy tratando con soap php5 igual…
    ejemplo=
    $fichero=”abcdefgh.xml”;
    $contenido=simplexml_load_file($fichero);
    para probar:
    print_r($contenido);
    $parameters=array(“abcdefg”=>$contenido);

    y llamo a la funcion y me devuelve:
    Failed. Reason:Null XmlNode encountered
    Si me pueden ayudar, se los agradezco, si necesitan mas informacion me avisan…
    GRACIAS…

  17. Hola Osus,
    GRacias por el post, es muy instructivo. TE quería preguntar…
    Tengo que conectarme con un ws que devuelve una clase.
    En PHP no existe ninguna forma de que se generen clases o algo así (proxy), para recoger la respuesta del método llamado?
    O la única opción es parsearlo a manita?

    muchas gracias de antemano.
    Un saludo,
    marta

  18. Hola! Muchas gracias por tu respuesta.
    Entonces por lo que veo… no se generan automáticamente. Me parece que Java y .Net le lleva mucha ventaja al PHP, al menos en lo referente al consumo de web services…

    Creo que no merece la pena utilizar PHP para este cometido.
    Un saludo,
    marta

  19. Hola estoy trabajando en c# consumiendo ws y queria saber si es igual si se utilisa la misma funcion register para buscar que es con lo que inserto dato o debo utilizar otra funcion que no sea register para :

    $server->register(‘insertarCliente’,
    array(‘nitt’=>’xsd:string’),
    array(‘return’ => ‘xsd:boolean’),
    $ns);

  20. esta es mi funcion que hace mi busqueda
    function buscarCliente($nitt)
    {
    $bien = false;

    $q = “SELECT * FROM cliente WHERE nit LIKE ‘%”. $nitt .”%'”;

    $m = new MYSQL(_host,_login,_passdb,_dbname);
    if($m->consulta($q))
    {
    $bien = true;
    //$idusuario = m->getID();
    }

    return $bien;

    }

  21. function insertarCliente($nombrecompleto,$nit,$direccion,$telefono,$celular,$email,$ciudad)
    {
    $bien = false;

    $q = “INSERT INTO cliente(nombre_completo,nit,direccion,telefono,celular,email,ciudad) values (“”.$nombrecompleto.””,””.$nit.””,””.$direccion.””,””.$telefono.””,””.$celular.””,””.$email.””,””.$ciudad.””)”;
    $m = new MYSQL(_host,_login,_passdb,_dbname);
    if($m->consulta($q))
    {
    $bien = true;
    //$idusuario = m->getID();
    }

    return $bien;

    }

  22. Hola David,

    No entiendo tus 4 comentarios, después de leerlos lo único que saco en claro es que no tienen nada que ver con webservices.

    ¿Puedes explicar tu problema más detenidamente?

  23. Hola amigos estoy intentando crear un web services client que se comunica con otro del ministerio de transportes (https://manifiesto.mintransporte.gov.co/mucregistro/RegistraManifiesto?WSDL) y no he logrado nada aun lo hago en php5 y al enviarle los datos vacios se comunica, pero al usar unas clases creadas por el wsdl2php y datearlas me arroja el error:’No deserializer found for ArrayOfmucRegistra_RemesaType2User’
    Ojala me pudiesen ayudar.
    Pdt: Heintentado con una aplicacion de escritorio en java pero me arroja el error:'[SOAPException: faultCode=SOAP-ENV:IOException; msg=Unsupported protocol 'https'; targetException=HTTPClient.ProtocolNotSuppException: Unsupported protocol ‘https’]’
    De antemano gracias

  24. $pusuario=(real)96191554;
    $pempresa=(real)8600068755;

    $pfirma=”MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAaCAJIAEggPoOTYxOTE1NTRcOzg2MDAwNjg3NTVcO251ZXZvODYwXDs4NjI4MTY5LDkxNjk1NjQsOTE2OTU2NSw5MTY5NTY2LDkxNzMxNDMsOTE3MzE0NCw5MTczMTQ1LDkxNzMxNDYsOTE3MzE0Nyw5MTczMTQ4LDkxNzMxNDksOTE3MzE1MCw5MTczMTUxLDkxNzMxNTIsOTE3MzE1Myw5MTczMTU0LDkxNzMxNTUsOTE3MzE1Niw5MTczMTU3LDkxNzMxNTgsOTE3MzE1OSw5MTczMTYwLDkxNzMxNjEsOTE3MzE2Miw5MTczMTYzLDkxNzMxNjQsOTE3MzE2NSw5MTczMTY2LDkxNzMxNjcsOTE3MzE2OCw5MTczMTY5LDkxNzMxNzAsOTE3MzE3MSw5MTczMTcyLDkxNzMxNzMsOTE3MzE3NCw5MTczMTc1LDkxNzMxNzYsOTE3MzE3Nyw5MTczMTc4LDkxNzMxNzksOTE3MzE4MCw5MTczMTgxLDkxNzMxODIsOTE3MzE4Myw5MTczMTg0LDkxNzMxODUsOTE3MzE4Niw5MTczMTg3LDkxNzMxODgsOTE3MzE4OSw5MTczMTkwLDkxNzMxOTEsOTE3MzE5Miw5MjA4MDEzLDkyMDgwMTQsOTIwODAxNSw5MjA4MDE2LDkyMDgwMTcsOTIwODAxOCw5MjA4MDE5LDkyMDgwMjAsOTIwODAyMSw5MjA4MDIyLDkyMDgwMjMsOTIwODAyNCw5MjA4MDI1LDkyMDgwMjYsOTIwODAyNyw5MjA4MDI4LDkyMDgwMjksOTIwODAzMCw5MjA4MDMxLDkyMDgwMzIsOTIwODAzMyw5MjA4MDM0LDkyMDgwMzUsOTIwODAzNiw5MjA4MDM3LDkyMDgwMzgsOTIwODAzOSw5MjA4MDQwLDkyMDgwNDEsOTIwODA0Miw5MjMwMDI1LDkyMzAwMjYsOTIzMDAyNyw5MjMwMDI4LDkyMzAwMjksOTIzMDAzMCw5MjMwMDMxLDkyMzAwMzIsOTIzMDAzMyw5MjMwMDM0LDkyMzEwMDUsOTIzMTAwNiw5MjMxMDA3LDkyMzEwMDgsOTIzMTAwOSw5MjMxMDEwLDkyMzEwMTEsOTIzMTAxMiw5MjMxMDEzLDkyMzEwMTQsOTI1MTk5MCw5MjUxOTkxLDkyNTE5OTIsOTI1MTk5Myw5MjUxOTk0LDkyNTE5OTUsOTI1MTk5Niw5MjUxOTk3LDkyNTE5OTgsOTI1MTk5OSw5MjU3MTMwLDkyNTcxMzEsOTI1NzEzMiw5MjU3MTMzLDkyNTcxMzQsOTI1NzEzNSw5MjU3MTM2LASCAuA5MjU3MTM3LDkyNTcxMzgsOTI1NzEzOSw5MzI0MDcyLDkzMjQwNzMsOTMyNDA3NCw5MzI0MDc1LDkzMjQwNzYsOTMyNDA3Nyw5MzI0MDc4LDkzMjQwNzksOTMyNDA4MCw5MzI0MDgxLDkzMjQwODIsOTMyNDA4Myw5MzI0MDg0LDkzMjQwODUsOTMyNDA4Niw5MzI0MDg3LDkzMjQwODgsOTMyNDA4OSw5MzI0MDkwLDkzMjQwOTEsOTMyNDA5Miw5MzI0MDkzLDkzMjQwOTQsOTMyNDA5NSw5MzI0MDk2LDkzMjQwOTcsOTMyNDA5OCw5MzI0MDk5LDkzMjQxMDAsOTMyNDEwMSw5MzcxNzYxLDkzNzE3NjIsOTM3MTc2Myw5MzcxNzY0LDkzNzE3NjUsOTM3MTc2Niw5MzcxNzY3LDkzNzE3NjgsOTM3MTc2OSw5MzcxNzcwLDkzNzE3NzEsOTM3MTc3Miw5MzcxNzczLDkzNzE3NzQsOTM3MTc3NSw5MzcxNzc2LDkzNzE3NzcsOTM3MTc3OCw5MzcxNzc5LDkzNzE3ODAsOTM3MzMzMSw5MzczMzMyLDkzNzMzMzMsOTM3MzMzNCw5MzczMzM1LDkzNzMzMzYsOTM3MzMzNyw5MzczMzM4LDkzNzMzMzksOTE3MzE3Myw5MjA4MDM3LDkyMzAwMzEsOTMyNDA3Nyw5MzI0MDc4LDkzNzE3NjQsOTI1MTk5OCw5MjU3MTMzLDkyNTcxMzQsOTMyNDA3Miw5MzI0MDczLDkzMjQwNzQsOTMyNDA4Myw5MzI0MDg1LDkzMjQwODgsOTMyNDA5Niw5MzI0MDk3LDkzMjQwOTgsOTMyNDA5OSw5MzI0MTAxLDkzNzE3NjIsOTM3MTc2Myw5MzcxNzY3LDkzNzE3NjgsOTM3MTc2OSw5MzcxNzcwLDkzNzE3NzEsOTM3MTc3Miw5MzcxNzczLDkzNzE3NzQsAAAAAAAA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”;

    $pfirmado=”96191554;8600068755;nuevo860;8628169,9169564,9169565,9169566,9173143,9173144,9173145,9173146,9173147,9173148,9173149,9173150,9173151,9173152,9173153,9173154,9173155,9173156,9173157,9173158,9173159,9173160,9173161,9173162,9173163,9173164,9173165,9173166,9173167,9173168,9173169,9173170,9173171,9173172,9173173,9173174,9173175,9173176,9173177,9173178,9173179,9173180,9173181,9173182,9173183,9173184,9173185,9173186,9173187,9173188,9173189,9173190,9173191,9173192,9208013,9208014,9208015,9208016,9208017,9208018,9208019,9208020,9208021,9208022,9208023,9208024,9208025,9208026,9208027,9208028,9208029,9208030,9208031,9208032,9208033,9208034,9208035,9208036,9208037,9208038,9208039,9208040,9208041,9208042,9230025,9230026,9230027,9230028,9230029,9230030,9230031,9230032,9230033,9230034,9231005,9231006,9231007,9231008,9231009,9231010,9231011,9231012,9231013,9231014,9251990,9251991,9251992,9251993,9251994,9251995,9251996,9251997,9251998,9251999,9257130,9257131,9257132,9257133,9257134,9257135,9257136,9257137,9257138,9257139,9324072,9324073,9324074,9324075,9324076,9324077,9324078,9324079,9324080,9324081,9324082,9324083,9324084,9324085,9324086,9324087,9324088,9324089,9324090,9324091,9324092,9324093,9324094,9324095,9324096,9324097,9324098,9324099,9324100,9324101,9371761,9371762,9371763,9371764,9371765,9371766,9371767,9371768,9371769,9371770,9371771,9371772,9371773,9371774,9371775,9371776,9371777,9371778,9371779,9371780,9373331,9373332,9373333,9373334,9373335,9373336,9373337,9373338,9373339,9173173,9208037,9230031,9324077,9324078,9371764,9251998,9257133,9257134,9324072,9324073,9324074,9324083,9324085,9324088,9324096,9324097,9324098,9324099,9324101,9371762,9371763,9371767,9371768,9371769,9371770,9371771,9371772,9371773,9371774,”;

    $sClient = new soapclient(“RegistraManifiesto1.wsdl”,array(‘uri’ => ‘http://mucRegistra/registraManifiesto.wsdl’,
    ‘soapaction’ => ”,)
    Gracias por tu respuesta Osus y esperemos que me puedas colaborar, el te retornara algo como:
    Object stdClass Object ( [peregremesaOut] => stdClass Object ( [array] => Array ( [0] => stdClass Object ( [remnumero] => [remnromanifiesto] => [estado] => ) ) ) [peregmanifiestoOut] => stdClass Object ( [array] => Array ( [0] => stdClass Object ( [mannumero] => [mannumeroEmpresa] => [tarifaflete] => [estado] => ) ) ) [peregvehiculoOut] => stdClass Object ( [array] => Array ( [0] => stdClass Object ( [vehplaca] => [estado] => ) ) ) [peregconductorOut] => [peregterceroOut] => stdClass Object ( [array] => Array ( [0] => stdClass Object ( [pertipid] => [periden] => [estado] => ) ) ) [pmensajeOut] => 0 )
    Pero al llenar los datos no permite el envio saca el erro: ‘no mapping found for….’ o no dezerializer found for…’ gracias

  25. Hola Javierwicca,

    Te paso un ejemplo que me ha funcionado:

    $client=new SoapClient(“https://manifiesto.mintransporte.gov.co/mucregistro/RegistraManifiesto?wsdl”, Array());
    $res=$client->wsmani($pusuario, $pempresa, $pfirma, $pfirmado);
    var_dump($res);

    Me devuelve:

    object(stdClass)#2 (6) {
    [“peregremesaOut”]=>
    NULL
    [“peregmanifiestoOut”]=>
    NULL
    [“peregvehiculoOut”]=>
    NULL
    [“peregconductorOut”]=>
    NULL
    [“peregterceroOut”]=>
    NULL
    [“pmensajeOut”]=>
    string(2190) “La firma que envia la información es {T=CONTROL DE TRAFICO,SURNAME=ACOSTA BARRERA,STREET=CALLE 63 SUR N 80-22,ST=BOGOTA,OU=TRAFICO,SERIALNUMBER=96191554,1.3.6.1.4.1.23267.2.3=8600068755,1.3.6.1.4.1.23267.2.2=96191554,1.3.6.1.4.1.23267.2.1=03,O=T.U.S.M. BUSES BLANCOS S.A.,L=BOGOTA,GIVENNAME=DANILO HERNANDO,[email protected],CN=DANILO HERNANDO ACOSTA BARRERA,C=CO} el texto fimado es 96191554;8600068755;860;8628169,9169564,9169565,9169566,9173143,9173144,9173145,9173146,9173147,9173148,9173149,9173150,9173151,9173152,9173153,9173154,9173155,9173156,9173157,9173158,9173159,9173160,9173161,9173162,9173163,9173164,9173165,9173166,9173167,9173168,9173169,9173170,9173171,9173172,9173173,9173174,9173175,9173176,9173177,9173178,9173179,9173180,9173181,9173182,9173183,9173184,9173185,9173186,9173187,9173188,9173189,9173190,9173191,9173192,9208013,9208014,9208015,9208016,9208017,9208018,9208019,9208020,9208021,9208022,9208023,9208024,9208025,9208026,9208027,9208028,9208029,9208030,9208031,9208032,9208033,9208034,9208035,9208036,9208037,9208038,9208039,9208040,9208041,9208042,9230025,9230026,9230027,9230028,9230029,9230030,9230031,9230032,9230033,9230034,9231005,9231006,9231007,9231008,9231009,9231010,9231011,9231012,9231013,9231014,9251990,9251991,9251992,9251993,9251994,9251995,9251996,9251997,9251998,9251999,9257130,9257131,9257132,9257133,9257134,9257135,9257136,9257137,9257138,9257139,9324072,9324073,9324074,9324075,9324076,9324077,9324078,9324079,9324080,9324081,9324082,9324083,9324084,9324085,9324086,9324087,9324088,9324089,9324090,9324091,9324092,9324093,9324094,9324095,9324096,9324097,9324098,9324099,9324100,9324101,9371761,9371762,9371763,9371764,9371765,9371766,9371767,9371768,9371769,9371770,9371771,9371772,9371773,9371774,9371775,9371776,9371777,9371778,9371779,9371780,9373331,9373332,9373333,9373334,9373335,9373336,9373337,9373338,9373339,9173173,9208037,9230031,9324077,9324078,9371764,9251998,9257133,9257134,9324072,9324073,9324074,9324083,9324085,9324088,9324096,9324097,9324098,9324099,9324101,9371762,9371763,9371767,9371768,9371769,9371770,9371771,9371772,9371773,9371774, Error ORA-06531: Referencia a una recopilación no inicializada”
    }

    Es posible que debas activar en tu php.ini las extensiones CURL y Openssl ya que la url del ws es ssl.

    Espero haberte resuelto el problema 🙂

  26. Gracias por la respuesta:
    pues hasta hay lo he logarado hacer llegar el poblema es cuando dateo los objetos PregRemesa2 (Contiene un arreglo de la clase mucRegistra_RemesaType2User), PregManifiesto(Que contiene un arreglo de la clase mucRegistra_ManifiestoType2User) y asi sucesivamente en los datos pregVehiculo, pregConductor, pregTercero Utilice el una herramienta conocida como WSDL2PHP y ella me genera las clases en php automaticamente pero al llenarlas e intentar enviarlas me arroja el error “No deserialer found for ArrayOfmucRegistra_RemesaType2User”
    Que pena contigo osus molestarte tanto agradesceria si me pudieras ayudar esta es una de las clase que me genera el WSDL2PHP:
    class mucRegistra_RegRemesa2 {
    public $array; // ArrayOfmucRegistra_RemesaType2User
    }

    class mucRegistra_RemesaType2User {
    public $nitempresa; // decimal
    public $remnumero; // decimal
    public $remunidaMedida; // decimal
    public $remcantidad; // decimal
    public $rempeso; // decimal
    public $remunidaEmpaq; // decimal
    public $remnaturaleza; // decimal
    public $remcodproducto; // string
    public $remdescrProdu; // string
    public $remremitente; // string
    public $remdestinatario; // string
    public $remciudadDesti; // decimal
    public $remnromanifiesto; // string
    public $remtipidremitente; // string
    public $remidenremitente; // decimal
    public $remnroremempresa; // string
    public $remestado; // string
    public $remtipiddestinatario; // string
    public $remidendestinatario; // decimal
    public $rempoliza; // string
    public $remaseguradora; // decimal
    public $remvencimiento; // string
    public $remduenopoliza; // string
    public $remciudadOrig; // decimal
    public $remvalremesa; // decimal
    public $remvalproducto; // decimal
    public $estado; // string
    }

  27. Y el problema aparenta ser el mapeo pero el WSDL2PHP lo creo con las otras clases:
    private static $classmap = array(
    ‘mucRegistra_RegRemesa2’=>’mucRegistra_RegRemesa2’,
    ‘mucRegistra_RemesaType2User’=>’mucRegistra_RemesaType2User’,
    ‘mucRegistra_RegManifiesto2’=>’mucRegistra_RegManifiesto2’,
    ‘mucRegistra_ManifiestoType2User’=>’mucRegistra_ManifiestoType2User’,
    ‘mucRegistra_RegVehiculo2’=>’mucRegistra_RegVehiculo2’,
    ‘mucRegistra_VehiculoType2User’=>’mucRegistra_VehiculoType2User’,
    ‘mucRegistra_RegConductor’=>’mucRegistra_RegConductor’,
    ‘mucRegistra_ConductorTypeUser’=>’mucRegistra_ConductorTypeUser’,
    ‘mucRegistra_RegTercero’=>’mucRegistra_RegTercero’, ‘mucRegistra_TerceroTypeUser’=>’mucRegistra_TerceroTypeUser’,
    ‘mucRegistra_RegistraManifiestoImpl_wsmani_Out’=>’mucRegistra_RegistraManifiestoImpl_wsmani_Out’,
    ‘mucRegistra_RegEstRemesa’=>’mucRegistra_RegEstRemesa’,
    ‘mucRegistra_EstRemesaTypeUser’=>’mucRegistra_EstRemesaTypeUser’,
    ‘mucRegistra_RegEstManifiesto’=>’mucRegistra_RegEstManifiesto’,
    ‘mucRegistra_EstManifiestoTypeUser’=>’mucRegistra_EstManifiestoTypeUser’,
    ‘mucRegistra_RegEstVehiculo’=>’mucRegistra_RegEstVehiculo’,
    ‘mucRegistra_EstVehiculoTypeUser’=>’mucRegistra_EstVehiculoTypeUser’,
    ‘mucRegistra_RegEstConductor’=>’mucRegistra_RegEstConductor’,
    ‘mucRegistra_EstConductorTypeUser’=>’mucRegistra_EstConductorTypeUser’,
    ‘mucRegistra_RegEstTercero’=>’mucRegistra_RegEstTercero’,
    ‘mucRegistra_EstTerceroTypeUser’=>’mucRegistra_EstTerceroTypeUser’,
    );

    public function registraManifiesto($wsdl = “https://manifiesto.mintransporte.gov.co/mucregistro/RegistraManifiesto?WSDL”, $options = array()) {
    foreach(self::$classmap as $key => $value) {
    if(!isset($options[‘classmap’][$key])) {
    $options[‘classmap’][$key] = $value;
    }
    }
    parent::__construct($wsdl, $options);

  28. Hola a todos, disculpen alguien me puede indicar que son ‘resultado’ y ‘noticias’?, en esta linea???

    $noticias=$result[‘resultado’][‘noticias’];

    Este es el resultado de mi webservice, ahora lo que necesito es recuperar cada valor, por ejemplo de >0, necesito recuperar el 0.

    Como lo hago?? ayuda por favor!!!! Gracias… 🙂

    1BLUE-603330 010012094224739MATE-732483 0100120942241057MATE-732483 010012094224

  29. @Raquel,

    No entiendo bien el formato de la respuesta de tu webservice.

    En el caso del ejemplo se convierte la respuesta a un array y se acceder como indicas, pero es solo para el caso de mi ejemplo.

    En tu caso deberías comenzar por hacer:
    var_dump($result)
    tras ejecutar el método, así verás la respuesta y podrás decidir cómo tratar esos datos.

  30. osea yo se que haciendo var_dump veo el resultado, pero lo que quiero es recuperar esos valores que he mostrado, son diferentes campos, y necesito recuperarlos para guardarlos en una tabla… no se si tenga que recuperar el xml del webservice o como puedo hacer para diferenciar los valores y poder insertarlos en mi tabla… que hago?? tomando en cuenta que no se mucho de php…

  31. @Raquel,

    Para saber cómo tienes que recoger los datos tienes que saber cómo te los devuelven, o miras la respuesta ($result) o analizas la firma del webservice (el wsdl), pero tienes que saber como te llegan los datos, por eso te decía que mirases el var_dump.

  32. la respuesta del var_dump es asi:
    1BLUE-603330 010012094224739MATE-732483 0100120942241057MATE-732483 010012094224…

    aqui estan 3 registros pero en si el wwebservice me devuelve mas de 1000 registros, por ejemplo el primer 1 esta dentro de un tag de secuencia, BLUE-603330 es un codigo y asi cada cosa pero los 1000 registros me los devuelve en una sola cadena al hacer el var_dump y no tengo idea de como hacerle para, o bien recuperar el xml y tratarlo de esa manera o como identifico cada campo para guardar el valor en mi tabla… si tienes messenger porfa seria mucha molestia en que me lo facilites??? este es el mio [email protected]

  33. Si lo que te devuelve es, como indicas, una sola cadena tendrás que buscar la manera de dividirla según necesitas, no se me ocurre otra cosa.

  34. Hola Osus, llevo días atrapado en com procesar la respuesta del WS, tu ejemplo ha sido lo mejor que he visto por la web. Sin embargo al usarlo a mi conexión recibo el error de Undefined offset:

    el var_dump me da esto:
    Object(stdClass)[2]
    public ‘generarCFDIPruebaResult’ =>
    object(stdClass)[3]
    public ‘string’ =>
    array
    0 => string ‘True’ (length=4)
    1 => string ” (length=0)
    2 => string ‘Z’ (length=1)
    3 => string ‘283’ (length=3)
    4 => string ‘2011-07-07T00:49:33’ (length=19)
    5 => string ‘Este documento es una representación impresa de un CFDI’ (length=56)
    6 => string ‘217’ (length=3)
    7 => string ‘ string ‘1.0’ (length=3)
    9 => string ‘EC5D4158-7E57-7E57-7E57-48AE80DC8F63′ (length=36)
    10 => string ’07/07/2011 12:49:33 a.m.’ (length=24)
    11 => string ‘L0WOBGDKDwx2FbtBmL9k60i0abVhNOlM/r9lSTc29xBKqwvnNubWh33M9M4HOGaTG5EINlkq+S/FcF4DTcFWyHNfraKI5YQJ/5+lQWu/bpv9Iwqf02ceta7+zfvIqMKmc3kYrNy+TcTtympj6JSZWkxWQ1QPi3krJqo90zueF84=’ (length=172)
    12 => string ‘00001000000103082037’ (length=20)
    13 => string ‘B2uO8woSgajaD6Hy4VCTVhddqYo6BDVk8N93zLNkeIQIyR3jpPasyws0H19P+qqMn0yA2YFCLHJyaX6xcKixd4rFI4Z34GgwvJz5/hCGO4kJAJgdRYOY8U1/+xqe05DS7WjJ8kFDfAk7fM6zmu3XG2VhVx7CuuQbbu4FQJjRsDA=’ (length=172)
    14 => string ‘||1.0|EC5D4158-7E57-7E57-7E57-48AE80DC8F63|2011-07-07T00:49:33|L0WOBGDKDwx2FbtBmL9k60i0abVhNOlM/r9lSTc29xBKqwvnNubWh33M9M4HOGaTG5EINlkq+S/FcF4DTcFWyHNfraKI5YQJ/5+lQWu/bpv9Iwqf02ceta7+zfvIqMKmc3kYrNy+TcTtympj6JSZWkxWQ1QPi

    y al Serializar esto:

    O:8:”stdClass”:1:{s:23:”generarCFDIPruebaResult”;O:8:”stdClass”:1:{s:6:”string”;a:15:{i:0;s:4:”True”;i:1;s:0:””;i:2;s:1:”Z”;i:3;s:3:”283″;i:4;s:19:”2011-07-07T00:49:33″;i:5;s:56:”Este documento es una representación impresa de un CFDI”;i:6;s:3:”217″;i:7;s:4305:””;i:8;s:3:”1.0″;i:9;s:36:”EC5D4158-7E57-7E57-7E57-48AE80DC8F63″;i:10;s:24:”07/07/2011 12:49:33 a.m.”;i:11;s:172:”L0WOBGDKDwx2FbtBmL9k60i0abVhNOlM/r9lSTc29xBKqwvnNubWh33M9M4HOGaTG5EINlkq+S/FcF4DTcFWyHNfraKI5YQJ/5+lQWu/bpv9Iwqf02ceta7+zfvIqMKmc3kYrNy+TcTtympj6JSZWkxWQ1QPi3krJqo90zueF84=”;i:12;s:20:”00001000000103082037″;i:13;s:172:”B2uO8woSgajaD6Hy4VCTVhddqYo6BDVk8N93zLNkeIQIyR3jpPasyws0H19P+qqMn0yA2YFCLHJyaX6xcKixd4rFI4Z34GgwvJz5/hCGO4kJAJgdRYOY8U1/+xqe05DS7WjJ8kFDfAk7fM6zmu3XG2VhVx7CuuQbbu4FQJjRsDA=”;i:14;s:258:”||1.0|EC5D4158-7E57-7E57-7E57-48AE80DC8F63|2011-07-07T00:49:33|L0WOBGDKDwx2FbtBmL9k60i0abVhNOlM/r9lSTc29xBKqwvnNubWh33M9M4HOGaTG5EINlkq+S/FcF4DTcFWyHNfraKI5YQJ/5+lQWu/bpv9Iwqf02ceta7+zfvIqMKmc3kYrNy+TcTtympj6JSZWkxWQ1QPi3krJqo90zueF84=|00001000000103082037||”;}}}

    Hasta ahi llego, la posición 7 trae un XML que debo guardar en cada petición.

    Espero me puedas orientar.
    Gracias

  35. Hola Andres,

    Parece que el WS te devuelve directamente un objeto para que puedas utilizarlo,
    Prueba por ejemplo:
    echo $objeto->generarCFDIPruebaResult->string[0];

Responder a Andres Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *