Ganz herzlichen Dank für die REST API! Das ist wirklich eine Funktion die ganz oben auf dem Wunschzettel stand.
Ich würde die Funktion gerne aus PHP heraus nutzen, scheitere aber leider trotz der Doku.
Um einen neuen Kontakt anzulegen habe ich den dokumentierten (und funktionierenden) CURL Aufruf
cat <<EOF | curl -i 'https://example.org/egroupware/groupdav.php/<username>/addressbook/' -X POST -d @- -H "Content-Type: application/json" --user <username>
{
"fullName": "First Tester",
"name/personal": "First",
"name/surname": "Tester",
"organizations/org/name": "Test Organization",
"emails/work": "test.user@test-user.org",
"addresses/work/locality": "Test-Town",
"addresses/work/postcode": "12345",
"addresses/work/street": "Teststr. 123",
"addresses/work/country": "Germany",
"addresses/work/countryCode": "DE",
"phones/tel_work": "+49 123 4567890",
"online/url": "https://www.example.org/",
"notes/note": "This is a note.",
"egroupware.org:customfields/Test": "Content for Test"
}
EOF
versucht in php zu transferieren.
require_once __DIR__ .'/vendor/autoload.php';
use Ramsey\Uuid\Uuid;
$uuid = Uuid::uuid4();
// set post fields
$post = [
"uid" => "urn:uuid:" . $uuid,
'fullName' => "First Tester3",
'name/personal' => "First",
"name/surname" => "Tester",
"organizations/org/name" => "Test Organization",
"emails/work" => "test.user@test-user.org",
"addresses/work/locality" => "Test-Town",
"addresses/work/postcode" => "12345",
"addresses/work/street" => "Teststr. 123",
"addresses/work/country" => "Germany",
"addresses/work/countryCode" => "DE",
"phones/tel_work" => "+49 123 4567890",
"online/url" => "https://www.example.org/",
"notes/note" => "This is a note.",
"egroupware.org:customfields/Test" => "Content for Test"
];
$post = json_encode($post);
$ch = curl_init('https://egw.xxxxx.de/egroupware/groupdav.php/hansa/addressbook/');
curl_setopt($ch, CURLOPT_USERPWD, "xxx:yyyy");
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type:Content-Type: application/json", "Accept: application/pretty+json"));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
// execute!
$response = curl_exec($ch);
// close the connection, release resources used
curl_close($ch);
// do anything you want with your response
var_dump($response);
Das funktioniert soweit (Adressbucheintrag wird angelegt), gibt aber keine Rückmeldung über den angelegten Kontakt. Nach der Doku würde ich eine ‘Location’ erwarten.
Es kommt : string(0) “” zurück.
Zudem verstehe ich nicht, warum ich die uuid mitgeben muss. Ohne diese bekomme ich
string(113) "{
"error": 422,
"message": "Error parsing JsContact Card attribute 'uid': Invalid or missing UID: null"
}"
Wenn ich den Aufruf via curl in der shell mache, geht es ohne uid und ich bekomme auch die ‘Location’ zurück.
Zudem habe ich versucht mittels
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
den angelegten Kontakt wieder zu löschen. Das ging leider auch nicht.
Was mache ich falsch?
Dank und Gruß
Hansa