使用 LightOpenID 获取 Google 联系人


Getting Google Contacts using LightOpenID?

我目前正在使用LightOpenID允许用户登录我的网站,在那里我可以自动提取他们的用户名和电子邮件地址:

$openid->required = array('namePerson/first', 'namePerson/last', 'contact/email');
$openid->identity = 'https://www.google.com/accounts/o8/id';

这里我使用参数 namePerson/firstnamePerson/lastcontact/email

我知道为了获得用户联系人列表,我必须使用提要:

https://www.google.com/m8/feeds

但是,我似乎无法弄清楚我需要为此使用哪些参数?

如果我完全删除参数行,我只会得到一个空数组。

任何人都可以帮我弄清楚我需要哪些参数来获取联系人吗?

这是我当前的代码:

<?php
    require '/var/www/libraries/openid.php';
    try {
        $openid = new LightOpenID;
        if(!$openid->mode) {
            //$openid->required = array('gd/fullName');
            $openid->identity = 'https://www.google.com/m8/feeds/contacts/oshirowanen.y%40gmail.com/full';
            header('Location: ' . $openid->authUrl());
            exit;
        } elseif($openid->mode == 'cancel') {
            echo "cancelled";
            exit;
        } else {
            if ( $openid->validate() ) {
                $returned = $openid->getAttributes();
                print_r($returned);
                exit;
            } else {
                echo "something is wrong";
                exit;
            }
        }
    } catch(ErrorException $e) {
        echo $e->getMessage();
    }
?>

你不能用LightOpenID做到这一点,因为它只实现了OpenID协议。

您将需要OAuth(2.0)协议来执行此操作。根据文档:

关于授权协议

我们建议使用 OAuth 2.0 对请求进行授权。

如果您的应用程序有某些不寻常的授权要求, 例如在请求数据访问的同时登录(混合) 或全域授权 (2LO),则不能 目前使用 OAuth 2.0 令牌。在这种情况下,您必须改为使用 OAuth 1.0 令牌和 API 密钥。您可以找到应用程序的 API 键,在 Google API 控制台的简单 API 访问部分中 "API 访问"窗格。

根据文档:

检索所有联系人

要检索用户的所有联系人,请发送授权的 GET 请求 到以下网址:

https://www.google.com/m8/feeds/contacts/{userEmail}/full

使用适当的值代替用户电子邮件。

注意:特殊用户电子邮件值默认值可用于引用 经过身份验证的用户。

根据文档,这应该是可能的:https://developers.google.com/accounts/docs/OpenID

OpenID+OAuth 混合协议允许 Web 开发人员将 OpenID 请求与 OAuth 相结合 身份验证请求。此扩展对于同时使用 OpenID 和 OAuth 的 Web 开发人员非常有用,特别是因为它通过请求用户一次而不是两次批准来简化用户的流程。