1

目前正在构建一个 Laravel 应用程序,该应用程序使用 Socialite 包使用他们的 Google 凭据成功地对用户进行身份验证。但是,我正在尝试向 Google 服务器发出 GET 请求以检索给定用户的联系人列表,我一直在 Google oAuth 2 Playground 上进行一些试验,并尝试在我的应用程序中模拟相同的请求。我创建了以下功能:

public function getContactList()
{

$client = new \GuzzleHttp\Client();

$email = \Auth::user()->email;

$token = \Session::get('token');

$json = $client->get('https://www.google.com/m8/feeds/contacts/default/full/',  [

    'headers' => [

        'Authorization' => 'Bearer ' . $token,

    ],
]);

dd($json);

return $json;

}

经过无休止的努力以克服被禁止的响应,我终于得到了一个肯定的响应,但它没有用,体内没有任何东西,用 Json_decode 解码它会得到 null,这是响应:

Response {#198 ▼
  -reasonPhrase: "OK"
  -statusCode: 200
  -effectiveUrl: "https://www.google.com/m8/feeds/contacts/default/full/"
  -headers: array:11 [▼
    "expires" => array:1 [▼
      0 => "Mon, 30 Mar 2015 15:19:52 GMT"
    ]
    "date" => array:1 [▼
      0 => "Mon, 30 Mar 2015 15:19:52 GMT"
    ]
    "cache-control" => array:1 [▶]
    "vary" => array:2 [▶]
    "content-type" => array:1 [▶]
    "x-content-type-options" => array:1 [▶]
    "x-frame-options" => array:1 [▶]
    "x-xss-protection" => array:1 [▶]
    "content-length" => array:1 [▶]
    "server" => array:1 [▶]
    "alternate-protocol" => array:1 [▶]
  ]
  -headerNames: array:11 [▼
    "expires" => "Expires"
    "date" => "Date"
    "cache-control" => "Cache-Control"
    "vary" => "Vary"
    "content-type" => "Content-Type"
    "x-content-type-options" => "X-Content-Type-Options"
    "x-frame-options" => "X-Frame-Options"
    "x-xss-protection" => "X-XSS-Protection"
    "content-length" => "Content-Length"
    "server" => "Server"
    "alternate-protocol" => "Alternate-Protocol"
  ]
  -body: Stream {#197 ▼
    -stream: :stream {@8 ▼
      wrapper_type: "PHP"
      stream_type: "TEMP"
      mode: "w+b"
      unread_bytes: 0
      seekable: true
      uri: "php://temp"
      options: []
    }
    -size: null
    -seekable: true
    -readable: true
    -writable: true
    -uri: "php://temp"
    -customMetadata: []
  }
  -protocolVersion: "1.1"
}

我可以更改什么或需要更改什么来获取完整的联系人列表而不是空的 200 响应?

更新:我做了一些测试来验证我的请求的准确性,并发现上述请求实际上返回了一个 ATOM 提要,这可能是问题所在。当我向返回 JSON 响应的 Drive API 发出请求时,只需使用 json_decode 解析它,我就可以毫无问题地提取适当的数据。我需要使用哪个函数来解析 PHP 中的 ATOM 数据才能检索它?

4

2 回答 2

1

您是否尝试将 'alt=json' 参数添加到您的 GET 请求中?像这样:

$response = $client->get('https://www.google.com/m8/feeds/contacts/default/full?alt=json',  [
 'headers' => [
   'Authorization' => 'Bearer ' . $token,
 ],
]);

我一直在尝试以 JSON 格式获取联系人 API,看起来这是正确的方法: https ://developers.google.com/google-apps/contacts/v3/reference#contacts-query-parameters-reference

于 2015-07-23T08:20:16.587 回答
0

Response从 Guzzle 那里得到一个对象。对象上有一个json可用的方法Response,因此您应该能够:

$response = $client->get('https://www.google.com/m8/feeds/contacts/default/full/',  [
    'headers' => [
        'Authorization' => 'Bearer ' . $token,
    ],
]);

echo $response->json();

来源: http: //guzzle.readthedocs.org/en/latest/http-messages.html#id2

于 2015-03-30T17:52:10.787 回答