2013-01-10 16 views
7

Sto cercando di ottenere i dati JSON chiamando url moodle:Ottenere JSON oggetto chiamando un URL con parametri in PHP

https://<moodledomain>/login/token.php?username=test1&password=Test1&service=moodle_mobile_app 

il formato di risposta del sistema Moodle è come questo:

{"token":"a2063623aa3244a19101e28644ad3004"} 

Il risultato ho cercato di elaborare con PHP:

if (isset($_POST['username']) && isset($_POST['password'])){ 

       // test1      Test1 

    // request for a 'token' via moodle url 
    $json_url = "https://<moodledomain>/login/token.php?username=".$_POST['username']."&password=".$_POST['password']."&service=moodle_mobile_app"; 

    $obj = json_decode($json_url); 
    print $obj->{'token'};   // should print the value of 'token' 

} else { 
    echo "Username or Password was wrong, please try again!"; 
} 

risultato che s: indefinito

Ora la domanda: Come posso elaborare la risposta JSON formato del sistema Moodle? Qualsiasi idea sarebbe grandiosa.

[UPDATE]: Ho usato un altro approccio con arricciatura e cambiato php.ini seguenti linee: estensione * = php_openssl.dll *, * allow_url_include = On *, ma v'è un errore: Avviso: Tentativo di ottenere la proprietà di non oggetto. Ecco il codice aggiornato:

function curl($url){ 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 

$moodle = "https://<moodledomain>/moodle/login/token.php?username=".$_POST['username']."&password=".$_POST['password']."&service=moodle_mobile_app"; 
$result = curl($moodle); 

echo $result->{"token"}; // print the value of 'token' 

Qualcuno mi può consigliare?

risposta

30

json_decode() si aspetta una stringa, non un URL. Stai cercando di decodificare quell'URL (e json_decode() sarà NON fare una richiesta http per recuperare i contenuti dell'URL per te).

dovete recuperare i dati JSON da soli:

$json = file_get_contents('http://...'); // this WILL do an http request for you 
$data = json_decode($json); 
echo $data->{'token'}; 
+0

grazie per la risposta, ho cambiato a file_get_contents ** ('https: // ...') ** ... , ma sempre lo stesso risultato ** non definito ** My PHP Versione 5.4.7 – Dozent

+0

quindi echo out i risultati file_get_contents per vedere cosa ottieni. è davvero JSON? forse hai abilitato magic_quotes e PHP è "utile" essere un cretino e maneggiare la corda su di te. Forse quell'URL non esce affatto. –

+0

Ho seguito questo link: http://docs.moodle.org/dev/Creating_a_web_service_client#How_to_get_a_user_token non è una risposta eponica? – Dozent

Problemi correlati