Note:

If you want to create a new page for developers, you should create it on the Moodle Developer Resource site.

Creating a web service client

From MoodleDocs

Moodle 2.0


Moodle web service function documentation.jpg

You need to have already setup a web service. You can get help from How to enable web services for ordinary users or How to enable web services for an external system . Then have a look to your security keys page. You'll find there your token and the web service documentation associated with this token.

Officially supported protocols

  • REST: the Moodle REST server uses POST for parameters and XML for returned values. This server is not RESTfull.
  • SOAP: the Moodle SOAP server is based on the Zend SOAP server (itself based on the PHP SOAP server). Zend publishes a Zend SOAP client. The current server implementation doesn't work with Java/.Net because we didn't generated a fully describe WSDL yet. If you are working on a Java/.Net client, follow or participate to the tracker issue MDL-20804
  • XML-RPC: the Moodle XML-RPC server is based on Zend XML-RPC server. Zend also publishes a Zend XML-RPC client.
  • AMF: the Moodle AMF server is based on the Zend AMF server. The test client can be found in Settings blocks > Site Administration > Development > Web service test client > AMF Test client.

PHP client examples

In all these client examples we will create two groups calling the web service function moodle_group_create_groups.

XML-RPC

The Moodle XML-RPC server extends Zend XML-RPC Server. It is recommended to have a look to the Zend XML-RPC client documentation

//set two groups $group = new stdClass(); $group->courseid = $course->id; $group->name = 'group1'; $group->enrolmentkey = ; $group->description = 'Group 1'; $group2 = new stdClass(); $group2->courseid = $course->id; $group2->name = 'group2'; $group2->enrolmentkey = ; $group2->description = 'Group 2';

//set web service parameters $paramgroups = array($group, $group2); $params = array('groups' => $paramgroups);

//set web service url server => token need to be passed in the url $serverurl = $remotemoodleurl . "/webservice/xmlrpc/server.php" . '?wstoken=' . $token;

//create the xmlrpc client instance require_once 'Zend/XmlRpc/Client.php'; $xmlrpcclient = new Zend_XmlRpc_Client($serverurl);

//make the web service call $function = 'moodle_group_create_groups'; try {

   $createdgroups = $client->call($function, $params);

} catch (Exception $e) {

    var_dump($e);

}

SOAP

The Moodle SOAP server extends Zend SOAP Server. It is recommended to have a look to the Zend SOAP client documentation. Except the class name Zend_Soap_Client, the entire example code would be similar to XML-RPC.

REST

Look at the web service function documentation on your security keys page to know about the returned XML structure.

//get the profile data of Moodle User

include 'Zend/Loader/Autoloader.php'; Zend_Loader_Autoloader::autoload('Zend_Loader');

$params = array(

   'userids' => array(2,4), // the params to passed to the function
   'wsfunction' => 'moodle_user_get_users_by_id',   // the function to be called
   'wstoken' => '8dc8f5ca046129706c0d85a56efcaddd' //token need to be passed in the url

);

//set web service url server $serverurl = "http://{servername}/webservice/rest/server.php";

$client = new Zend_Http_Client($serverurl);

print "

";
try {
    $client->setParameterPost($params);    
    $response = $client->request('POST');

    var_dump ($response);
} catch (exception $exception) {
    var_dump ($exception);
}
print "

";