Domanda

Sto cercando di impostare WebAPI di Tropo con un sito Drupal, e ho pensato che avevo appena creare un callback hook_menu () per example.com/tropo, quindi utilizzare il callback hook_menu ho appena creato per consumare la chiamata API da Tropo (che contiene un semplice array JSON dei dati), quindi rispondono.

posso fare la parte di risposta abbastanza facilmente ... costruire i dati, drupal_json_output () e di uscita (che restituisce solo il JSON in fondo).

La parte Ho problemi con sta ricevendo i dati che vengono inviati al / tropo menù richiamata ... non posso accedere a tutti i dati utilizzando uno dei seguenti modi:

$json = file_get_contents("php://input"); // returns NULL

(di seguito utilizza il modulo InputStream:)

$json = file_get_contents("drupal://input"); // also returns NULL

Ho controllato quello che alcuni altri moduli fanno, e sembra che usano hook_init per afferrare il JSON. È questo il metodo preferito? Mi piacerebbe essere in grado di farlo in hook_menu e utilizzare la mia strada e tale ...

In alternativa, sarei meglio scrivere il mio script PHP e funzionante al di fuori di Drupal, solo facendo un bootstrap per il database, se ho bisogno di?

È stato utile?

Soluzione

Bene, si scopre stavo ottenendo i dati, ma ho dimenticato di decodificarlo ...

Nel mio hook_menu callback:

$received = file_get_contents("drupal://input"); // Use inputstream module.
$received = json_decode($received, TRUE);

Poi posso giocare tanto quanto mi piacerebbe con il valore ricevuto $.

Inoltre, il inputstream modulo è prezioso per avermi permesso di arrivare al flusso di input più di una volta (se si tenta utilizzando php://input più di una volta, la seconda volta, e quelli che segue, si ritorna NULL).

Come nota aggiuntiva, ho appena notato oggi un nuovo modulo che potrebbe essere un modo ancora più semplice di gestire questo: Content come JSON

Altri suggerimenti

Il resto Server che fa parte del modulo di servizi fa automaticamente per JSON, così come per altri formati: http: //drupal.org/project/services

Inoltre, supporta InputStream (InputStream è stato costruito per gestire sia la verifica OAuth e servizi decodifica dello stesso flusso).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a drupal.stackexchange
scroll top