Purpose

To verify that a Moodle plugin correctly sends data (e.g., grades) to a remote web service (typically via HTTP POST) when specific events are triggered, such as grading an assignment.

Prerequisites

  • Moodle instance with the plugin installed and enabled

  • Access to Moodle server (for grading & logs)

  • PHP CLI available (7.4+)

  • A terminal:

    • Linux/macOS: Bash or Zsh

    • Windows: PowerShell or CMD

  • Optional: curl or Postman for manual POSTs

Step-by-Step Procedure

Step 1: Set Up a Fake Local Endpoint

UNIX-like systems (Linux/macOS)

Create a test directory:

mkdir -p ~/php/wstest
cd ~/php/wstest
  1. Create a file called index.php:

    <?php
ob_start();
echo "=== REQUEST METHOD: " . $_SERVER['REQUEST_METHOD'] . "
===\n";
foreach (getallheaders() as $name => $value) {
echo "$name: $value\n";
}
echo "\n";
$input = file_get_contents('php://input');
echo "=== BODY ===\n";
echo $input . "\n";
$json = json_decode($input, true);
if ($json !== null) {
echo "\n=== PARSED JSON ===\n";
print_r($json);
}

file_put_contents(‘php://stdout’, “=== LOG FROM index.php ===\n” . ob_get_contents() . “\n”);

ob_end_flush();
  1. Start the PHP test server:

    php -S localhost:8000
  2. Keep this terminal open — you’ll see incoming requests printed here.

Windows (for testers)
  1. Install PHP

    Extract to C:\php
    Add C:\php to your PATH
  2. Create a test script

    Create folder: C:\php\wstest
  3. Create file: index.php (same contents as above)

Start server in CMD or PowerShell:

cd C:\php\wstest
php -S localhost:8000

Step 2: Point Moodle to the Local Endpoint

In the plugin settings, set the endpoint to your local test server:

http://localhost:8000
  1. Ensure your plugin’s event observer is correctly registered. Example (your plugin may differ):

    'callback' => '\local_yourplugin\observer::graded'
  2. Confirm that your observer method exists and is properly namespaced. Example method signature:

    public static function graded($eventdata) {
// your handling code
}

Step 3: Trigger the Event

  • Grade an assignment or perform any action that triggers the event

  • Watch your terminal window

Example terminal output:

=== LOG FROM index.php ===
=== REQUEST METHOD: POST ===
Content-Type: application/json
=== BODY ===
{"Cijfer":"77.00000","Cijfertype":"point","OpdrachtID":"15030","GebruikerID":"145404"}
=== PARSED JSON ===
Array
(

[Cijfer] => 77.00000

[Cijfertype] => point

[OpdrachtID] => 15030

[GebruikerID] => 145404

)

Step 4: Debug If Nothing Appears

  • Check that:

    • The plugin is enabled

    • The correct Moodle event is triggered

    • The callback matches your observer class and method

Add debug logging with:
Example:
error_log(“Triggered observer::graded()”);

  • Check web server logs

Ensure your curl call includes: Example:

CURLOPT_RETURNTRANSFER => true

Success Criteria

  • Endpoint receives a POST request

  • Data includes expected keys and values

  • No errors are logged in Moodle or PHP logs

Cleanup

  • Press Ctrl+C to stop the test server

  • Revert endpoint configuration if needed

Solin builds and tests Moodle integrations that exchange data with external systems under real operational constraints. Need help? Contact us.

Contact us