1

ここ数日間、これを修正しようとしています。私はすべてのフォーラムを読みましたが、まだ解決策はありません。どんな助けでも大歓迎です。

更新コードを使用しようとしています。(有効期限が切れたアクセスコードを再利用したくありません)。私のコードはhttp://www.jensbits.com/demos/ga/app/ga_app_oauth2_refreshtoken.txtに基づいています。

コードは次のとおりです。

if (isset($_GET['code'])) {
    $accessToken = get_oauth2_token($_REQUEST['code'],"online"); //refresh_token not fetched

}

//上記の行を $client->authenticate() に置き換えてから $client->getAccessToken() に置き換えると、プログラムは機能します。しかし、その後、更新コードを取得していません

以下に、リンクから関数を貼り付けています

function get_oauth2_token3($grantCode, $grantType) {
$redirect_uri = "xxxx";

$oauth2token_url = "https://accounts.google.com/o/oauth2/token";
$clienttoken_post = array(
    "client_id" => GCLIENT_ID,
    "client_secret" => GCLIENT_SECRET);

if ($grantType === "online") {
    $clienttoken_post["code"] = $grantCode;
    $clienttoken_post["redirect_uri"] = $redirect_uri;
    $clienttoken_post["grant_type"] = "authorization_code";
}

if ($grantType === "offline") {
    $clienttoken_post["refresh_token"] = $grantCode;
    $clienttoken_post["grant_type"] = "refresh_token";
}

$curl = curl_init($oauth2token_url);

curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $clienttoken_post);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

$json_response = curl_exec($curl);
curl_close($curl);

echo '<pre>';
print_r($grantCode);
print_r($json_response);
print_r(json_decode($json_response));
echo '</pre>';

ここにリフレッシュトークンはありません

$authObj = json_decode($json_response);

//if offline access requested and granted, get refresh token
if (isset($authObj->refresh_token)) {
    global $refreshToken;

リフレッシュトークンなし $refreshToken = $authObj->refresh_token; }

$accessToken = $authObj->access_token;
return $accessToken;

}

変更されたコード

if ($grantType === "offline") {
    $clienttoken_post["grant_type"] = "authorization_code";
    $clienttoken_post["response_type"] = "code";

    $clienttoken_post["scope"] = "https://www.googleapis.com/auth/plus.me";
    $clienttoken_post["redirect_uri"] = $redirect_uri;
}

また、URL を https://accounts.google.com/o/oauth2/tokenからhttps://accounts.google.com/o/oauth2/authに変更しました

4

3 に答える 3

1

あなたのコードは正しいと思います。実行手順をチェックして、正しいコードが実行されていることを確認してください。

また、SDKが最新でない場合は、SDKを更新してみてください。この問題が発生したとき、SDKを更新して機能しました...

于 2013-01-27T11:28:51.527 に答える
1

リフレッシュ トークンを取得するには、「オンライン」ではなく「オフライン」を使用するトークンをリクエストする必要があります。

バックグラウンドで何が起こっているかの概要については、 https://developers.google.com/accounts/docs/OAuth2WebServerを参照してください。OAuth 2 オフライン フローを理解するのに役立ちます。

于 2013-01-18T20:51:38.137 に答える
-1

このメッセージの別の原因として考えられるのは、CLIENT_ID または CLIENT_SECRET が正しくないことです。

于 2013-10-01T15:34:09.583 に答える