好的,这就是我想做的.
我想在服务器上实现Google事件的抓取,这样我就可以围绕它们构建其他功能,比如发送远程推送通知。
我被困在获取auth令牌并将其保存在服务器上并使用它从Google的日历api中获取事件的部分,因为无法找到用于该令牌的资源。有人能给这件事放点光吗。
更新
直到第三步,我才成功地实现了这个场景。
我从Google获得了auth令牌和刷新令牌,并将其保存在数据库中。现在使用Google php客户端,我正在尝试使用前面获得的访问令牌连接到谷歌的日历API。我正在使用以下代码..。
require_once(APPPATH . "libraries/Google/Google_Client.php");
require_once(APPPATH . "libraries/Google/contrib/Google_CalendarService.php");
$client = new Google_Client();
$client->setAccessToken($google_access_token);
$calendar = new Google_CalendarService($client);
$calendarList = $calendar->calendarList->listCalendarList();
echo print_r($calendarList, true);
但现在我发现了这个错误..。
PHP致命错误:在/myserver/application/libraries/Google/auth/Google_OAuth2.php:162中,带有消息的未命名异常'Google_AuthException‘无法解码令牌 堆栈跟踪: /myserver/application/libraries/Google/Google_Client.php(170):Google_oAuth2->setAccessToken(‘a_token.’)
据我所知,我正在直接尝试在Google中设置访问令牌,而不指定任何重定向url或其他通常在用户授权访问服务器上的Google日历时使用的参数。这应该像我想要的那样运作吗?
更新2
经过进一步的研究,我发现使用setAccessToken
直接设置访问令牌并不有效,因为Google需要在setAccessToken
方法中使用JSON编码的字符串。经过一些调整后,我将代码更改为.
require_once(APPPATH . "libraries/Google/Google_Client.php");
require_once(APPPATH . "libraries/Google/contrib/Google_CalendarService.php");
$client = new Google_Client();
$client->setAccessType('offline');
$client->refreshToken($google_refresh_token);
$newToken = $client->getAccessToken();
$client->setAccessToken($newToken);
$calendar = new Google_CalendarService($client);
$calendarList = $calendar->calendarList->listCalendarList();
echo print_r($calendarList, true);
现在我得到的错误是一个invalid_request
。
刷新OAuth2令牌时出错,消息:{“错误”:"invalid_request"}‘
发布于 2013-10-17 06:07:35
最后,我能够回答我自己的问题。希望这能帮到别人。
步骤1& 2。我让谷歌OAuth协议在我的iOS应用程序中按照这个极好的移动教程中的说明工作。
步骤3.我将访问令牌和刷新令牌保存在我的web服务器上的数据库中。
步骤4.使用从iOS应用程序I获得的刷新令牌,使用以下代码连接到Google日历API .
require_once(APPPATH . "libraries/Google/Google_Client.php");
require_once(APPPATH . "libraries/Google/contrib/Google_CalendarService.php");
/* setup google client object */
$client = new Google_Client();
$client->setClientId(GOOGLE_CLIENT_ID);
/* refresh access token */
$client->refreshToken($google_refresh_token);
$newToken = $client->getAccessToken();
$client->setAccessToken($newToken);
/* get google calendars list */
$calendar = new Google_CalendarService($client);
$calendarList = $calendar->calendarList->listCalendarList();
echo print_r($calendarList, true);
https://stackoverflow.com/questions/18393996
复制相似问题