我的手机服务器上有一个应用程序,用于通过客户端登录访问我的Google通讯录,以便我的SIP手机可以查找它们。既然客户登录被杀了,我还没有办法用PHP访问我的Google通讯录,而无需用户(我和我的妻子)对任何内容进行身份验证。
// create the instance of the Google Client
$this->googleclient = new Google_Client();
$this->googleclient->setApplicationName(GOOGLE_CLIENTID);
// define the credentials and access level (analytics readonly)
$credentials = new Google_Auth_AssertionCredentials(
GOOGLE_EMAIL,
array(
'https://www.googleapis.com/auth/contacts.readonly',
),
file_get_contents("config/key.p12"),
"notasecret"
);
// set the user it wants to impersonate
$credentials->sub = GOOGLE_USER;
// throw the credentials into the client object
$this->googleclient->setAssertionCredentials($credentials);
// authenticate the application and fetch the token
$this->googleclient->setClientId(GOOGLE_CLIENTID);
$this->googleclient->getAuth()->refreshTokenWithAssertion();
$tokenData = json_decode($this->googleclient->getAccessToken());
$accessToken = $tokenData->access_token;
$val = file_get_contents("https://www.google.com/m8/feeds/contacts/".GOOGLE_USER."/full"
."?v=3.0&access_token=".$accessToken);
print_r($val);
当我删除GOOGLE_USER常量并且只允许服务帐户访问自己的数据时,它会起作用,但这不是我的联系人数据,而不是我妻子的联系人数据。我知道Google Apps中有联系人委托,而且管理员管理员也可以委派这些内容以允许服务帐户访问它。
但是我如何以非Apps用户身份执行此操作?似乎Google在杀死客户端登录时忘记了这一点:(
答案 0 :(得分:0)
服务帐户不是您,默认情况下不能访问任何数据。将服务帐户视为虚拟用户。如果您使用服务帐户电子邮件地址并将其作为用户添加到Google云端硬盘中的文件夹中,则可以访问Google云端硬盘中的该文件夹。如果您使用服务帐户电子邮件地址并授予其访问Google日历上的某个日历的权限,则可以访问该日历。
我不知道授予其他用户访问您的Google通讯录的权限。
我建议你尝试使用Oauth2。