php - 谷歌 API 客户端 :"{ "错误“: "invalid_grant", "error_description": "Incorrect token type."}”

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

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

当我尝试验证访问 token 时发生错误,所以我调试它并记录请求结果的响应:

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();

最佳答案

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

您似乎错过了 OAuth 流程的一部分。身份验证功能需要在登录时接收从 Google 发送的 token 。

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

希望对您有所帮助。

关于php - 谷歌 API 客户端 :"{ "错误“: "invalid_grant", "error_description": "Incorrect token type."}”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27422463/

相关文章:

php - 是否有可能在 302.htaccess RedirectMatch 之后获取原始 URL?

php - jQuery 克隆行 - 在特定字段中插入值

android - 如何使用 Python RSA 加载 adbkey.pub

android - java.lang.IllegalArgumentException : Component class com. google.android.gms.wallet.ocr.CardRecognitionShimProxyActivity

ios - 如何访问 Google 云端硬盘中存储的隐藏应用数据?

php - 使用 Omnipay 的 PayPal 快速结帐未在沙盒帐户中显示订单

php - 如何修复意外的 T 变量错误

java - 通过 UDP 从 Android 向外部传感器发送数据

javascript - 谷歌 api 刷新 token 返回 null 与 react-google-login

curl - 使用cURL Google API从刷新 token 获取访问 token