【问题标题】:Google Calendar API/PHP谷歌日历 API/PHP
【发布时间】:2014-03-24 21:47:18
【问题描述】:

我完全按照说明进行操作,复制了代码示例 - 我无法让它响应(在日历上写一个事件)。 请帮助 - 如果对我有任何帮助。经过 12 个小时的工作和明天的最后期限后,我要拔掉头发了。

在 Google Developer Console 上,创建了一个项目并生成了所需的密钥。 为了安全起见,以下键已更改。 除了第一个带有订单号的回声外,没有显示任何回声。 我的程序员让这段代码可以工作,所以我知道没关系 - 控制台上的设置有误,但我需要一个线索:

完整的代码 - 就像我说的,它已经过测试并适用于另一个项目。

    if(isset($_GET['orderid']) )
    {
        $_SESSION['oid']= $_GET['orderid'];

    }
echo $_GET['orderid'];
$client = new Google_Client();
$client->setApplicationName("API Project");
$client->setClientId('9999999999999.apps.googleusercontent.com');
$client->setClientSecret('xxxxxxxxxxxxxxxxxxxxxxxxx');

$scriptUri = "http://".$_SERVER["HTTP_HOST"].$_SERVER['PHP_SELF'];
$client->setRedirectUri($scriptUri);

//$client->setDeveloperKey('AIxxxxxxxxxxxxx'); - SERVER APPS
$client->setDeveloperKey('AIxxxxxxxxxxxxxxx'); // - WEB APPS 


$cal = new Google_CalendarService($client);
if (isset($_GET['logout'])) {
 unset($_SESSION['token']);
}

if (isset($_GET['code'])) {
 echo $_GET['code'];
 $client->authenticate($_GET['code']);
 $_SESSION['token'] = $client->getAccessToken();
 header('Location: http://' . $_SERVER['HTTP_HOST'] .      $_SERVER['PHP_SELF']);
}

if (isset($_SESSION['token'])) {
 echo $_SESSION['token'];
 $client->setAccessToken($_SESSION['token']);
}

if ($client->getAccessToken()) {
$calList = $cal->calendarList->listCalendarList();
//print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";
$_SESSION['token'] = $client->getAccessToken(); 

// 数据库访问就在这里,就像我说的,它已经过测试并且可以工作

echo "<center>Event has successfully added to Your Google Calendar...</center>";
unset($_SESSION['oid']);


} else {
  $authUrl = $client->createAuthUrl();

  print "<a class='login' href='$authUrl'>Click Here for Google Authorization!</a>";
}

【问题讨论】:

  • 我们需要的不仅仅是“它不起作用”。你怎么知道它不起作用?你遇到了什么错误?
  • 而且,是的,代码在我看来并不“OK”。你是echoing 数组值,但没有确保它们已设置;您不处理任何可能的错误; $cal 已创建但从未使用过;你是echoing 的东西之后 重定向。此代码可能会以多种方式失败。
  • orderid 没有回显,没有日历条目,也没有消息: if ($client->getAccessToken()) { echo "
    事件已成功添加到您的 Google 日历...
    ";未设置($_SESSION['oid']); }
  • OK - 我将代码更新为完整代码,这样您就可以看到一切正常,但控制台中的某些内容设置错误。该部分的说明不具体,充其量是旧的。
  • 在移动回声之后,我知道这行代码被破坏了:$calList = $cal->calendarList->listCalendarList();

标签: php google-calendar-api


【解决方案1】:

如果您只想在 Google 日历上添加一个活动(没有其他交互),我认为您应该使用直接链接:

https://www.google.com/calendar/render?action=TEMPLATE&text=Your+event+title&dates=20140325T090000Z/20140325T100000Z&details=Your+event+description&location=Room+12&pli=1&uid&sf=true&output=xml

您只需要自定义变量并转义非 URI 字符。

** 编辑 **

您是否通过 OAuth 2 成功连接用户?

** 编辑 2 **

您的代码在没有数据库访问权限的情况下为我工作:

if ($client->getAccessToken()) {
    $calList = $cal->calendarList->listCalendarList();
    //print "<h1>Calendar List</h1><pre>" . print_r($calList, true) . "</pre>";
    $_SESSION['token'] = $client->getAccessToken(); 

    // DB ACCESS 

    echo "<center>Event has successfully added to Your Google Calendar...</center>";
    unset($_SESSION['oid']);
} else {
    $authUrl = $client->createAuthUrl();
    print "<a class='login' href='$authUrl'>Click Here for Google Authorization!</a>";
}

朱利安

【讨论】:

  • 嗯,它确实从数据库表中读取和呈现,从订单生成开始。我必须将密钥保存在数据库中,因为根据顺序,它可以写入 20 个不同的日历。这行得通吗?
  • 所以一个订单可以有几百个条目到 20 个不同的日历。
  • 哦,好的,我明白了。所以这个解决方案对你来说并不是最好的。我为您编辑了另一个问题的答案。
  • 我知道这行代码有问题: $calList = $cal->calendarList->listCalendarList();我也知道这个错误还有很多其他帖子,但没有找到解决方案。
  • 我尝试了您的代码,并成功获得了:“事件已成功添加到您的 Google 日历...”消息。你的 PHP 版本是多少?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多