2013-01-10 38 views
7

Tôi đang cố gắng để có được dữ liệu json bằng cách gọi url moodle:Bắt JSON Object bằng cách gọi một URL với các thông số trong PHP

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

định dạng phản ứng của hệ thống moodle là như thế này:

{"token":"a2063623aa3244a19101e28644ad3004"} 

kết quả tôi đã cố gắng để xử lý với 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!"; 
} 

Result i s: không xác định

Bây giờ câu hỏi: Làm thế nào tôi có thể xử lý phản ứng json định dạng của hệ thống moodle? Bất kỳ ý tưởng nào cũng sẽ tuyệt vời.

[UPDATE]: Tôi đã sử dụng cách tiếp cận khác thông qua curl và thay đổi trong php.ini dòng sau: * extension = php_openssl.dll *, * allow_url_include = On *, nhưng bây giờ có một lỗi: Thông báo: Đang cố gắng lấy thuộc tính không đối tượng. Đây là mã được cập nhật:

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' 

Bất kỳ ai cũng có thể tư vấn cho tôi không?

Trả lời

30

json_decode() dự kiến ​​một chuỗi chứ không phải URL. Bạn đang cố gắng giải mã url đó (và json_decode() sẽ KHÔNG thực hiện yêu cầu http để tìm nạp nội dung của url cho bạn).

Bạn cần phải lấy dữ liệu json mình:

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

cảm ơn bạn đã trả lời của bạn, tôi đã thay đổi nó để đào tạo Quản lý ** ('https: // ...') ** ... , nhưng vẫn là kết quả tương tự ** undefined ** Phiên bản PHP 5.4.7 – Dozent

+0

của tôi sau đó lặp lại kết quả file_get_contents để xem những gì bạn nhận được. là nó thực sự json? có lẽ bạn đã có magic_quotes được kích hoạt và PHP là "helpfully" là một jerk và mangling chuỗi trên bạn. Có lẽ url đó không sinh ra json chút nào. –

+0

Tôi đã truy cập vào liên kết này: http://docs.moodle.org/dev/Creating_a_web_service_client#How_to_get_a_user_token nó không phải là một phản hồi json? – Dozent

Các vấn đề liên quan