Last Modified 2005-06-06 by Guest

Using WSDL to Interface with the Horde API

Most Horde modules have an API interface which is used by other modules to access and exchange data. These API's are described in the file <em>modulename/lib/api.php</em>. Calling the <em>/rpc.php</em> in your Horde webroot allows you to access the API remotely via RPC/DISCO/SOAP/WSDL etc. The following script describes how to access a Horde installation remotely and list the APIs that are available.

If you have IMP/Turba installed you can also try these calls which are commented out in the script:

            $test = print_r($client->contacts_sources(0, true), 1);

            $test = print_r($client->mail_folderlist(), 1);

For further information, refer to the http://dev.horde.org/


<head><title>Horde WSDL Test</title></head>



// By <vijay.mahrra / es.easynet.net>

require_once 'SOAP/Client.php';

$horde_user = @$_POST['user'];

$horde_pass = @$_POST['pass'];

$horde_baseurl = @$_POST['url'];


<h1>Horde Installation Details</h1>

<form action="<?php echo $PHP_SELF ?>" method="POST">

Horde Base Url <input type="text" name="url" type="text" size="80" value="<?php echo $horde_baseurl ?>"/> Required<br />

Username <input type="text" name="user" size="20" value="<?php echo $horde_user ?>"/><br />

Password <input type="password" name="pass" size="20" value="<?php echo $horde_pass ?>"/><br />

<input type="submit"><br />



if (!empty($horde_baseurl)) {

    $wsdl_url = $horde_baseurl . '/rpc.php?wsdl';

    $wsdl =& new SOAP_WSDL($wsdl_url, array('user' => $horde_user, 'pass' => $horde_pass));

    if (is_a($wsdl, 'PEAR_Error')) {

        echo "<pre>" . print_r($wsdl, 1);

        $proxy_code = $wsdl->getMessage();

    } else {

        $proxy_code = highlight_string($wsdl->generateProxyCode(), 1);

        $client = $wsdl->getProxy();

        if (is_a($client, 'PEAR_Error')) {

            $client = $client->getMessage();

        } else {

            $client = print_r($client, 1);


        $client = new WebService_hordeService_hordePort();

        if (!empty($horde_user) && !empty($horde_pass)) {

            $test = print_r($client->horde_listAPIs(), 1);

            //$test = print_r($client->contacts_sources(0, true), 1);

            //$test = print_r($client->mail_folderlist(), 1);



    // write to the html page

    $content = <<<END

<h1>Horde RPC Test</h1>


    <li><a href="#wsdl">WSDL</a></li>

    <li><a href="#proxy">Proxy</a></li>

    <li><a href="#listing">Listing</a></li>

    <li><a href="#client">Client</a></li>

    <li><a href="#test">Test</a></li>


<hr />

<h2><a name="wsdl">WSDL Document</a> <a class="helplink" href="$wsdl_url">$wsdl_url</a></h2>


<hr />

<h2><a name="proxy">Proxy Code</a></h2>


<hr />

<h2><a name="test">Test</a></h2>


<hr />




$listing = highlight_file($_SERVER["SCRIPT_FILENAME"], 1);


<h2><a name="listing">Script Code</a></h2>

<?php echo($listing); ?>

<hr />