Frage zur Benutzung der API
-
Hallo zusammen,
ich arbeite mich gerade an der API ab... Zunächst wollte ich mich per login anmelden. Das zugehörige Testpäckchen sieht so aus:POST https://churchtools.meineDomain.de Content-Type: application/x-www-form-urlencoded q=login&email=function@meineDomain.de&password=verySecret
(ich teste das per PHP Webstorm)
Wenn ich den Request losschicke, bekomme ich folgende Antwort von unserem Server:POST https://churchtools.meineDomain.de HTTP/1.1 200 OK Server: nginx Date: Thu, 06 Sep 2018 21:44:09 GMT Content-Type: text/html; charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Vary: Accept-Encoding X-Powered-By: PHP/7.2.9 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate Pragma: no-cache Content-Security-Policy: default-src 'self'; script-src 'self' maps.google.com *.googleapis.com www.google.com *.gstatic.com js.stripe.com 'unsafe-eval'; style-src 'self' *.googleapis.com 'unsafe-inline'; font-src 'self' *.gstatic.com; img-src * data: blob; child-src * data; connect-src *; object-src 'self' www.youtube.com Set-Cookie: ChurchTools_mmmmmm_ctools=2m4hfn59mn7ntgpfdf81rukao9; expires=Fri, 07-Sep-2018 21:44:09 GMT; Max-Age=86400; path=/; secure; HttpOnly X-Powered-By: PleskLin
Das sieht ja eigentlich ganz ok aus. Die zurückgelieferte HTML-Seite fängt aber so an:
<!DOCTYPE html> <html lang="de"> <head> <meta charset="utf-8"> <title>My Test Church - login</title> <meta name="viewport"
Setze ich dann folgende Abfrage ab:
GET https://churchtools.meineDomain.de?q=churchhome&func=getMemberList
kommt wieder die Loginseite als Antwort. Scheinbar mache ich hier etwas Grundsätzliches falsch. Könnte mir da ggf. jemand von euch weiterhelfen? Ich bin auch mit PHP nicht ganz so fit, da ich eher in der Java-Welt unterwegs bin...
Wenn ich mich mit den Zugangsdaten ganz normal im Browser anmelde ist alles perfekt. D.h., die Weboberfläche funktioniert mit den Zugangsdaten.
Besten Dank vorab und viele Grüße,
Ralf. -
Hallo Ralf,
dein erster Request
POST https://churchtools.meineDomain.de Content-Type: application/x-www-form-urlencoded q=login&email=function@meineDomain.de&password=verySecret
scheint falsch zu sein. Meines Erachtens müsste das folgendermaßen aussehen ( siehe auch)
POST https://churchtools.meineDomain.de Content-Type: application/x-www-form-urlencoded q=login/ajax&func=login&email=function@meineDomain.de&password=verySecret
Besonders wichtig sind hier
q=login/ajax&func=login
Zwecks deinem zweiten Request:
- Die Method
GET
ist nicht erlaubt, der Server wird dir nen405 Method not allowed
liefern. - Vergess nicht die zwei Cookies, die du beim Login-Request erhalten hast, hier mit zu schicken.
Viele Grüße,
Marcel
PS: Nutze aus Sicherheitsgründen besser die Loginmöglichkeit mit Token, anstatt mit Passwort.
PPS: Schau dir mal die Doku auf https://api.churchtools.de an. Im Speziellen https://api.churchtools.de/class-CTLoginModule.html sollte beim Login helfen. Die ist nicht vollständig und viel muss man sich zusammen reimen, aber mal ne Grundlage
- Die Method
-
Hallo Marcel,
besten Dank für die Info. Irgendwie hatte ich keine Info über die Antwort bekommen und hab das jetzt erst gesehen.
Inzwischen scheint das mit dem Login zu klappen, ich habe auch ein Token bekommen (hab das Login dahingehend umgestellt). Die nächste Hürde ist, daß ich jedesmal ein "Session expired!" bekomme, wenn ich irgendwas machen will (obwohl ich das gerade erzeugte Token schon mitschicke).
Hier mal mein Code:// Token per Login-Anfrage holen POST https://churchtools.meineDomain.de?q=churchhome/ajax&func=getMemberList (im Body steht dann noch token=meintoken) // als Java-Code sieht das so aus: resp1 = Request.Post("https://churchtools.meineDomain.de/?q=churchhome/ajax&func=getMemberList").bodyForm(Form.form().add("token", myToken).add("directtool", "yes").build()).execute().returnContent();
Warum ist das denn falsch? Soll das Token woanders rein? Aber in dem API-Call steht da nichts drin...
Viele Grüße,
Ralf. -
Die CT API funktioniert hier etwas anders. Du musst dich mit dem Token einloggen und die eigentlichen Session-Cookies erstellen. Dafür eignet sich die Methode login with Token.
Dokumentation siehe https://api.churchtools.de/class-CTLoginModule.html
Die zwei Cookies, welche du erhältst, musst du dann in den folgenden Requests mitschicken.