如何使用服务帐户使用PHP访问我的Google通讯录?

时间:2015-08-14 18:22:55

标签: php google-api google-apps google-contacts

我的手机服务器上有一个应用程序,用于通过客户端登录访问我的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在杀死客户端登录时忘记了这一点:(

1 个答案:

答案 0 :(得分:0)

服务帐户不是您,默认情况下不能访问任何数据。将服务帐户视为虚拟用户。如果您使用服务帐户电子邮件地址并将其作为用户添加到Google云端硬盘中的文件夹中,则可以访问Google云端硬盘中的该文件夹。如果您使用服务帐户电子邮件地址并授予其访问Google日历上的某个日历的权限,则可以访问该日历。

我不知道授予其他用户访问您的Google通讯录的权限。

我建议你尝试使用Oauth2。