Ich versuche, Tropos WebAPI mit einer Drupal-Site einzurichten, und dachte, ich würde einfach einen hook_menu () - Rückruf für example.com/tropo erstellen und dann den soeben erstellten hook_menu-Rückruf verwenden, um den API-Aufruf von Tropo ( die ein einfaches JSON-Array von Daten enthält), dann antworten.
Ich kann den Antwortteil ziemlich einfach erledigen ... die Daten erstellen, drupal_json_output () und beenden (das gibt im Grunde nur den JSON zurück).
Der Teil, mit dem ich Probleme habe, besteht darin, die Daten abzurufen, die an den Rückruf des Menüs / tropo gesendet werden. Ich kann mit keiner der folgenden Methoden auf Daten zugreifen:
$json = file_get_contents("php://input"); // returns NULL
(unten verwendet das Inputstream-Modul :)
$json = file_get_contents("drupal://input"); // also returns NULL
Ich habe überprüft, was einige andere Module tun, und es sieht so aus, als würden sie hook_init verwenden, um den JSON abzurufen. Ist das die bevorzugte Methode? Ich würde es gerne in hook_menu tun und meinen eigenen Weg benutzen und so ...
Alternativ wäre es besser, wenn ich mein eigenes PHP-Skript schreibe und außerhalb von Drupal ausgeführt würde und nur einen Bootstrap für die Datenbank mache, wenn ich muss?
Antworten:
Nun, es stellte sich heraus, dass ich die Daten erhalten habe, aber ich habe vergessen, sie zu dekodieren ...
In meinem hook_menu Rückruf:
Dann kann ich mit dem erhaltenen Wert so viel herumspielen, wie ich möchte.
Darüber hinaus ist das Eingabestream- Modul von unschätzbarem Wert, damit ich mehr als einmal zum Eingabestream gelangen kann (wenn Sie versuchen,
php://input
mehr als einmal zu verwenden, wird beim zweiten und den folgenden Mal NULL zurückgegeben).Als zusätzliche Anmerkung habe ich heute ein neues Modul bemerkt, das eine noch einfachere Möglichkeit sein könnte, dies zu handhaben: Inhalt als JSON
quelle
Der REST-Server, der Teil des Services-Moduls ist, führt dies automatisch für JSON sowie für andere Formate aus: http://drupal.org/project/services
Es unterstützt auch Inputstream (Inputstream wurde entwickelt, um sowohl die OAuth-Überprüfung als auch die Services-Decodierung desselben Streams zu handhaben).
quelle