アプリが Google ドライブ API にアクセスするためにOauth クラスを使用しています。リフレッシュ トークンとアクセス トークンの両方があり、ボールを転がすために必要なのは、リクエストのパラメーターを設定することだけです。
私の問題は、適切な応答を取得するために必要なパラメーターが見つからないように見えることです。OAuth プレイグラウンドを調べたところ、送信された要求には 3 つのヘッダーAuthorization
And Host
がありContent length
ます。
私が使用しているクラスは、これらのヘッダーを正しく処理する必要があり、実際にcode
and をaccess/refresh tokens
正しく受け取るという点で、正しいことをしていると確信しています。
リクエストを送信すると、Google からエラーが返されます。
StdClass Object
(
[error] => stdClass Object
(
[errors] => Array
(
[0] => stdClass Object
(
[domain] => global
[reason] => authError
[message] => Invalid Credentials
[locationType] => header
[location] => Authorization
)
)
[code] => 401
[message] => Invalid Credentials
)
)
これは確かに無効な資格情報を示していますか? しかし、「新しい」アクセス トークンとリフレッシュ トークンを受け取ったばかりであれば、これで問題ないのでしょうか? これが私が送信しているリクエストです(OAuthクラスのメソッドに従って)。
$row = $this->docs_auth->row();
$this->client = new oauth_client_class;
$this->client->server = 'Google';
$this->client->redirect_uri = 'https://localhost/p4a/applications/reflex_application/index.php';
$this->client->debug = true;
$this->client->client_id = REFLEX_GOOGLE_CLIENT;
$this->client->client_secret = REFLEX_GOOGLE_SECRET;
$this->client->access_token = $row['access_token'];
$this->client->refresh_token = $row['refresh_token'];
$url = 'https://www.googleapis.com/drive/v2/files';
$Values = array(
'access_token' => $this->client->access_token,
'client_id' => $this->client->client_id,
'client_secret' => $this->client->client_secret
);
/*
* Request: GET https://www.googleapis.com/drive/v2/files
* $values = the values sent in the request
* $folder = the response returned from Google.
*/
$this->client->callAPI($url, 'GET', $values, array(
'FailOnAccessError' => false
), $folder);
$this->field->setValue(print_r($folder, true));
私の質問は、フォルダーとファイルのリストを取得するために Google に送信する正しいパラメーターと、要求に必要なヘッダーは何ですか (クラスをあまり編集したくないのですが、すでに必要です)。
御時間ありがとうございます