2013-01-10 35 views
7

我試圖讓JSON數據調用的Moodle網址:獲取JSON對象通過調用帶有參數的URL在PHP

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

的Moodle系統的響應格式是這樣的:

{"token":"a2063623aa3244a19101e28644ad3004"} 

我試着用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!"; 
} 

結果,我S:未定義

現在的問題是: 我怎麼可以處理JSON響應的Moodle系統格式?任何想法都會很棒。

[UPDATE]: 我已經通過捲曲使用另一種方法和在php.ini中以下行改變:*延長= php_openssl.dll *,* allow_url_include =開*,但現在有一個錯誤代碼:注意:試圖獲取非對象的屬性。以下是更新後的代碼:

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' 

誰能告訴我?

回答

30

json_decode()需要一個字符串,而不是一個URL。你正試圖解碼該網址(和json_decode()將做一個http請求來獲取你的網址的內容)。

你必須自己獲取JSON數據:

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

感謝您的回覆,我已經把它改爲**的file_get_contents( 'https://開頭...')** ... ,但仍然是相同的結果** undefined ** 我的PHP版本5.4.7 – Dozent

+0

然後回顯file_get_contents結果以查看您得到的結果。它真的是JSON嗎?也許你已經啓用了magic_quotes,並且PHP「有利地」成爲一個混蛋,並且將你的字符串弄亂了。也許這個網址根本不輸出json。 –

+0

我跟隨到這個鏈接:http://docs.moodle.org/dev/Creating_a_web_service_client#How_to_get_a_user_token 它不是一個json resnponse? – Dozent