gpt4 book ai didi

php - Google API 联系人 v.3,PHP : add a contact to the group

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:09:04 24 4
gpt4 key购买 nike

我成功地使用 cURL 创建了一个新的联系人,但是当我想为这个联系人添加组成员时,我收到 400 错误。我读过 this docs并提出了同样的要求,但没有奏效。我究竟做错了什么?感谢您的任何想法!

这就是我创建带有组信息的 XML 的方式:

$doc = new DOMDocument('1.0', 'UTF-8');
$doc->formatOutput = true;

$entry = $doc->createElement('entry');
$entry->setAttribute('gd:etag', $etag);
$doc->appendChild($entry);

$category = $doc->createElement('category');
$category->setAttribute('scheme', 'http://schemas.google.com/g/2005#kind');
$category->setAttribute('term', 'http://schemas.google.com/contact/2008#contact');
$entry->appendChild($category);

$id = $doc->createElement('id', 'http://www.google.com/m8/feeds/contacts/default/base/'.$idgmail);
$entry->appendChild($id);

$updated = $doc->createElement('updated', $update_info);
$entry->appendChild($updated);

// Add group info (My Contacts)

$group = $doc->createElement('gContact:groupMembershipInfo');
$entry->appendChild($group);
$group->setAttribute('deleted', 'false');
$group->setAttribute('href', 'http://www.google.com/m8/feeds/groups/default/base/6');

// Add another group info

$group = $doc->createElement('gContact:groupMembershipInfo');
$entry->appendChild($group);
$group->setAttribute('deleted', 'false');
$group->setAttribute('href', 'http://www.google.com/m8/feeds/groups/default/base/'.$my_group_id);

$group_info = $doc->saveXML();

这是我的 cURL:

$url = 'https://www.google.com/m8/feeds/contacts/default/full/'.$idgmail.'/';

$headers = array(
'Host: www.google.com',
'Gdata-version: 3.0',
'Content-length: '.strlen($group_info),
'Content-type: application/atom+xml',
'If-Match: *',
'Authorization: OAuth '.$access,
);

$curl = curl_init();

curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $group_info);
curl_setopt($curl, CURLOPT_FAILONERROR, true);

$resp = curl_exec($curl);
print_r($resp); // Prints nothing
echo curl_getinfo($curl, CURLINFO_HTTP_CODE); // Gives 400
curl_close($curl);

最佳答案

好的,我自己弄明白了:)
1) 首先,要更新联系人,您应该使用 PUT 请求,而不是 POST。
2) 在你的 XML 中你不能使用“默认”(你会得到另一个错误),你应该使用完整的电子邮件地址:

$group = $doc->createElement('gContact:groupMembershipInfo');
$entry->appendChild($group);
$group->setAttribute('deleted', 'false');
$group->setAttribute('href', 'http://www.google.com/m8/feeds/groups/user.email@gmail.com/base/6');

3) 如果您没有指定命名空间 gContact,您将收到 400 错误。入口标签的整个内容应该如下所示:

$entry = $doc->createElement('entry');
$entry->setAttribute('xmlns', 'http://www.w3.org/2005/Atom');
$entry->setAttribute('xmlns:gd', 'http://schemas.google.com/g/2005');
$entry->setAttribute('xmlns:gContact', 'http://schemas.google.com/contact/2008');
$doc->appendChild($entry);

4) 最后,要将联系人添加到特定组,您不需要更新它(正如我从文档中想到的那样),您可以在创建联系人时进行更新(是的,现在看起来很明显)。如果您尝试更新联系人的组而不先创建它,您将收到 400 错误(条目未设置任何字段)。
希望这会对某人有所帮助!
附言为了解决这些问题,我使用了谷歌的“OAuth 2.0 Playground”,非常有用! https://developers.google.com/oauthplayground/

关于php - Google API 联系人 v.3,PHP : add a contact to the group,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15566287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com