我正在升级我曾经为 google fusion 表制作的 joomla 组件。我下载了新的 php api。但是我对如何开发我的网站以及使用 oauth 的一些事情有一些疑问。
所以我的网站读取融合表并允许我的 (Joomla) 用户更改、删除或添加数据到任何这些表。所以我的问题是,我是否需要一个 Web 应用程序类型或服务帐户的客户端登录。使用服务帐户似乎更合乎逻辑。如果是这样,我如何使用 php 和 google php api 框架进行连接。
$clientlogin_curl = curl_init();
curl_setopt($clientlogin_curl,CURLOPT_URL,'https://www.google.com/accounts/ClientLogin');
curl_setopt($clientlogin_curl, CURLOPT_POST, true);
curl_setopt ($clientlogin_curl, CURLOPT_POSTFIELDS,
"Email=".$username."&Passwd=".$password."&service=fusiontables&accountType=GOOGLE");
curl_setopt($clientlogin_curl,CURLOPT_CONNECTTIMEOUT,2);
curl_setopt($clientlogin_curl,CURLOPT_RETURNTRANSFER,1);
$token = curl_exec($clientlogin_curl);
curl_close($clientlogin_curl);
$token_array = explode("=", $token);
$token = str_replace("\n", "", $token_array[3]);
上面是我以前的连接方式,但现在我得到了配额超出,因为它已被弃用。
我正在阅读这篇文章,https://code.google.com/p/google-api-php-client/wiki/OAuth2,并且在服务帐户部分未提及 Fusion Tables。如果不是,我的重定向 uri 应该是什么
编辑
这是我现在的代码
jimport('gft-jdc.oauth-php.src.Google_Client');
jimport('gft-jdc.oauth-php.src.contrib.Google_PlusService');
const CLIENT_ID = 'XXXXXXXXXXXXXXXXXXXXXXX7pu.apps.googleusercontent.com';
const SERVICE_ACCOUNT_NAME = 'XXXXXXXXXXXXXXXXXXXpu@developer.gserviceaccount.com';
const KEY_FILE = '/home/jdc/workspace/xxxxxxxxxxxxxxxprivatekey.p12';
class ClientLogin {
public static function getAuthToken($username, $password) {
$client = new Google_Client();
$client->setApplicationName("API Project");
var_dump(CLIENT_ID);
var_dump(KEY_FILE);
$client->setClientId(CLIENT_ID);
// Set your cached access token. Remember to replace $_SESSION with a
// real database or memcached.
if (isset($_SESSION['token'])) {
$client->setAccessToken($_SESSION['token']);
}
// Load the key in PKCS 12 format (you need to download this from the
// Google API Console when the service account was created.
$key = file_get_contents(KEY_FILE);
$client->setAssertionCredentials(new Google_AssertionCredentials(
SERVICE_ACCOUNT_NAME,
array('https://www.googleapis.com/auth/fusiontables'),
$key)
);
$client->authenticate();
if ($client->getAccessToken()) {
$_SESSION['token'] = $client->getAccessToken();
}
$token = $_SESSION['token'];
var_dump($token);
return $token;
}
}
我收到这个错误
解决方案,我刚刚解决了最后一个问题,你不需要 $client->authenticate()
这是一个解决方案如何使用 Google API PHP 客户端获取 OAuth2 访问令牌?
if ($client->getAuth()->isAccessTokenExpired()) {
$client->getAuth()->refreshTokenWithAssertion();
}