arrow-left

Alle Seiten
gitbookBereitgestellt von GitBook
1 von 5

Loading...

Loading...

Loading...

Loading...

Loading...

SOAP, REST und XML-RPC

Wenn Sie sich ein wenig damit beschäftigen, werden Sie feststellen, dass wir mit der Entwicklung verschiedener Arten von Webservices begonnen haben, in SOAP, aber auch in REST und XML-RPC.

Die am häufigsten verwendete und gepflegte Version ist jedoch wahrscheinlich SOAP (ohne besonderen Grund) und ist in einer einzigen Datei konzentriert: main/webservices/registration.soap.php

SystemadministratorsWEB Dienste

Grundlegende Informationen zu Webdiensten in Chamilo LMS finden Sie immer hier: Aber die Informationen dort sind möglicherweise nicht vollständig auf dem neuesten Stand (die in diesem Handbuch), da sich die Dienste im Laufe der Zeit tendenziell ändern oder an Zahl zunehmen (obwohl wir natürlich unser Bestes tun, um die Abwärtskompatibilität aufrechtzuerhalten).

Die zuverlässigste Quelle ist jedoch immer der Code, der sich im main/webservices/ -Ordner befindet.

Chamilo-APIsarrow-up-right

Einschränkung beim Anrufen von IP-Adressen

Andere Skripte folgen möglicherweise nicht diesem, aber mit registration.soap.php können Sie Einschränkungen für die IP-Adressen definieren, die die darin enthaltenen Webservices aufrufen können.

Dies wird durch den folgenden Codeausschnitt innerhalb der WSHelperVerifyKey() -Funktion ermöglicht

// Check if a file that limits access from webservices exists
// and contains the restraining check 
if (is_file('webservice-auth-ip.conf.php')) {
    include 'webservice-auth-ip.conf.php';
    if ($debug) {
        error_log("webservice-auth-ip.conf.php file included");
    }

    if (!empty($ws_auth_ip)) {
        $check_ip = true;
        $ip_matches = api_check_ip_in_range($ip, $ws_auth_ip);
        if ($debug) {
            error_log("ip_matches: $ip_matches");
        }
    }
}

Wie Sie verstanden haben, müssen Sie eine Datei namens « webservice-auth-ip.conf.php » im selben Ordner wie registration.soap.php erstellen und eine Liste der IP-Adressen (oder Bereiche) in die Datei selbst einfügen. Es werden nur die IP-Adressen akzeptiert, die den Bereichen entsprechen.

Bei Verwendung dieser Methode muss der Algorithmus, den wir zuvor zum Erstellen des Sicherheitsschlüssels gesehen haben, geändert werden, da die IP-Adresse nicht mehr benötigt wird:

$finalKey = sha1($key) ;

Für Portale, in denen Sicherheit sehr wichtig ist, empfiehlt es sich, diese Methode zu verwenden.

Verbindungs- und Sicherheitsschlüssel

Der Authentifizierungsmechanismus für die Webservices ist etwas seltsam, also geben wir Ihnen zuerst ein Beispiel dafür, wie wir einen Dienst anrufen würden, der einen Benutzer in Chamilo aus einer anderen Anwendung in PHP erstellt... wir erklären dann die verschiedenen Teile.

Gleich zu Beginn haben wir die URL für den Zugriff auf die WSDL erstellt. Die meisten Dateien in main/webservices/ (wenn nicht alle) können mit einem «?wsdl » -Suffix aufgerufen werden, um die WSDL (die strukturierte Darstellung der verfügbaren Funktionen) anzuzeigen. Dies sollte ausreichen, damit jeder SOAP-Client weiß, welche Funktionen für Anrufe verfügbar sind.

Wir haben dann bei testip.php nach einer IP-Adresse gesucht. Dieses Skript hilft uns speziell bei der Bildung des geheimen Schlüssels: Wir müssen dem Server zeigen, von dem wir wissen, von welcher IP wir anrufen werden. Die Verwendung von file_get_contents() gibt Ihnen diese Informationen in eine Variable.

Wir definieren dann einen Schlüssel... das liegt daran, dass wir ihn nicht direkt von Chamilo über den Webserver beziehen können. Wir müssen die app/config/configuration.php -Datei öffnen und nach $_configuration ['security_key'] suchen, dann seinen Wert in unser Skript kopieren, um den endgültigen geheimen Schlüssel zu bilden, den wir an den Webdienst senden.

