【问题标题】:google API client :"{ "error" : "invalid_grant", "error_description" : "Incorrect token type." }"谷歌 API 客户端:"{ "error" : "invalid_grant", "error_description" : "不正确的令牌类型。" }"
【发布时间】:2015-02-09 21:56:09
【问题描述】:

我正在开发一个带有 google plus 登录的 android 应用程序。 当用户尝试登录时,我将令牌发送到服务器并使用官方 Official Google APIs Client Library for PHP 使用谷歌 API 进行验证

当我尝试验证访问令牌时发生错误,因此我对其进行了调试并记录了请求结果的响应:

object(Google_Http_Request)#5 (14) { ["batchHeaders":"Google_Http_Request":private]=> array(3) { ["Content-Type"]=> string(16) "application/http" ["Content-Transfer-Encoding"]=> string(6) "binary" ["MIME-Version"]=> string(3) "1.0" } ["queryParams":protected]=> array(0) { } ["requestMethod":protected]=> string(4) "POST" ["requestHeaders":protected]=> array(2) { ["content-type"]=> string(33) "application/x-www-form-urlencoded" ["content-length"]=> int(254) } ["baseComponent":protected]=> string(27) "https://accounts.google.com" ["path":protected]=> string(15) "/o/oauth2/token" ["postBody":protected]=> string(254) "code=ya29.2QAkG7lKto3jZk-6ASgU0MUw_Wy7MdecJTudTkHC4D_XXXXXXFoDHct7C1g&grant_type=authorization_code&redirect_uri=&client_id=547769313690-XXXX.apps.googleusercontent.com&client_secret=hmOBOZk6EDJo-HVq4AMaIUwY" ["userAgent":protected]=> string(0) "" ["canGzip":protected]=> bool(false) ["responseHttpCode":protected]=> int(400) ["responseHeaders":protected]=> array(11) { ["content-type"]=> string(16) "application/json" ["cache-control"]=> string(46) "no-cache, no-store, max-age=0, must-revalidate" ["pragma"]=> string(8) "no-cache" ["expires"]=> string(29) "Fri, 01 Jan 1990 00:00:00 GMT" ["date"]=> string(29) "Thu, 11 Dec 2014 11:53:39 GMT" ["x-content-type-options"]=> string(7) "nosniff" ["x-frame-options"]=> string(10) "SAMEORIGIN" ["x-xss-protection"]=> string(13) "1; mode=block" ["server"]=> string(3) "GSE" ["alternate-protocol"]=> string(15) "443:quic,p=0.02" ["transfer-encoding"]=> string(7) "chunked" } ["responseBody":protected]=> string(80) "{ "error" : "invalid_grant", "error_description" : "Incorrect token type." }" ["expectedClass":protected]=> NULL ["accessKey"]=> NULL } 

这是我的 PHP 代码:

<?php
    $google_client_id       = 'XXX.apps.googleusercontent.com';
    $google_client_secret   = 'XXX-HVq4AMaIUwY';
    $google_redirect_url    = 'xxx';
    $google_developer_key   = 'XXXXXXXXX';
    $google_application_name = 'XXX Login';
    $google_application_scope = 'https://www.googleapis.com/auth/plus.me'; /* I only needed the basic user info */
    $google_redirect_uri='';
    //include google api files
    require_once 'vendor/autoload.php';

    $gClient = new Google_Client();
    $gClient->setApplicationName($google_application_name);
    $gClient->setClientId($google_client_id);
    $gClient->setClientSecret($google_client_secret);
    //$gClient->setRedirectUri($google_redirect_uri);
    $gClient->setScopes($google_application_scope);
   // $gClient->setDeveloperKey($google_developer_key);
    //$gClient->setAccessType('offline');

  $gClient->authenticate("ya29.2QAkG7lKto3jZk-6ASgU0MUw_Wy7MdecJTudTkHC4D_XXXXXX");

  $token = json_decode($gClient->getAccessToken());

    $google_oauthV2 = new Google_Service_Oauth2($gClient);
   $user_info = $google_oauthV2->userinfo->get();
   var_dump($user_info);
    die();

【问题讨论】:

    标签: php android google-api google-api-php-client


    【解决方案1】:

    我最近在 http://www.sanwebe.com/2012/11/login-with-google-api-php 的教程的帮助下实现了同样的目标

    您似乎错过了 OAuth 流程的一部分。验证函数期望在登录时接收从 Google 发送的令牌。

    输入有效的重定向 URI 也可以避免潜在的问题。

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 1970-01-01
      • 2019-09-12
      • 2017-05-16
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 2020-09-01
      • 1970-01-01
      相关资源
      最近更新 更多