我想创建一个小机器人,可以在某些条件下将G +时刻推送到G +页面。想用PHP试试。我有:在Google控制台中注册了网络应用,启用了Google+ API,在我的Apache服务器上安装了小型PHP脚本,结果是401 Unathorized。我使用的是https://github.com/google/google-api-php-client
中的google-api-php-client我通过互联网搜索了答案,但没有找到任何答案。每个人都有自己的快乐结局,而且都工作了,但我已经尝试了所有这些 - 只有401来找我。
我的剧本:
<?
header("Content-Type: text/html; charset=utf-8");
session_start();
ini_set("display_errors", 1);
require_once 'Google/Client.php';
require_once 'Google/Service/Plus.php';
$client = new Google_Client();
$client->setClientId("MY_CLIENT_ID");
$client->setClientSecret("MY_CLIENT_SECRET");
$client->setRedirectUri("REDIRECT_URL");
$client->setAccessType('offline');
$client->addScope("https://www.googleapis.com/auth/plus.login");
$client->addScope("https://www.googleapis.com/auth/plus.me");
$client->addScope("https://www.googleapis.com/auth/userinfo.profile");
$client->addScope("https://www.googleapis.com/auth/userinfo.email");
$requestVisibleActions = array('http://schemas.google.com/AddActivity');
$client->setRequestVisibleActions($requestVisibleActions);
if (!isset($_GET['code'])) {
if (isset($_SESSION['access_token'])) {
$client->setAccessToken($_SESSION['access_token']);
$moment_body = new Google_Service_Plus_Moment();
$plus = new Google_Service_Plus($client);
$moment_body->setType("http://schemas.google.com/AddActivity");
$item_scope = new Google_Service_Plus_ItemScope();
$item_scope->setId("target-id-214wdefsadf1");
$item_scope->setType("http://schemas.google.com/AddActivity");
$item_scope->setName("The Google+ Platform");
$item_scope->setDescription("A page that describes just how awesome Google+ is!");
$item_scope->setImage("https://developers.google.com/+/plugins/snippet/examples/thing.png");
$moment_body->setTarget($item_scope);
$momentResult = $plus->moments->insert('me', 'vault', $moment_body);
} else {
$authUrl = $client->createAuthUrl();
header("Location: ".$authUrl);
exit;
}
} else {
$client->authenticate($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
header("Location: REDIRECT_URL");
exit;
}
因此脚本成功地请求所有需要访问相应于在客户端中注册的作用域,获取一个令牌,将其写入会话,但是当它尝试插入新时刻时,它会获得致命错误:未捕获异常&#39; Google_Service_Exception&# 39;消息&#39;错误调用POST https://www.googleapis.com/plus/v1/people/me/moments/vault :( 401)未经授权&#39;在/var/www/rico/Google/Http/REST.php:79
有什么问题?而且我已尝试在stackoveflow上放置一些解决方案,但它们并没有帮助。我还检查了我的authURL - 似乎没问题,有正确的request_visible_actions和其他......我不知道出了什么问题......
答案 0 :(得分:1)
你可能会遗漏一些东西。也许你的例子假设你正在设置你设置的一些实际值。但是,您需要设置ApplicationName和DeveloperKey。如果您没有确定开发人员密钥,许多API呼叫将不会返回授权。
$client->setApplicationName($plApp->authenticationData->applicationName);
$client->setDeveloperKey($authData->apiKey);
我认为你实际上是在设置这些。返回网址必须与针对特定应用程序在Google开发者网站上为该应用程序设置的网址匹配
$client->setClientId($authData->clientId);
$client->setClientSecret($authData->clientSecret);
$client->setRedirectUri($returnUrl);