Schließlich bereiten wir das Array $params vor und rufen das WSCreateUserPasswordCrypted() auf (eine spezielle Version von WSCreateUser(), die nur funktioniert, wenn wir die gleiche Kryptenmethode für das Kennwort auf beiden Seiten verwenden (wir müssen es im Parameter encrypt_method erwähnen.

Der Parameter original_user_id_name ermöglicht es uns, eine Verbindung zwischen Chamilo und unserem externen Service herzustellen. Geben Sie einfach einen konstanten Namen an, der Ihr System und die Tatsache darstellt, dass es sich um eine Benutzer-ID handelt, und geben Sie die Benutzer-ID von Ihre-System innerhalb des Werts von original_user_id_value an. Mit diesem Wertesatz können Sie später Benutzer bearbeiten oder löschen, die Sie zuvor erstellt haben: Chamilo wird dank der Speicherung dieser Informationen eine Beziehung zwischen Ihrem System und sich selbst aufrechterhalten.

$url = 'https://chamilo.net/main/webservices/';
$soap = new SoapClient($url . 'registration.soap.php?wsdl');

// get your own IP as seen by the Chamilo server (helps building the key)
$myIp = file_get_contents($url . 'testip.php') ;

// use the security_key as defined in your app/config/configuration.php
$key = '23534f3223a3cb234234324208';

// now we can build the key we need
$finalKey = sha1($myIp.$key) ;

// prepare the user details
$params = array(
    'secret_key' => $finalKey,
    'firstname' => 'Yannick',
    'lastname' => 'Warnier',
    'status' => 5,
    'loginname' => 'ywarnier',
    'password' => '243fvsdfvs6dfv657dfvs32dfvs34dfv',
    'encrypt_method' => 'sha1',
    'email' => '[email protected]',
    'language' => 'spanish',
    'phone' => '',
    'expiration_date' => '2015-01-01',
    'original_user_id_name' => 'external_user_id',
    'original_user_id_value' => 34,
    'official_code' => 34,
    'extra' => array()
);

// finally, we can call the service
$soap->WSCreateUserPasswordCrypted($params);

Andere Methoden

Einige der anderen verfügbaren Methoden mit einer kleinen Erklärung für jede:

function WSCreateUsers($params)

Erstellt Benutzer in Chargen. Das Passwort wird unverschlüsselt erwartet (was auf HTTPS in Ordnung ist, aber sonst nicht).

function WSCreateUser($params)

Erzeugt nur einen Benutzer.

function WSCreateUsersPasswordCrypted($params)

Erstellt Benutzer, die berücksichtigen, dass ihre Kennwörter möglicherweise verschlüsselt sind. Diese Methode erwartet die folgenden Parameter:

$params = array(
    'secret_key' => $finalKey,
    'users' => array(
        0 => array(
            'firstname' => '…',
            'lastname' => '…',
            'status' => 5,
            'email' => '',
            'loginname' => '',
            'password' => '',
            'encrypt_method' => '',
            'language' => '',
            'phone' => '',
            'expiration_date' => '',
            'official_code' => '',
            'original_user_id_name' => '',
            'original_user_id_value'=> '',
            'extra' => ''
        )
    )
);

function WSCreateUserPasswordCrypted($params)

Erstellt nur einen Benutzer, der sein Passwort berücksichtigt, ist möglicherweise verschlüsselt

function WSEditUserCredentials($params)

Bearbeitet die Anmeldedaten eines Benutzers (Benutzername + Passwort)

function WSEditUsers($params)

Bearbeiten Sie mehrere Benutzer im Batch.

Bearbeiten Sie nur einen Benutzer

Benutzer bearbeiten, verschlüsselte Passwörter senden

Bearbeiten Sie einen Benutzer und senden Sie ein verschlüsseltes Passwort.

Warnung: Obwohl sehr diskret, gibt es in Chamilo LMS 1.9 ein Problem.* wobei wscreateUserGypwordCrypted den Benutzernamen in Form eines « loginname » -Feldes erwartet, während WseditUserPasswordCryptoD den Benutzernamen in Form eines « username » -Feldes erwartet. Stellen Sie sicher, dass Sie nicht auf dieses hereinfallen, da dies zeitaufwändig sein könnte.

Benutzer im Stapel löschen

Deaktivieren Sie Benutzer im Batch

Benutzer im Stapel aktivieren

Erstellen Sie einen Kurs

Erstellen Sie einen Kurs mit nur einem Titel

Bearbeiten eines bestehenden Kurses

Holen Sie sich die Kursbeschreibung für einen bestimmten Kurs

Bearbeiten einer Kursbeschreibung

Einen Kurs löschen

Erstellen Sie eine Sitzung. Diese Methode erwartet die folgenden Parameter:

Bearbeiten Sie eine (oder mehrere) bestehende Session (s) basierend auf dem ursprünglichen_session_id_value-Feld. Diese Methode erwartet die folgenden Parameter:

Löschen einer Session

Abonnieren Sie einen Benutzer für einen Kurs

Abonnieren Sie einen Benutzer für einen Kurs

Holen Sie sich Benutzerinformationen von einer Benutzer-ID

Holen Sie sich Benutzerinformationen von einem Benutzernamen

Einen Benutzer von einem Kurs abmelden

WARNUNG: Bitte beachten Sie hier den Tippfehler: Der Dienst heißt « suscribe » statt « subscribe ». Aus Gründen der Abwärtskompatibilität haben wir es so gelassen, aber machen Sie keinen Fehler: Sie müssen es in falschem Englisch eingeben, damit es funktioniert!Abonnieren Sie einen Benutzer für eine Sitzung. Diese Methode erwartet die folgenden Parameter:

Einen Benutzer von einer Sitzung abmelden

WARNUNG: Siehe Hinweis in WSSSusCribeUsersToSession

Abmelden mehrerer Benutzer von einer Sitzung im Batch

WARNUNG: Siehe Hinweis in WSSSusCribeUsersToSession

Abonnieren Sie mehrere Benutzer für eine Sitzung im Stapel. Diese Methode erwartet die folgenden Parameter:

WARNUNG: Siehe Hinweis in WSSSusCribeUsersToSession

Entfernen eines Kurses aus einer Session

Ruft eine Liste der auf der Plattform verfügbaren Kurse ab

Aktualisieren Sie den API-Schlüssel eines Benutzers

Listet die auf der Plattform verfügbaren Sitzungen auf

function WSEditUser($params)
function WSEditUsersPasswordCrypted($params)
function WSEditUserPasswordCrypted($params)
function WSDeleteUsers($params)
function WSDisableUsers($params)
function WSEnableUsers($params)
function WSCreateCourse($params)
function WSCreateCourseByTitle($params)
function WSEditCourse($params)
function WSCourseDescription($params)
function WSEditCourseDescription($params)
function WSDeleteCourse($params)
function WSCreateSession($params)
$params = array(
    'secret_key' => $finalKey,
    'sessions' => array(
        'name' => '',
        'year_start' => '',
        'month_start' => '',
        'day_start' => '',
        'year_end' => '',
        'month_end' => '',
        'day_end' => '',
        'nb_days_access_before' => '',
        'nb_days_access_after' => '',
        'nolimit' => '',
        //not used in session creation
        'user_id' => '',
        //the coach id
        'original_session_id_name' => '',
        'original_session_id_value'=> '',
        'extra' => ''
    )
);

function WSEditSession($params)
$params = array(
    'secret_key' => $finalKey,
    'sessions' => array(
        0 => array(
            'name' => '',
            'year_start' => '',
            'month_start' => '',
            'day_start' => '',
            'year_end' => '',
            'month_end' => '',
            'day_end' => '',
            'nb_days_access_before' => '',
            'nb_days_access_after' => '',
            'original_session_id_name' => '',
            'original_session_id_value'=> '',
            'coach_username' => '',
            'nolimit' => '',
            'user_id' => '',
            //the coach id
            'extra' => ''
        ),
    )
);

function WSDeleteSession($params)
function WSSubscribeUserToCourse($params)
function WSSubscribeUserToCourseSimple($params)
function WSGetUser($params)
function WSGetUserFromUsername($params)
function WSUnsubscribeUserFromCourse($params)
function WSSuscribeUsersToSession($params)
$params = array(
    'secret_key' => $finalKey,
    'userssessions' => array(
        0 => array(
            'original_user_id_name' => '',
            'original_user_id_value'=> '',
            'original_session_id_name' => '',
            'original_session_id_value'=> ''
        )
    )
);

function WSSubscribeUserToSessionSimple($params)
function WSUnsuscribeUsersFromSession($params)
function WSSuscribeCoursesToSession($params)
$params = array(
    'secret_key' => $finalKey,
    'coursessessions' => array(
        0 => array(
            'original_course_id_name' => '',
            'original_course_id_values' => array(
                0 => array(
                    'course_code' => '',
                    //external course ID (can be int)
                ),
            ),
            'original_session_id_name'=> '',
            'original_session_id_value'=> '',
        )
    )
);

function WSUnsuscribeCoursesFromSession($params)
function WSListCourses($params)
function WSUpdateUserApiKey($params)
function WSListSessions($params)