2013-08-27 9 views
6

GoogleのAPIを使用して私の痛みは、私はリフレッシュトークンを使用するようにスクリプトを使用することができるよ...リフレッシュトークン

を続けて - 自動的に更新され、生きているカレンダーに私のアクセスを維持します。私はカレンダーと対話することができ、すべてが良いです。

私は現在、phpのgoogle apiクライアントを使用しています。私はこのトークンが有効な間、昨日働いていましたが、今は期限切れです。リフレッシュトークンを使用して新しい将来トークンが期限切れになると、認証を継続します。

参照の数をIを見つけたし、これらを試してみました - ここに私のテストスクリプトは、これまでsimple.php例に基づいてあります:

<?php 
require_once '../../src/Google_Client.php'; 
require_once '../../src/contrib/Google_CalendarService.php'; 
session_start(); 

$client = new Google_Client(); 
$client->setAccessType('offline'); 
$client->setApplicationName("Downs Golfmanager"); 


// Visit https://code.google.com/apis/console?api=calendar to generate your 
// client id, client secret, and to register your redirect uri. 
$client->setClientId('XXXXXX.apps.googleusercontent.com'); 
$client->setClientSecret('XXXXXX'); 
$client->setRedirectUri('XXXXXX'); 
$client->setDeveloperKey('XXXXXX'); 
$client->refreshToken('X/XXXXX'); 


$client->setUseObjects(true); 
$cal = new Google_CalendarService($client); 
if (isset($_GET['logout'])) { 
    unset($_SESSION['token']); 
} 

if (isset($_GET['code'])) { 
    $client->authenticate($_GET['code']); 
    $_SESSION['token'] = $client->getAccessToken(); 
    header('Location: http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF']); 
} 

if (isset($_SESSION['token'])) { 
    $client->setAccessToken($_SESSION['token']); 
} 

if($client->isAccessTokenExpired()) { 
    /
    echo 'Access Token Expired'; // Debug 
    //$client->refreshToken($refreshToken); 
} 

if ($client->getAccessToken()) { 

    $event = new Google_Event(); 

    $event->setSummary('Appointment'); 
    $event->setLocation('Somewhere'); 

    $start = new Google_EventDateTime(); 
    $start->setDateTime('2013-08-28T14:00:00.000+01:00'); 
    $event->setStart($start); 

    $end = new Google_EventDateTime(); 
    $end->setDateTime('2013-08-28T15:25:00.000+01:00'); 
    $event->setEnd($end); 

    $createdEvent = $cal->events->insert('[email protected]', $event); 

    //echo "<pre>" . print_r($createdEvent, true) . "</pre>"; 
    echo $createdEvent->getId(); 


    //test pulling events 
    $events = $cal->events->listEvents('[email protected]'); 

    while(true) { 
     foreach ($events->getItems() as $event) { 
     echo $event->getSummary(); 
     } 
     $pageToken = $events->getNextPageToken(); 
     if ($pageToken) { 
     $optParams = array(
      'pageToken' => $pageToken, 
      'timeMin'=>'2013-08-26T00:00:00+01:00', 
      'timeMax'=>'2013-08-31T00:00:00+01:00' 
      ); 
     $events = $cal->events->listEvents('[email protected]', $optParams); 
     } else { 
     break; 
     } 
    } 
    //print "<h1>Events List</h1><pre>" . print_r($events, true) . "</pre>"; 



    $calList = $cal->calendarList->listCalendarList(); 
    print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>"; 


$_SESSION['token'] = $client->getAccessToken(); 
} else { 
    $authUrl = $client->createAuthUrl(); 
    print "<a class='login' href='$authUrl'>Connect Me!</a>"; 
} 

私は明確ではないよ、私の以前の記事と同じようにあるべきかここに行く。私のトークンは期限切れです - 私はリフレッシュトークンを持っています。私のコードにどのような変更を加えれば、私がアクセスするたびに承認を自動的に更新する必要がありますか?

編集:エラーコードは次のとおりです。The OAuth 2.0 access token has expired, and a refresh token is not available

私はちょうど試してみて、さらに

の混乱を避けるために解決するために私の試みに含まのだそれを超えると追加の行のカップルはありがとうコメントアウトしました

答えて

10

OK - 新しいアクセストークンを取得するためにリフレッシュトークンを取得する問題を修正しました。

refreshTokenで打ち抜き部分は私のリフレッシュトークンです
if($client->isAccessTokenExpired()) { 
    echo 'Access Token Expired'; // Debug 
    $client->refreshToken('X/XXXXXX'); 
} 

:私はすべてのアクセスを試み始めた前に私がこのコードを使用していました。コードにキーをハードコードしました。

データベースにキーを格納することについての記述を見てきたように、これはおそらく正しい解決策ではないでしょう。したがって、現在のアクセストークンをリフレッシュトークンを持つdbに格納し、ハードコーディングを保存する必要がありますか?

私が使用したこのメソッドは、有効期限が切れた後に再び機能することを願っています - 指が交差しました!

+1

アクセストークンを期限切れにする方法を知っていますので、リフレッシュトークンを使用して新しいアクセストークンを要求することをテストできますか? – Anagio

+0

私は(100%ではないが)とにかく3600msという短いタイムスケールしかないと思いますか?私はそれをsleeoingでリフレッシュをテスト:)私はmenmoryからあなたが作る呼び出しのパラメータのトークンの寿命を指定することができると思います。私はoauth遊び場で遊ぶことから有益な情報をたくさん見つけました – Ray

+0

感謝しました。期限が切れたときに私は混乱しました。データを取得していましたが、アクセストークンが期限切れかどうかをチェックする条件がありませんでした。リフレッシュトークンを使用して新しいものを取得する。あなたのコードは助けて、私はそれを働かせました。 – Anagio

関連する問題