使用Google API Feeds批量删联系人遇500错误求助
解决Google联系人批量删除API返回500错误的问题
我帮你排查了几个核心问题点,调整后应该能解决这个500错误:
1. 请求方法用错了
Google Contacts的批量操作接口(包括批量删除)必须使用POST方法,而不是你代码里的DELETE。DELETE仅适用于单个联系人的删除请求,批量操作需要通过POST提交包含所有删除指令的XML Feed,这是batch接口的规范要求。
2. XML里的占位符没替换
你XML中的<email>是占位符,必须替换成实际的Google账号邮箱(比如your-name@gmail.com)。Google需要这个信息定位到你要操作的联系人所属账户,未替换的话服务器无法识别目标资源,直接导致500错误。
另外建议给每个<batch:id>设置唯一值(比如delete1、delete2),后续可以更清晰地对应每个删除操作的结果,方便排查单个操作的问题。
修正后的示例代码
调整后的XML请求体
<?xml version="1.0"?> <feed xmlns="http://www.w3.org/2005/Atom" xmlns:gContact="http://schemas.google.com/contact/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:batch="http://schemas.google.com/gdata/batch"> <entry> <batch:id>delete1</batch:id> <batch:operation type="delete"/> <id>http://www.google.com/m8/feeds/contacts/your-name@gmail.com/base/c001f30f8a96bd</id> </entry> <entry> <batch:id>delete2</batch:id> <batch:operation type="delete"/> <id>http://www.google.com/m8/feeds/contacts/your-name@gmail.com/base/13112ef0ace9063</id> </entry> </feed>
修正后的PHP请求代码
$req = new \Google_Http_Request('https://www.google.com/m8/feeds/contacts/default/full/batch/'); $req->setRequestHeaders(array('content-type' => 'application/atom+xml; charset=UTF-8')); $req->setRequestMethod('POST'); // 替换为POST方法 $req->setPostBody($myXML);
额外注意事项
- 确保你使用的联系人ID是从Google Contacts API获取到的有效ID,无效ID也可能引发服务器错误;
- 确认你的API客户端已经获得了正确的权限范围(需要包含
https://www.google.com/m8/feeds/),且授权凭证处于有效状态。
内容的提问来源于stack exchange,提问作者jeremy.romano
相关产品推荐
相关产品推荐

