如何通过PHP调用Google Contact API获取联系人电话号码
可以通过Google Contacts API获取联系人电话号码!
当然可以获取联系人的电话号码,你的代码里有几个关键问题导致无法正确读取手机号,我来帮你修复:
问题分析
- 变量名错误:你在读取电话号码时使用了未定义的变量
$cnt,但循环遍历的联系人变量是$contact,这直接导致无法获取到正确的字段值。 - 未处理无电话号码的情况:部分联系人可能没有填写手机号,需要先判断字段是否存在再取值,避免报错或返回默认值的误判。
修正后的核心代码(Callback.php循环部分)
修改循环内的电话号码读取逻辑,同时优化邮箱的容错处理:
if (!empty($contacts['feed']['entry'])) { foreach($contacts['feed']['entry'] as $contact) { // 正确获取电话号码:先判断字段是否存在,再取值 $phone = '0000000000'; if (isset($contact['gd$phoneNumber'][0]['$t'])) { $phone = $contact['gd$phoneNumber'][0]['$t']; } // 获取姓名和邮箱地址,增加邮箱不存在的容错 $email = '无邮箱'; if (isset($contact['gd$email'][0]['address'])) { $email = $contact['gd$email'][0]['address']; } $return[] = array ( 'name'=> $contact['title']['$t'], 'email' => $email, 'phone' => $phone ); } }
额外优化建议
- 用官方库处理Token更可靠:你当前手动用Curl请求Token,其实可以直接用Google_Client的内置方法,代码更简洁且不易出错:
// 替换手动Curl获取Token的代码块 $client = new Google_Client(); $client->setClientId($google_client_id); $client->setClientSecret($google_client_secret); $client->setRedirectUri($google_redirect_uri); $client->setScopes(array('https://www.googleapis.com/auth/contacts','https://www.googleapis.com/auth/userinfo.email')); $token = $client->fetchAccessTokenWithAuthCode($auth_code); $accesstoken = $token['access_token']; $client->setAccessToken($accesstoken);
- 权限确认:你的Scope已经包含
https://www.googleapis.com/auth/contacts,这个权限足够读取联系人的所有基本信息(包括电话号码),无需额外添加权限。
经过以上修正后,你的脚本就能正确获取到联系人的电话号码了!
内容的提问来源于stack exchange,提问作者Smith
相关产品推荐
相关产品推荐

