9

I'm trying to get json data by calling moodle url:

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

the response format of moodle system is like this:

{"token":"a2063623aa3244a19101e28644ad3004"}

The result I tried to process with 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 is: undefined

Now the question: How can I process the json response format of moodle system? Any idea would be great.

[UPDATE]: I have used another approach via curl and changed in php.ini following lines: *extension=php_openssl.dll*, *allow_url_include = On*, but now there is an error: Notice: Trying to get property of non-object. Here is the updated code:

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'

Can anyone advise me?

0

1 Answer 1

32

json_decode() expects a string, not a URL. You're trying to decode that url (and json_decode() will NOT do an http request to fetch the url's contents for you).

You have to fetch the json data yourself:

$json = file_get_contents('http://...'); // this WILL do an http request for you
$data = json_decode($json);
echo $data->{'token'};
Sign up to request clarification or add additional context in comments.

6 Comments

thank you for your reply, I've changed it to file_get_contents('https://...')..., but still the same result undefined My PHP Version 5.4.7
then echo out the file_get_contents results to see what you get. is it really json? maybe you've got magic_quotes enabled and PHP is "helpfully" being a jerk and mangling the string on you. Maybe that url doesn't output json at all.
I followed to this link: docs.moodle.org/dev/… it is not a json resnponse?
doesn't matter what the docs say - if there's a problem with the request/url, you may not get json back. dump out what your script is receiving. e.g. echo file_get_contents(...).
@Dozent I know it's been a long time my friend since you have asked this, but because I came across the same issue, please see the small edit of @Mark B code: <?php $json = file_get_contents('http://data.police.uk/api/crimes-street/all-crime?lat=52.629729&lng=-1.131592&date=2013-01'); var_dump(json_decode($json)); $data = var_dump(json_decode($json, true)); echo $data; ?>
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.