2016-09-19 10 views
1

Googleの例(https://developers.google.com/google-apps/calendar/quickstart/php)のコードをそのままコピーし、できるだけ指示に従ってから、カレンダーがうまく機能しました。しかし、私は今日来て、それが動作を停止し、何が間違っているのか分からないことに気づいた。Google Calendar API getRefreshToken

私は私の問題の根本は、この行であると信じて:キャッチされないLogicException

$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); 

その行が私にこのエラーが発生しますので、:リフレッシュトークンが渡されたかsetAccessTokenの一部として設定する必要があります

似たような質問があります(Get refresh token google apiNot receiving Google OAuth refresh token)しかし、私はそうではないようです彼らの答えで私の問題を抱えています。

別の注意; $client->getRefreshToken()は私がそれをテストするときにnullを返すように思われるので、私は$client->fetchAccessTokenWithRefreshToken($client->getRefreshToken());が失敗していると思っています。


だから、これは$client->getRefreshToken()nullですが、私は私が必要な仮定の下にあったので、コードの一部は私にエラーを与えることを質問

// Refresh the token if it's expired. 
if ($client->isAccessTokenExpired()) { 
    $client->fetchAccessTokenWithRefreshToken($client->getRefreshToken()); 
    file_put_contents($credentialsPath, json_encode($client->getAccessToken())); 
} 

にある例から直接コードの一部でありますリフレッシュトークンを使用して新しいトークンを取得する方法はありますが、リフレッシュトークンがない場合はできません。


また、これはすでに通話

$client->setAccessType('offline'); 
$client->setApprovalPrompt('force'); 

答えて

1

の開始時に設定されているアクセストークンは、限られた寿命を持っており、それが発生したときに、これはあなたのカレンダーは動作を停止する原因となることに注意してくださいことに、注意してください。したがって、Token expirationに示唆されているように、コードに記述して、付与されたトークンがもはや機能しなくなる可能性を予測する必要があります。これは、リフレッシュ・トークンが非常に有効になり、アプリケーションが許可プロセスを再度経ることなく新しいアクセス・トークンを取得できるようにする場所です。

refresh tokenを要求するには、認証要求にaccess_type=offlineを追加します。ただし、このGitHub postは、要求にパラメータ access_type=offline&approval_prompt=forceを指定することによってリフレッシュトークンを取得できることを示唆しています。

は、より便利なヒントについては、私は、以下のリンクが有益になると思う。

+0

うん、私はすでに彼ら以来、それらのフラグを設定しましたこの例ではそして、それがリフレッシュされることを知っています。それは、 '期限切れになったらトークンをリフレッシュする 'とコメントしています。新しいキーを返すことはありません。 –

+0

私の質問は、うまくいっていることをさらに明確にする –