使用PHP调用Google People API获取联系人时多数返回空结果求助
解决Google People API仅返回部分联系人完整信息的问题
这问题我之前帮人排查过好几次,核心原因其实是Google People API默认不会返回联系人的详细字段——它的设计是按需获取,你不明确说要哪些字段,就只给最基础的resourceName和etag。
解决步骤:
在请求中显式指定
personFields参数
调用people.connections.list时,必须通过personFields告诉API你需要哪些字段。比如你要姓名、电话号码、邮箱,就把这个参数设为names,phoneNumbers,emailAddresses。给你个PHP代码示例,修改后的请求应该是这样的:
<?php // 假设你已经完成了OAuth授权,拿到了$client实例 $peopleService = new Google_Service_PeopleService($client); // 配置请求参数,关键是添加personFields $optParams = [ 'personFields' => 'names,phoneNumbers,emailAddresses,photos', // 按需添加需要的字段 'pageSize' => 100 // 分页参数,根据你的联系人数量调整 ]; // 发起请求 $connections = $peopleService->people_connections->listPeopleConnections('people/me', $optParams); // 处理返回的联系人数据 foreach ($connections->getConnections() as $person) { // 获取姓名 if (!empty($person->getNames())) { $name = $person->getNames()[0]->getDisplayName(); } // 获取电话号码 if (!empty($person->getPhoneNumbers())) { $phone = $person->getPhoneNumbers()[0]->getValue(); } // 其他字段同理处理 var_dump($name, $phone); }检查OAuth权限范围
确保你的OAuth 2.0请求中包含了正确的权限范围:- 如果只需要读取联系人,用
https://www.googleapis.com/auth/contacts.readonly - 如果需要读写,用
https://www.googleapis.com/auth/contacts
要是权限不够,即使指定了personFields,也可能拿不到对应的数据。
- 如果只需要读取联系人,用
可选字段参考
personFields支持的常用字段有:
names:姓名信息phoneNumbers:电话号码emailAddresses:邮箱地址photos:头像addresses:地址organizations:工作/组织信息birthdays:生日
你可以根据自己的需求组合这些字段,用逗号分隔就行。
内容的提问来源于stack exchange,提问作者El Presidente
相关产品推荐
相关产品推荐

