我正在尝试制作一个服务器应用程序,以定期从自己的GA帐户提取Google Analytics(分析)数据。请注意,它是访问我自己的数据的个人服务器端应用程序,即 没有最终用户访问此应用程序。
因此,我在Google API控制台中将我的应用程序注册为 服务应用程序 ,这给了我一个 客户端ID 和一个 私钥 。据我了解,服务应用程序不使用 应用程序密钥 和 重定向URL, 因为此服务器到服务器的身份验证流程中没有最终用户。确实,Google API控制台没有给我任何秘密,也没有提示我输入重定向URL。
不幸的是,我不知道如何在Google的PHP Client API中对我的服务应用程序进行身份验证。有关于验证的Web应用程序广泛的文件 与 最终用户。
Google的文档表明,可以通过使用私钥对JWT请求签名来对服务器之间进行身份验证。我只是不知道如何在PHP客户端API中进行操作(尽管我已经浏览了源代码,并且肯定有一个脚本使用私钥签署了请求。)
我在这里想念什么吗?如何使用我的私钥和Google PHP客户端API对服务应用程序执行身份验证?
为清晰而编辑
Google Analytics API V3现在支持由.p12签名的JWT请求返回的OAuth2令牌。也就是说, 我们现在可以使用带有服务帐户的Analytics API 。
目前仅提取4年的每日数据, 仅此而已。
这是一个快速的’n’肮脏的逐步说明:
转到Google API控制台并创建一个新应用
在“ 服务” 标签中,翻转 Google Analytics(分析) 开关
在“ API访问” 选项卡中,单击“ 创建OAuth2.0客户端ID”
输入您的姓名,上传徽标,然后单击 下一步
选择 服务帐户 选项,然后按 创建客户ID
下载您的私钥
现在,您回到“ API访问” 页面。您会看到名为“ 服务帐户” 的部分,其中包含 客户ID 和 电子邮件地址
复制电子邮件地址(类似 ####@developer.gserviceaccount.com )
访问您的GA管理员, 并将此电子邮件作为用户添加到您的媒体资源中
这是必须的;否则,您将得到隐秘的错误。
通过Github 获取最新的Google PHP客户端API
git submodule add https://github.com/google/google-api-php-client.git google-api-php-client-read-only
摇滚乐(感谢所有人提供有关更新的班级名称的提示):
// api dependencies require_once(PATH_TO_API . 'Google/Client.php'); require_once(PATH_TO_API . 'Google/Service/Analytics.php'); // create client object and set app name $client = new Google_Client(); $client->setApplicationName(APP_NAME); // name of your app // set assertion credentials $client->setAssertionCredentials( new Google_Auth_AssertionCredentials( APP_EMAIL, // email you added to GA array('https://www.googleapis.com/auth/analytics.readonly'), file_get_contents(PATH_TO_PRIVATE_KEY_FILE) // keyfile you downloaded )); // other settings $client->setClientId(CLIENT_ID); // from API console $client->setAccessType('offline_access'); // this may be unnecessary? // create service and get data $service = new Google_Service_Analytics($client); $service->data_ga->get($ids, $startDate, $endDate, $metrics, $optParams);
下面的原始解决方法
看来,尽管文档含糊不清,但大多数Google API仍不支持服务帐户,包括Google Analytics(分析)。它们无法消化由.p12签名的JWT请求返回的OAuth2令牌。因此,截至目前,您 不能将Google Analytics(分析)API V3与服务帐户一起使用 。
解决方法:
在Google API控制台中,创建一个 客户端 应用程序。
请按照下列步骤谷歌PHP客户端API的例子来生成client_auth_url使用client_id,client_secret和redirect_uri
client_auth_url
client_id
client_secret
redirect_uri
使用cURL 登录到Google。(请务必使用Cookie文件!)
client_auth_url在cURL中打开并填写表格。请确保您设置curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);并 curl_setopt($ch, CURLOPT_HEADER, 1); 为authorization_code 将在Location:响应的头。
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_HEADER, 1);
authorization_code
Location:
5.用你的client_id,client_secret,redirect_uri从第4步,激活代码,发布到请求谷歌的的OAuth2令牌机。确保您包含grant_type= "authorization_code"在您的帖子字段中。
grant_type= "authorization_code"
6.您现在有一个refresh_token永不过期的工作台access_token!发布到请求谷歌的的OAuth2令牌机与你client_id,client_secret,redirect_uri,和refresh_token当你的access_token到期,你会得到一个新的。
refresh_token
access_token