php无法解码json对象

时间:2017-11-02 15:10:16

标签: php

我有这个json对象,我想得到access_token但它拒绝我不明白为什么。这是我想要access_token

的响应
{
        "access_token": "Alhq74lVl5GAOVAZrprOGSS1Gj73",
        "expires_in": "3599"
    }

这是代码

function generateToke() {
// $url = 'https://sandbox.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials';
   $url = 'https://api.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials';
   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, $url);
   $credentials = base64_encode('qniogqzdbIskIQt9nxgxG1wSBkzgUqN0:XUjxWzQY3WTndqHh');
   curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Basic ' . $credentials)); //setting a custom header
   curl_setopt($curl, CURLOPT_HEADER, false);
   curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

   $curl_response = curl_exec($curl);
   $result = json_decode($curl_response);


   $token = $result->access_token;
   echo $token;

}

得到同样的错误

上面的代码仍在向我显示json,但我想只得到Alhq74lVl5GAOVAZrprOGSS1Gj73

2 个答案:

答案 0 :(得分:1)

您没有访问结果对象的access_token属性,而是尝试访问未定义变量$access_token;中命名的属性。

所以只需删除$ -sign,它就会工作:

$token = $result->access_token;

此外,您缺少一个返回内容的curl选项:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

如果未将此选项设置为true,则表示您未从curl_exec调用中检索响应。

答案 1 :(得分:0)

变化:

$token = $result->$access_token;

To(access_token上没有$):

$token = $result->access_token;

它没有用,因为PHP有​​一个名为variable variables的功能,你不小心使用了它。 PHP试图获得$access_token的任何值的属性。例如。如果名为$access_token的变量设置为helloworld,则PHP将运行$result->helloworld并将$access_token替换为其值。