Funktioniert die alte API nicht mehr?



  • Seit dem letzten Update funktioniert das untenstehende Script - welches auf dem Beispiel in diesem Forum basiert - nicht mehr.

    Der Login funktioniert, beim zweiten API-Call erhalte ich ein "Session expired!"
    Anfragen über die neue RESTful-API funktionieren tadellos.

    Was mache ich falsch?

    $cookies = array();
    
    // Login with email and password
    $url = 'https://spm.church.tools/index.php?q=login/ajax';
    $data = array('func' => 'login', 
                  'email' => 'website', 
                  'password' => '*******'); 
    $result = sendRequest($url, $data);
    if ($result->status == "fail") {
      echo $result->data;
      return;
    }
    echo "Login erfolgreich!";
    
    
    // List groups
    $url = 'https://spm.church.tools/index.php?q=churchdb/ajax';
    $data = array('func' => 'getMasterData', 
                  'email' => 'website', 
                  'password' => '*******'); 
    $result = sendRequest($url, $data);
    
    print_r($result);
    
    
    function getCookies() {
      global $cookies;
      $res = "";
      foreach ($cookies as $key => $cookie) {
        $res .= "$key=$cookie; ";
      }
      return $res;
    }
    
    function saveCookies($r) {
      global $cookies;
      foreach ($r as $hdr) {
        if (preg_match('/^Set-Cookie:\s*([^;]+)/', $hdr, $matches)) {
          parse_str($matches[1], $tmp);
          $cookies += $tmp;
        }
      }
    }
    
    function sendRequest($url, $data) {
      $options = array(
        'http'=>array(
          'header' => "Cookie: ".getCookies() . "\r\nContent-type: application/x-www-form-urlencoded\r\n",
          'method' => 'POST',
          'content' => http_build_query($data),
        )
      );
      $context = stream_context_create($options);
      $result = file_get_contents($url, false, $context);
      $obj = json_decode($result);
      if ($obj->status == 'error') {
        echo "There is an error: $obj->message";
        exit;
      }
      saveCookies($http_response_header);
      return $obj;
    }
    
    

  • ChurchToolsMitarbeiter

    ich vermute es liegt an dem fehlenden CSRF-Token.
    Hier genauer beschrieben: https://intern.church.tools/?q=churchwiki#WikiView/filterWikicategory_id:0/doc:API-CSRF/follow_redirect:true/

    Das ist aber schon seit einigen Versionen so.


Log in to reply