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!<br/>"; // 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; }
-
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.