Próbuję skonfigurować WebAPI Tropo z witryną Drupal i pomyślałem, że po prostu utworzę wywołanie zwrotne hook_menu () na przykład.com/tropo, a następnie użyję wywołania zwrotnego hook_menu, które właśnie utworzyłem, aby wykorzystać wywołanie API z Tropo ( który zawiera prostą tablicę danych JSON), a następnie odpowiedz.
Mogę dość łatwo wykonać część odpowiedzi ... zbudować dane, drupal_json_output () i wyjść (to po prostu zwraca JSON).
Problem z tym, że mam problemy z uzyskaniem danych wysyłanych do wywołania zwrotnego menu / tropo ... Nie mogę uzyskać dostępu do żadnych danych, używając jednej z następujących czynności:
$json = file_get_contents("php://input"); // returns NULL
(poniżej używa modułu inputstream :)
$json = file_get_contents("drupal://input"); // also returns NULL
Sprawdziłem, co robią niektóre inne moduły i wygląda na to, że używają hook_init, aby pobrać JSON. Czy to preferowana metoda? Chciałbym móc to zrobić w hook_menu i użyć własnej ścieżki i tak dalej ...
Alternatywnie, czy lepiej byłoby napisać własny skrypt PHP i uruchomić poza Drupalem, po prostu robiąc bootstrap dla bazy danych, jeśli zajdzie taka potrzeba?
Odpowiedzi:
Okazuje się, że otrzymywałem dane, ale zapomniałem je zdekodować ...
W moim wywołaniu zwrotnym hook_menu:
Wtedy mogę grać tyle, ile bym chciał z otrzymaną wartością $.
Ponadto moduł strumienia wejściowego jest nieoceniony , ponieważ pozwala mi dotrzeć do strumienia wejściowego więcej niż jeden raz (jeśli spróbujesz użyć
php://input
więcej niż raz, drugi raz, a kolejne, zwrócą NULL).Jako dodatkową notatkę właśnie zauważyłem dzisiaj nowy moduł, który może być jeszcze prostszym sposobem radzenia sobie z tym: Treść jako JSON
źródło
Serwer REST, który jest częścią modułu Usługi, robi to automatycznie dla JSON, a także dla innych formatów: http://drupal.org/project/services
Obsługuje również Inputstream (Inputstream został zbudowany do obsługi zarówno weryfikacji OAuth, jak i dekodowania usług tego samego strumienia).
źródło