Я пытался импортировать все контакты из Outlook 365 в другую базу данных. У меня нет проблем с получением всех имен, адресов электронной почты, адресов и т. Д.
Но когда я хочу получить заметки, которые расположены на второй странице контактов в Outlook 365, они выходят пустыми.
Я использую код PHP, вызывая API с этим URL:
https://outlook.office.com/api/v2.0/Me/Contacts
без особых параметров. Все логин, токены и т. Д. Часть позаботилась и работает должным образом.
Вот пример массива, который я получаю в настоящее время из моего вызова с print_r:
Array ([Id] => … [CreatedDateTime] => … [LastModifiedDateTime] =>
… [ChangeKey] => … [Categories] => Array ([0] => …)
[ParentFolderId] => … [Birthday] => [FileAs] => … [DisplayName] =>
… [GivenName] => … [Initials] => [MiddleName] => [NickName] => …
[Фамилия] => … [Название] => [YomiGivenName] => [YomiSurname] =>
[YomiCompanyName] => [Generation] => [EmailAddresses] => Array ([0] => Массив ([Имя] => … [Адрес] => …)) [ImAddresses] => Массив () [JobTitle] => … [CompanyName] => … [Отдел] = >
[OfficeLocation] => … [Profession] => [BusinessHomePage] => …
[AssistantName] => [Manager] => [Домашние телефоны] => Массив ()
[MobilePhone1] => … [BusinessPhones] => Массив ([0] => …)
[HomeAddress] => Array () [BusinessAddress] => Array ([Улица] =>
… [City] => … [State] => … [CountryOrRegion] => … [PostalCode] =>
…) [OtherAddress] => Array () [SpouseName] => [PersonalNotes] =>
[Children] => Array ())
«Персональные заметки» каждый раз пусты, хотя заметки в контактах содержат много текста.
Функция вызова API:
public function makeApiCall($method, $url, $payload = NULL) {
// Generate the list of headers to always send.
$headers = array(
"User-Agent: outlook/1.0", // Sending a User-Agent header is a best practice.
"Authorization: Bearer ".$this->access_token, // Always need our auth token!
"Accept: text/*, application/xml, application/json; odata.metadata=none", // Always accept JSON response.
"client-request-id: ".self::makeGuid(), // Stamp each new request with a new GUID.
"return-client-request-id: true", // Tell the server to include our request-id GUID in the response.
"X-AnchorMailbox: ".$this->user_email // Provider user's email to optimize routing of API call
);
// print_r($headers);
$curl = curl_init();
switch(strtoupper($method)) {
case "GET":
error_log("Doing GET");
break;
case "POST": // PAYLOAD POUR POST DOIT ETRE json_encode!!!
error_log("Doing POST");
$headers[] = "Content-Type: application/json";
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
break;
case "PATCH":
error_log("Doing PATCH");
$headers[] = "Content-Type: application/json";
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PATCH");
curl_setopt($curl, CURLOPT_POSTFIELDS, $payload);
break;
case "DELETE":
error_log("Doing DELETE");
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
break;
default:
error_log("INVALID METHOD: ".$method);
exit;
}
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($curl);
error_log("curl_exec done.");
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($httpCode >= 400) {
return array('errorNumber' => $httpCode,
'error' => 'Request returned HTTP error '.$httpCode);
}
$curl_errno = curl_errno($curl);
$curl_err = curl_error($curl);
if ($curl_errno) {
$msg = $curl_errno.": ".$curl_err;
error_log("CURL returned an error: ".$msg);
curl_close($curl);
return array('errorNumber' => $curl_errno,
'error' => $msg);
}
else {
error_log("Response: ".$response);
curl_close($curl);
return json_decode($response, true);
}
}
Любая помощь будет принята с благодарностью, спасибо!
Интересно. Я тоже это вижу, но только если я установлю заметку в настольном Outlook. Если я установлю его в Outlook Web App, он будет работать нормально. Я даже могу отредактировать «сломанный» в OWA, и он исправит это.
В качестве временного ответа вы можете редактировать контакты в OWA, чтобы исправить их. Я обновлю этот ответ, как только получу лучший ответ.
Других решений пока нет …