(PHP)Oauth2.0 - 错误401 Google Contacts API

时间:2016-09-05 07:55:43

标签: php oauth-2.0 google-api google-api-php-client

我尝试使用Google API进行联系,但当我想要检索所有联系人时,我有一个错误401('无效的证书')...我不明白,因为令牌已生成但我无法撤回联系人。



<p style="background-color:red;">
<a href="destroy.php">se deconnecter</a>
<p>
<?php
 session_start();

  require 'lib/google-api-client/Google/autoload.php';
  $client = new Google_Client();
  $client->setApplicationName('Application de test');
  $client->setClientId('xxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com');
  $client->setClientSecret('xxxxxxxxxxxxxxxxxxxx');
  $client->setRedirectUri('http://localhost/Gmail/index.php');
  //Acces aux données seulement quand l'user est en ligne
  $client->setAccessType('online');
  //configuration des données auxquels on veut avoir accés
  $client -> setScopes('https://www.google.com/m8/feeds');

  if(isset($_GET['code'])){
    $client->authenticate($_GET['code']);
    $_SESSION['token'] = $client->getAccessToken();
    header('Location:http://localhost/Gmail/index.php');
  }

  if(!isset($_SESSION['token'])){
    //Generation du lien pour s'authentifier via l'api Google
    $url =  $client->createAuthUrl();
 ?>

 <a href="<?= $url ?>">Importer Google contacts</a>
<?php
  }else{
    $client->setAccessToken($_SESSION['token']);
    $token = json_decode($_SESSION['token']);
    var_dump($token->access_token);
    var_dump($client->getAccessToken());
    $curl = curl_init('https://www.google.com/m8/feeds/contacts/default/full?alt=json&max-results=50&token='.$token->access_token);
    curl_setopt($curl , CURLOPT_RETURNTRANSFER , true);
    curl_setopt($curl , CURLOPT_SSL_VERIFYPEER , false);
    curl_setopt($curl , CURLOPT_TIMEOUT , 10);
    $contact_json = curl_exec($curl);
    var_dump($contact_json);
    curl_close($curl) ;
    $contacts = json_decode($contact_json);
    var_dump($contacts);
  }
 ?>
&#13;
&#13;
&#13; enter image description here

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

您必须更正您的CURL网址使用access_token而不是网址中的令牌。

$curl = curl_init('https://www.google.com/m8/feeds/contacts/default/full?alt=json&max-results=50&access_token ='.$token->access_token);

答案 1 :(得分:2)

为了获取数据,您需要进行身份验证,因为您似乎知道。但是,您使用&token=

标记访问令牌

正确的方法是&access_token=

示例:

$curl = curl_init('https://www.google.com/m8/feeds/contacts/default/full?alt=json&max-results=50&access_token='.$token->access_token);