Google api Google用Javascript和PHP联系API

Google api Google用Javascript和PHP联系API,google-api,google-api-php-client,Google Api,Google Api Php Client,我正在制作一个由ajax控制的网站,在这个网站上,我使用谷歌的Javascript SDK对我的用户进行身份验证,并访问他们的谷歌联系人。我打算做的是: 通过我们的重定向和请求访问他们的联系人列表,以及访问管理他们的联系人,在浏览器中对用户进行身份验证 如果他/她授予我访问权限,请将用户id与刷新令牌一起存储在我的数据库中。如果我没有弄错,我只能通过服务器端获取刷新令牌 稍后,如果用户希望通过我的网站查看他们的google联系人,请向我的服务器发送ajax请求,该服务器向用户请求access_令

我正在制作一个由ajax控制的网站,在这个网站上,我使用谷歌的Javascript SDK对我的用户进行身份验证,并访问他们的谷歌联系人。我打算做的是:

  • 通过我们的重定向和请求访问他们的联系人列表,以及访问管理他们的联系人,在浏览器中对用户进行身份验证
  • 如果他/她授予我访问权限,请将用户id与刷新令牌一起存储在我的数据库中。如果我没有弄错,我只能通过服务器端获取刷新令牌
  • 稍后,如果用户希望通过我的网站查看他们的google联系人,请向我的服务器发送ajax请求,该服务器向用户请求access_令牌,检索数据并将其显示给用户,或者如果用户要求,将其存储在我自己的数据库中
  • 我已经完成了这三个步骤中的第一步,我可以验证一个用户,并且可以访问一个有效期为3600小时的访问令牌,但是我不知道如何验证用户服务器端,而不将其重定向到任何地方。我也尝试过使用GooglePHPSDK,但似乎不知道如何做到这一点。我确信这在某种程度上是可能的,因为它在:

    如果我们已经在Android或Javascript web客户端上进行了身份验证,那么我们可能已经通过不同的方式获得了代码。在这种情况下,我们只需要交换它。如果它是通过gapi Javascript客户端检索的,我们需要设置重定向URI postmessage

    唯一的问题是我不知道怎么做。什么是$U uri?我没有重定向url,因为当我实现Javascript SDK时,它说,我不必使用重定向uri,因为Javascript身份验证是在同一个窗口中完成的,没有重定向(正如我所希望的那样)

    我如何着手解决上面提到的第二步和第三步?我在哪里可以找到一个非黑客或不太黑客教程,以实现我的期望结果

    编辑:

    我基本上想要实现的是以下几点:

    • 请求用户允许访问Google联系人,而无需从我的网站重定向他(通过弹出窗口)
    这是通过Javascript SDK实现的

    • 获取此权限的访问令牌和刷新令牌,并将其存储在数据库中
    Javascript SDK只授予访问令牌,我不想通过ajax调用传递,因为我觉得这是不安全的

    • 使用刷新令牌,在服务器端为用户生成访问令牌,并处理数据,然后将数据发送回服务器
    下面是我的PHP文件目前的外观:

    $client = new Google_Client();
    $client->setClientId($client_id);
    $client->setClientSecret($client_secret);
    $client->setScopes('https://www.googleapis.com/auth/plus.me');
    $client->setRedirectUri($PHP_SELF);
    $client->setState('offline');
    
    $authUrl = $client->createAuthUrl();
    
    if (isset($_GET['code'])) {
        $client->authenticate($_GET['code']);
        $_SESSION['access_token'] = $client->getAccessToken();
        $result=$client->getAccessToken();
    } else {
        header("Location: ".$authUrl);
        exit;
    }
    

    为了实现我想要的,我应该通过Javascript SDK以某种方式获得$\u get['code']参数,但我不知道如何获得:|

    经过几天的头痛,我也找到了这个。。。感谢谷歌,你的文档太糟糕了

     $client->setRedirectUri($redirect_uri);
    
    $redirect_uri参数应该是一个字符串:“postmessage”,当通过javascript进行身份验证时,您应该请求代码而不是令牌,然后将其发送到服务器端脚本,以进行身份验证并交换令牌

      gapi.auth.authorize({client_id: googleApi.clientId, scope: googleApi.scopes, response_type: 'code', immediate: true}, g_handleAuthResult);
    

    访问令牌在3600秒或1小时内有效,我知道这一点,但我还需要一个刷新令牌,我想通过PHP处理数据。我不认为将身份验证后获得的访问令牌发送到我的php服务器以供使用是一种好的做法,因为它是相当敏感的数据。您无法通过JavaScript获取刷新令牌,您需要从php.DalmTo获取它,我应该如何继续?请检查:
      gapi.auth.authorize({client_id: googleApi.clientId, scope: googleApi.scopes, response_type: 'code', immediate: true}, g_handleAuthResult);