Forums / Developer / Simple code to connect to a wsdl service and retrieve SOAP data with PEAR::SOAP

Simple code to connect to a wsdl service and retrieve SOAP data with PEAR::SOAP

Author Message

Olivier Pierret

Wednesday 02 March 2005 3:34:15 am

Hello all,

Just this message to announce that i did a very simple extension that connects onto a wsdl service and returns an associative array with the result of a call to a web services:

Basically

{let resultat=fetch('pear_soap_client','getSOAPResult',hash(soapWSDLURL,'http://nsilasw2k02:8080/gpat/services/Login?wsdl', 
							soapOperation, 'getUserSecurity', 
							soapOperationParameters, array('bco','7654','administrator','PA')))}

{$resultat.SQLErrorCode}
{/let}

gives you: 0
which is part of the following soap response (translated in PHP associative arrays)

Array
(
    [SQLErrorCode] => 0
    [SQLErrorMessage] => 
    [VOUserRoleArray] => stdClass Object
        (
            [item] => stdClass Object
                (
                    [application] => PA
                    [codlan] => F
                    [codusr] => bco
                    [datcre] => 2004-03-21T23:00:00.000Z
                    [datmod] => 
                    [email] => b.e@test.be
                    [encryptedUniqueKey] => 
                    [foncti] => Humoriste
                    [nom] => Colaglu
                    [numfax] => 
                    [numgsm] => 
                    [numtel] => 09370089
                    [objectStatus] => NONE
                    [passwd] => 7654
                    [prenom] => prenom
                    [profil] => administrator
                    [xlogcr] => bco
                    [xlogmo] => 
                )

        )

    [detailedErrorMessage] => 
)

This code was quite obvious to write (*) but may be of interest for EZ developers and users. If people find it useful and relevant I can publish it as a contribution.

However there is a big drawback at this point: the data structure returned by PEAR::SOAP is made of stdclass nested together which is not usable in EZ Publish. I probably need a method to "recursively translate object property vales into hash table". Any idea ?

FYI here is this code of the main function of the extension:

...
require_once('SOAP/Client.php'); 
...
	function &getSOAPResult( $soapWSDLURL, $soapOperation, $soapOperationParameters)
	{ 
		eZINI::setIsDebugEnabled( true );
		$wsdl=new SOAP_WSDL($soapWSDLURL);
		$proxy=$wsdl->getProxy(); 
		$eval_str="\$result =\$proxy->$soapOperation(";
		foreach ($soapOperationParameters as $argValue) {
			$eval_str .= "\"$argValue\",";
		}
		$eval_str = substr("$eval_str", 0, -1).");";
		eval($eval_str);
		$result_array = get_object_vars($result);
		return array( 'result' => &$result_array ); 
	}	

Best regards
Olivier Pierret

(*) compared to other extension code available uploaded in the contrib section.