Logo de islavisual
Isotipo de islavisual IslaVisual
imagen de sección

Ultima revisión 22/12/2012

Convertir de Array a SOAP en PHP (array2SOAP)

array2soap es una función que os permitirá convertir un array asociativo en un SOAP de forma muy sencilla. Sólo hay que enviarle un array bien formado.

Para conocer más sobre SOAP (Simple Object Access Protocol) podéis leer el artículo que se ecribió Crear un Web Service con PHP y MySQL (Introducción) dónde se explica, entre otras cosas este protocolo.

Para presentarlo por pantalla, habrá que enviar las cabeceras (header) correspondientes a las de un XML y hacer un echo.

/*     **************************************************************************************************************************************************************************************************
    FUNCIÓN PARA CONVERTIR UN ARRAY ASOCIATIVO EN UNA CADENA EN FORMATO SOAP.
    PARÁMETROS:
    -----------
    $data             --> ES EL ARRAY FUENTE
    $level            --> NO CAMBIAR. INDICA EL NODO DÓNDE ESTA. SE USA PARA EL PROCESO RECURSIVO.
    ***************************************************************************************************************************************************************************************************/
/**
 * Function for convert an array associative at SOAP messages. Only used with Web Service connection.
 * @param string $data The source array.
 * @param int Indicates recursive level. 
 * @return string Returns a SOAP / WS message.
 */
function array2soap($data, $level=0){
    if (is_numeric(key($data))) {
        $key = "nodeId_". (string) $key;
    }

    if ($level == 0){
        $soap = '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.islavisual.com/ws" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">'."\r\n";
        $soap.= "\t".'<SOAP-ENV:Header>'."\r\n";
        $soap .= "\t\t".'<To>Administrador</To>'."\r\n";
        $soap .= "\t\t".'<From>Usuario</From>'."\r\n";
        $soap .= "\t".'</SOAP-ENV:Header>'."\r\n";
        $soap.= "\t".'<SOAP-ENV:Body>'."\r\n";
        $soap.= "\t\t".'<ns1:RequestResponse>'."\r\n";
        $soap.= "\t\t\t".'<results>'."\r\n";
        $soap.= "\t\t\t\t".'<SOAP-ENC:Struct xsi:type="ns1:results">'."\r\n";
    } 
    
    foreach ($data as $key => $value) {
        if (is_array($value)) {
            $soap.= str_repeat("\t", $level+4).'<ns1:'.$key.'>'."\r\n";
            $soap .= array2soap($value, $level+1);
            $soap.= str_repeat("\t", $level+4).'</ns1:'.$key.'>'."\r\n";
        }  else {
            $soap .= str_repeat("\t", $level+4).'<ns1:'.$key.'>'.$value.'</ns1:'.$key.'>'."\r\n";
        }
    }
                
    if ($level == 0){
        $soap .= "\t\t\t\t".'</SOAP-ENC:Struct>'."\r\n";
        $soap .= "\t\t\t".'</results>'."\r\n";
        $soap .= "\t\t".'</ns1:RequestResponse>'."\r\n";
        $soap .= "\t".'</SOAP-ENV:Body>'."\r\n";
        $soap .= '</SOAP-ENV:Envelope>'."\r\n";
    } 
    
    return $soap;
    
}

$arr = array("user" => "root", "user_id" => "1", "password" => "contraseña", "mensaje" => array("id" => "1", "descripcion" => "Descripción del texto", "prioridad" => "Alta"));
$soap = array2soap($arr);
header('Content-Type: application/xml; charset=utf-8');
echo $soap;

Espero que os sea útil alguna vez.

Sobre el autor

Imagen de Pablo Enrique Fernández Casado
Pablo Enrique Fernández Casado

CEO de IslaVisual, Manager, Full Stack Analyst Developer y formador por cuenta ajena con más de 25 años de experiencia en el campo de la programación y más de 10 en el campo del diseño, UX, usabilidad web y accesibilidad web. También es escritor y compositor de música, además de presentar múltiples soft kills como la escucha activa, el trabajo en equipo, la creatividad, la resiliencia o la capacidad de aprendizaje, entre otras.

Especializado en proveer soluciones integrales de bajo coste y actividades de consultoría de Usabilidad, Accesibilidad y Experiencia de Usuario (UX), además de ofrecer asesoramiento en SEO, optimización de sistemas y páginas web, entre otras habilidades.